我正在使用Visual Studio 2010(编写C ++)并隔离了一个来自#define函数调用的异常。定义的函数有点复杂,我希望能够通过调试器逐步执行它以找出异常发生的位置。有没有办法做到这一点?
关系是这样的:
my.h
定义了一个继承自their.h
中声明的第三方类的类。 their.h
中的第三方类包含感兴趣的宏,它在另一个标题中定义,例如`macro.h'。
答案 0 :(得分:2)
您需要先将宏扩展到源代码中,然后再进行调试。您可以手动执行此操作,也可以使Visual Studio生成预处理器输出。 http://msdn.microsoft.com/en-us/library/8z9z0bx6(v=vs.80).aspx描述了VS 2005的过程。然后,您必须创建一个新的“调试”项目,其源代替由Visual Studio的预处理器生成的.i文件。这对于任何重要项目来说都是一种痛苦,所以我会首先手动尝试,特别是因为您确定了导致异常的特定宏,因此您可以尝试手动扩展该异常。您还可以使用这些预处理器生成的.i文件进行交叉引用。
UPD:如果有问题的宏在多个位置使用,您可能想知道哪个位置负责异常。在调试器下运行它(我假设您已生成完整的调试信息,如果没有,您应该)并在异常时检查调用堆栈。扩展该位置。
请注意:开源社区中的某些项目因使用宏作为代码混淆工具而臭名昭着(我想通过逆向工程保护他们的商业秘密),祝你好运......
答案 1 :(得分:1)
我遇到了同样的问题,我很惊讶VS2017在调试过程中无法解析宏。 Resharper for C/C++非常棒,因为它可以部分或完全扩展宏 - 您可以扩展宏并对其进行修改或重建并调试它,然后还原更改。我很确定有一个可以试用的试用版。