您可以使用MSVC 6.0的调试器“进入”宏吗?

时间:2009-11-13 19:37:04

标签: winapi debugging visual-c++

我正在使用MSVC 6.0来调用Win32API中的宏,并且我遇到了访问冲突。我知道我传递给宏的指针包含有效地址,但它们显然没有指向正确的数据。

宏接受多个指针,我不确定哪个指针是错误的,所以我想使用MSVC的调试器“进入”宏来查看问题的确切位置。当我尝试到目前为止,调试器只会抛出访问冲突错误。

是否可以使用MSVC 6.0的调试器“进入”宏?如果没有,无论如何我都要查看宏扩展到什么,这样我就可以更好地了解我做错了什么?

4 个答案:

答案 0 :(得分:2)

如果你真的需要跟踪宏代码,唯一的方法是找到宏的定义,手动“实例化”宏代码(替换参数)到“被调用”的位置,然后跟踪它在调试器中作为普通代码。

如果您的技能水平足以将反汇编的代码与原始宏代码反向关联,那么替代变体就是逐步完成反汇编。

答案 1 :(得分:1)

您无法进入宏,因为在编译器完成其工作时,宏已经扩展。但是,您可以步骤通过宏 - 如果您只是执行“步骤”,您将实际遍历宏中的所有代码,就像它是逐行扩展一样。如果你“步入”,你将进入从该宏发出的每个函数调用。如果宏足够小,和/或你很清楚,你就可以通过这种方式“盲目地”。

答案 2 :(得分:0)

你可以进入从宏调用的函数,但据我所知,不能真正单步执行宏行。是的,如果您编写代码 - 您可以找到宏定义(使用MSVC函数/类浏览器查找它的定义位置,可能是某些头文件)

答案 3 :(得分:0)

我只是进入反汇编 - 通常,即使你不是汇编专家,短代码(几行)组装映射很容易回到C / C ++代码(特别是在非发布版本)。希望宏不是那么毛茸茸,不是这里的情况。

请记住,即使没有源代码也会进行大量调试,因此将源代码和反汇编结合在一起通常并不算太糟糕。如果这是你没有太多经验的东西,那就是获得很好的经验。