有调试C ++宏的好方法吗?

时间:2020-03-06 14:28:15  来源:igfitidea点击:

通常,我有时会在其定义中包含一连串的嵌套宏和一些预处理器条件元素。由于很难直接看到正在执行的实际代码,因此调试起来会很痛苦。

不久前,我隐约记得要找到一个编译器(gcc)标志来扩展它们,但是我很难使它在实践中起作用。

解决方案

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

使用加载的符号进行调试。

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

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

我们可以将它们替换为内联函数,或者以其他方式一起消除它们吗?

我们可能应该从宏中移开,开始使用内联和模板。

宏是一种旧工具,有时是正确的工具。作为最后的选择,请记住printf是朋友(实际上,在执行多线程操作时,printf并没有那么糟糕)

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

gcc -E foo.cpp

Sun Studio还支持以下标志:

CC -E foo.cpp

但更好的是-xdumpmacros。我们可以在Suns的文档中找到更多信息。

gcc -save-temps
在将其提交给编译器之前,将写出一个.i(或者C ++的.ii文件),它是C预处理程序的输出。这通常可以启发人。