如何调试预处理宏

10

我最近发现了这个项目,该项目主要使用C语言编写,API仅包含少量C函数。不幸的是,该项目似乎存在一些漏洞,特别是我不断收到“double free or corruption”错误。我正在尝试使用valgrind和gdb查找问题所在,问题似乎出现在内存分配器中。不幸的是,第一个valgrind错误发生在一个长达约400行的预处理器宏定义的头文件中。不幸的是,gdb无法在生成的代码上打断点。堆栈跟踪也不是非常有用。是否有任何技术可以用来处理这些类型的错误?


4
如果是我,我会把这个宏转换成内联函数。如果项目确实广泛使用它们(并且这不会让我害怕使用这段代码),我可能会尝试将其预处理为一个文件,然后编译和调试该文件。 - Cody Gray
7
尝试生成预处理器通过(gcc -E选项)后的c源代码,并在该文件中设置断点,该宏有超过400行。 - Picodev
他们以“C方式”定义了一个通用的优先队列 :( - hfhc2
7
嗯,我没看错吧?一个有 400 行 的预处理器宏?强烈建议:立即忘记那个东西! - too honest for this site
1
通常情况下,您应该尝试编写最简单的可能代码来展示问题,并在此处展示它或将其提交到项目的支持页面以获取外部帮助。如果您想独自处理它,也请编写一个简短的示例。如果您确实需要调试外部宏,请让编译器在宏预处理后生成中间步骤(使用gcc的-E选项),从预处理源代码中删除#line指令,并调试该预处理代码。 - Serge Ballesta
你正在处理的确切源代码是什么?我下载了它的目录并想要在上面工作。 - EsmaeelE
1个回答

3
在线编译器Wandbox.org有一个"CPP"模式,非常适合用来尝试C预处理器。
在这里查看一个例子:https://wandbox.org/permlink/tFUsKMIXaQj8hhte 您可以使用gcc -Pcl.exe /E离线执行相同的操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接