【问题标题】:Can I use Visual Studio debugger within #define functions?我可以在#define 函数中使用 Visual Studio 调试器吗?
【发布时间】:2013-05-31 19:32:29
【问题描述】:

我正在使用 Visual Studio 2010(编写 C++)并隔离了来自对 #define 函数的调用的异常。定义的函数有点复杂,我希望能够使用调试器单步执行它以找出异常发生的位置。有没有办法做到这一点?

关系是这样的: my.h 定义了一个继承自their.h 中声明的第三方类的类。 their.h 中的第三方类包含感兴趣的宏,该宏定义在另一个头文件中,例如“macro.h”。

【问题讨论】:

    标签: c++ visual-studio-2010 debugging macros c-preprocessor


    【解决方案1】:

    您需要先将宏展开到您的源代码中,然后才能对其进行调试。您可以手动完成,也可以让 Visual Studio 生成预处理器输出。 http://msdn.microsoft.com/en-us/library/8z9z0bx6(v=vs.80).aspx 描述了 VS 2005 的过程。然后,您必须创建一个新的“调试”项目,并将源代码替换为由 Visual Studio 的预处理器生成的 .i 文件。这对于任何不平凡的项目来说都是一种痛苦,所以我会先尝试手动进行,特别是因为您确定了导致异常的特定宏,因此您可以尝试手动扩展那个宏。您还可以使用这些预处理器生成的 .i 文件进行交叉引用。
    UPD:如果有问题的宏在多个位置使用,您可能想找出哪个位置导致异常。在调试器下运行它(我假设你已经生成了完整的调试信息,如果没有,你应该)并在异常时检查调用堆栈。仅展开该位置。
    请注意:开源社区中的某些项目因使用宏作为代码混淆工具而臭名昭著(我想是为了防止他们的商业机密被逆向工程发现)所以祝你好运...

    【讨论】:

    • 采用两层扩展的手动扩展方式,进一步隔离了bug。不幸的是,它在第​​三方代码中,所以我无法修复它。只需要解决它。谢谢。
    【解决方案2】:

    我遇到了同样的问题,我很惊讶 VS2017 在调试期间没有解析宏。 Resharper for C/C++ 很棒,因为它可以部分或完全扩展宏——您可以扩展宏并了解它或重建和调试它,然后恢复更改。我很确定有一个可以玩的试用版。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-10
      相关资源
      最近更新 更多