我正在调试一个源代码,它有很多大的#define’d MACRO例程.
我很有兴趣进入它们,但我想,VC不允许步入功能…所以,
我很有兴趣进入它们,但我想,VC不允许步入功能…所以,
>我正在将它们转换为函数,但这对我来说变得很难
有没有办法进入MACRO例程?特别是在VC?
解决方法
除了上面的所有正确答案:我通常做的是显示混合显示(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 }