c++ - 在 VC++ 中步入 MACRO

标签 c++ c debugging gcc visual-c++

我正在调试一个源代码,它有很多大的#define'd MACRO 例程。 我对进入它们很感兴趣,但我想,VC++ 不允许进入功能......所以,

  • 我正在将它们转换为函数,但这对我来说变得越来越困难

有没有办法进入宏例程?尤其是在 VC++ 中?

PS:如果gcc编译器支持进入MACRO,我可以将整个代码移植到gcc

最佳答案

除了以上所有正确答案外:我平时做的是混合显示(C+汇编)。这显示了真正发生的事情。即使您不是底层程序集的专家,它也可以让您了解会发生什么(即它是一个微不足道的替换还是一个复杂的循环)。它还将提供更多进入功能的机会。例如,如果您的宏是

#define foo(a) i++;foo_func(a,i)

你的调试器会显示类似 循环和使用什么样的变量)。您可以使用宏定义作为引用来理解它。

00411454  mov         dword ptr [j],eax 
00411457  cmp         dword ptr [j],0Ah 
0041145B  jge         wmain+58h (411478h) 
    {
        foo(j);
0041145D  mov         eax,dword ptr [i] 
00411460  add         eax,1 
00411463  mov         dword ptr [i],eax 
00411466  mov         eax,dword ptr [i] 
00411469  push        eax  
0041146A  mov         ecx,dword ptr [j] 
0041146D  push        ecx  
0041146E  call        foo_func (411028h) 
00411473  add         esp,8 
    }

这给出了变量 i 和 j 用于调用函数 foo_func 的线索。

如果您使用 Visual C++,它将允许您单步执行从宏 (F11) 调用的函数;虽然不是个人陈述。

关于c++ - 在 VC++ 中步入 MACRO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1496284/

相关文章:

C++ 为什么 `observer_ptr<W>` 有一个采用 `W*` 的构造函数?

android - 创建安卓数据库表

c++ - 针对非指针的指针

c++ - boost::random::uniform_real_distribution 应该在处理器之间相同吗?

C++、Allegro、Ubuntu 和 libpng/LoadPNG

c - HDF5 C代码生成

c - memcpy 和指针。还在工作。为什么?

c++ - cudaMalloc()是否将数组初始化为0?

c++ - 在 Visual Studio 调试器中,{null=???} 是什么意思?

debugging - ollydbg 操作码跟踪