在C代码的所有功能中打印输入/退出消息

时间:2014-07-02 13:08:23

标签: c debugging logging crash

我们已经跟踪了几个月的崩溃,我们并没有真正接近。程序在看似随机的时候崩溃了。出于某种原因,我们无法打印出堆栈回溯。而且为了使它更难,崩溃只发生在特定的硬件上,我们还没有想出如何调试,或者如何使用Valgrind等。

通过修订进行二元搜索可能是一种选择。但由于通常需要一个工作日才能产生崩溃,因此非常耗时。

因此。我想在我们的代码中的所有/大多数函数中打印日志消息(或类似的东西)。 “输入功能X”,“离开功能Y”等类型。希望这可以提供一些关于哪个干草堆寻找针的指示。有没有任何简单的方法来做到这一点,而无需手动通过(字面上)成千上万的功能?有人知道可以用于此的任何程序或脚本或宏魔法吗?

由于

1 个答案:

答案 0 :(得分:1)

您需要阅读编译器手册。可能存在功能进入/退出挂钩,您可以声明它将完全按照您要查找的内容进行操作。

例如,在GCC中,您可以使用-finstrument-functions https://gcc.gnu.org/onlinedocs/gcc-4.3.3/gcc/Code-Gen-Options.html。您可以在printf中为每个将函数地址转储到stdout(或任何您喜欢的地方)的函数条目进行编码。然后,您可以使用addr2line(来自binutils)将地址转换为函数名称。