调试C ++宏有一个很好的通用方法吗?

时间:2008-09-19 23:36:34

标签: c++ debugging gcc macros

通常,我偶尔会有一系列嵌套宏,其定义中包含一些预处理器条件元素。这些可能很难调试,因为很难直接看到正在执行的实际代码。

前一段时间我依旧记得找到一个编译器(gcc)标志来扩展它们,但是我在实践中遇到这个问题时遇到了麻烦。

7 个答案:

答案 0 :(得分:14)

gcc -E会将预处理的源输出到stdout。

答案 1 :(得分:8)

对于MSVC用户,您可以右键单击文件/项目,查看设置并更改文件属性以输出预处理源(通常位于obj目录中)。

答案 2 :(得分:5)

这可能不适用于您的情况,但宏确实妨碍了调试,并且经常被过度使用和避免。

您可以使用内联函数替换它们或以其他方式将它们全部删除吗?

答案 3 :(得分:2)

您可能应该开始远离Macros并开始使用内联和模板。

宏是一种旧工具,有时候是正确的工具。作为最后的手段,记住printf是你的朋友(实际上,当你做多线程的东西时,printf并不是一个好朋友)

答案 4 :(得分:1)

使用加载的符号调试dissasembly。

答案 5 :(得分:1)

gcc -save-temps 在将它传递给编译器之前,它将写出一个.i(或C ++的.ii文件),它是C预处理器的输出。这通常很有启发性。

答案 6 :(得分:0)

GCC和兼容的编译器使用-E选项将预处理的源输出到标准输出。

gcc -E foo.cpp

Sun Studio也支持此标记:

CC -E foo.cpp

但更好的是-xdumpmacros。您可以找到更多信息in Suns' docs.