2

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

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

4

2 回答 2

2

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

于 2013-05-31T19:52:15.627 回答
1

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

于 2018-02-13T16:33:02.997 回答