我正在调试一个巨大的c源代码,它有很多宏定义。目前在宏上发生了分段错误。 我想能够像调试函数一样调试宏,进入宏定义。 我试过了
./configure debugflags="-gdwarf-2 -g3"
make
但这不起作用,make失败了。如果没有上面的选项,它可以正确编译,但无法调试宏。
那么,我该如何调试宏?提前谢谢
答案 0 :(得分:4)
您可以将宏转换为static inline
功能,例如来自
#define max(a, b) (a) > (b) ? (a) : (b)
到
static inline max(int a, int b)
{
return a > b ? a : b;
}
这使编译器可以为宏(现在的函数)创建调试信息。
答案 1 :(得分:3)
你永远不应该期望能够“进入”一个宏;从编译器的角度来看,宏不存在。在实际编译代码开始之前,它们将被预处理步骤删除。
您可以尝试生成源的预处理版本(这是GCC的-E
选项)并显式编译,以便您拥有一个包含每个宏调用扩展的源文件在哪里使用它可以帮助使它更清晰。
这是“经典”和独立于编译器的方法。您的编译器可能会为您提供更多选项,因此请浏览文档。
关于你的例子,debugflags
不是我认可的,它通常放在CFLAGS
中,但也许你的包装的方式不同。