gdb
有一个文档记录的但尚未实现的命令(截至8.3版本)叫做macro expand-once
。其目的是执行一步宏扩展而不递归到其他宏调用中。根据文档:
macro expand-once
expression
macro exp1
expression
(此命令尚未实现。)显示显式出现在expression中的预处理器宏调用的扩展结果。该扩展中出现的宏调用保持不变。该命令使您能够更清楚地看到特定宏的效果,而不会被进一步的扩展所混淆。由于
GDB
只是扩展宏而不解析结果,因此expression不必是有效表达式;它可以是任何令牌字符串。
真是个难以忍受的诱惑!这种功能将为概念上简单的迭代gdb
脚本奠定基础,以输出宏扩展的每个步骤,这正是我需要的信息。无论它是否由gdb
提供对我来说都是次要的,但我确实希望以某种方式自动化这个过程——我已经厌倦了查找代码并手写所有内容。
在gdb
的macro expand-once
命令实现之前,是否有其他编程方式可以逐步展开C预处理器宏?我想这可能是通过从cpp
中转储宏定义,解析输出并创建一种“调用图”来实现的,但也许我太天真了。
注意:虽然悬赏说明声明“仅提供构建潜在解决方案的库函数的引用将不获得悬赏”,但如果悬赏期结束时未发布悬赏资格的解决方案,则仍可能接受此类答案。