我可以在#define函数中使用Visual Studio调试器吗?



我正在使用Visual Studio 2010(编写c++),并且已经隔离了一个来自调用#define函数的异常。定义的函数有点复杂,我希望能够通过调试器一步找出异常发生的地方。有什么办法可以做到吗?

关系如下:my.h定义了一个继承自their.h中声明的第三方类的类。their.h中的第三方类包括感兴趣的宏,它定义在另一个头文件中,例如' macro.h'。

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

我面临同样的问题,我很惊讶VS2017在调试期间没有解决宏。用于C/c++的Resharper非常棒,因为它可以部分或完全扩展宏——您可以扩展宏并对其进行grok或重新构建和调试,然后恢复更改。

最新更新