如何以编程方式在c文件中的每个函数中添加print语句?

use*_*862 7 c debugging flow call

我正在研究嵌入式代码,现在完全依赖于函数内部的打印来计算执行流程(没有可用的堆栈跟踪功能).

经常发生这样的事情,我放了一堆打印语句,构建我的代码并运行它只是为了意识到我应该在其他地方放置打印件.然后再次启动一小时的流程.

有没有一种简单的方法来获取我想要分析的5或6个c文件,并运行一些将进入的工具并在每个函数中添加一个print语句?(这显然必须在变量声明之后,因为这是在C中)

更好的是每次有if/else或switch/case时都有一个打印.基本上是任何条件语句.

mvd*_*vds 11

你没有陈述你正在使用的编译器,但是gcc有一个非常方便的开关:

-finstrument-functions
Run Code Online (Sandbox Code Playgroud)

在每个函数入口和出口处插入一个特殊调用.您可以使用此调整仅编译相关文件,无需修改源代码.

调用您应创建的两个函数:

      void __cyg_profile_func_enter (void *this_fn,
                                     void *call_site);
      void __cyg_profile_func_exit  (void *this_fn,
                                     void *call_site);
Run Code Online (Sandbox Code Playgroud)

Etrace是一个专门用于利用它来创建呼叫追踪的工具,请参阅http://ndevilla.free.fr/etrace/


Ali*_*232 1

你可以使用这样的宏

 #define begin {printf(__func__##" Started");
 #define end printf(__func__##" Ended");}
Run Code Online (Sandbox Code Playgroud)

然后用 begin 和 end 宏替换所有{, }(__func__ 是一个返回函数名称的宏,在 C99 中定义,其他编译器还有其他等效的宏)