如何在C中跟踪特定的功能/文件?

时间:2019-05-22 04:49:35

标签: c function gcc

我已经知道GCC的参数-finstrument-functions可以钩住函数,而参数-finstrument-functions-exclude-file(functions)-list可以排除某些要跟踪的文件/函数。

但是现在我有很多文件要编译,只有其中一些需要跟踪。我想知道是否可以包括一些要跟踪的特定功能/文件,例如-finstrument-functions-include-file(functions)-list

非常感谢!

3 个答案:

答案 0 :(得分:1)

如果使用cmake构建项目,则可以从特定级别添加COMPILE_OPTIONS来受益。使用

add_compile_options()

用于目录范围的设置

target_compile_options()

针对特定于目标的设置和

set_source_files_properties()

用于文件特定设置。

以您的情况

set_source_files_properties( 
 myfile1.cc  PROPERTIES COMPILE_FLAGS  -finstrument-functions)

答案 1 :(得分:0)

GCC不支持这种现成的方式(这是构建系统的一项任务)。实现您想要的目标的一种常见方法是编写一个外壳包装程序,以替换GCC并在需要的地方添加标志:

$ cat path/to/fake/gcc
#!/bin/sh
FLAGS=
if echo "$*" | grep -q 'myfile1.c'; then
  FLAGS=-finstrument-functions
fi
exec /usr/bin/gcc "$@" $FLAGS
$ export PATH="path/to/fake:$PATH"

答案 2 :(得分:0)

GCC可以扩展最近的GCC plugins编译器。

但是现在我有很多文件要编译,只有其中一些需要跟踪。

您应该考虑编写自己的GCC插件来完成这项工作。另请参见this draft报告。

您可以配置build automation工具(例如GNU makeninja)来帮助您。

最后,可以生成一些C代码(例如#include版的文件)。考虑一下元编程方法(例如使用SWIGANTLRBisonGPP或您自己的C代码生成器),也许使用X-macros