如何为C语言的每个函数插入打印以进行调试?

时间:2017-11-23 08:54:28

标签: c debugging

我正在研究和调试一个软件。该软件中有数千种功能。我计划在每个函数的入口和出口点添加printf()。这将花费很多时间。 有没有一个工具/脚本可以做到这一点? 我可以使用'__cyg_profile_func_enter'。但它只能得到解决的问题。但我必须运行另一个脚本来获取函数名称。我也希望得到这个函数的输入参数的值。

1 个答案:

答案 0 :(得分:0)

您应该尝试AOP:面向方面编程。 Personnaly我只尝试过Java和Spring AOP,但也有一个C的API:AspectC(https://sites.google.com/a/gapp.msrg.utoronto.ca/aspectc/home)。从我所看到的,它不是唯一的。

关于这个库,我可以在使用AspectC编译之前添加一个切入点:

// before means it's a before function aspect
// call means it's processed when a function is called
// args(...) means it applies to any function with any arguments
// this->funcName is the name of the function handled by AspectC
before(): call(args(...)) {
  printf("Entering %s\n", this->funcName);
}

(我自己没有尝试,但是从参考页https://sites.google.com/a/gapp.msrg.utoronto.ca/aspectc/tutorial中提取)

这只是对可以做什么的基本概述,你仍然需要处理编译(在之前链接的页面中记录),但看起来它可能对你有帮助。尝试一下简单的POC吧。