我从较大(C)项目中切出了一块代码。该代码在许多地方都有许多宏定义 - 其中一些仅由原始,较大的代码库使用,而我切除的代码部分不使用。
我想快速确定实际使用的哪个宏中的哪个宏(这样我就可以删除那些宏)。我不在乎使用它们的代码路径是否被采用(即if (1+1 == 3) { MY_MACRO(a,b,c); }
是我的用途。
这样做的好方法是什么?我能想到的最好的是与 -
注意:
- 如果您有一个解决方案也列出了使用中的功能,那也很好。
- 我仅在项目中删除的代码中直接调用某些功能。如果您的解决方案可以将列出的宏限制为许多实际上从入口点被调用的功能的宏,那就更好
- 我的代码编译和运行(如果有帮助,您可以假设GPROF输出)
- 仅评论所有宏,虽然显然是可行的,但还是很麻烦的。所以我想要一个不需要我这样做的解决方案。
- 预处理器排除的代码未使用;但是,如果您有一个没有观察到此限制的解决方案,那总比没有好。
- 我不想"抛弃预处理器定义的列表",而是那些正在使用的定义。
存在名为pp-trace的clang
工具。它输出每个及其参数的预处理器调用。
您对MacroExpands
事件感兴趣,它看起来像pp-trace
输出:
...
- Callback: MacroExpands
MacroNameTok: X_IMPL
MacroDirective: MD_Define
Range: [(nonfile), (nonfile)]
Args: [a <plus> y, b]
...
从MacroExpands
块中提取MacroNameTok
应该为您带来技巧。