【发布时间】:2011-08-14 14:07:33
【问题描述】:
我想知道我们是否可以在任何 C 或 C++ 应用程序中启用跟踪。
例如,使用 gcc 选项或小工具,我将启用跟踪,并且跟踪要么打印在控制台上,要么转储到文件中。
由于文件和函数/类很多,我不想开始手动添加跟踪打印。
如果没有此类工具,下一个选择是使用脚本并尝试在跟踪打印时添加。
strace 没有多大用处,因为它主要提供系统调用。
【问题讨论】:
-
如果这只是用于开发环境,您可以使用 -g 编译所有内容并在 gdb 中运行程序。这将始终为您提供完整的堆栈跟踪。
-
您可能会检查 C++ 解释器... cint / ch / ...?不确定他们能做什么,但他们比任何编译器更有可能做到这一点。 FWIW,如果您开始查看跟踪的每一行,那么您离使用调试器不远了(除非您的控制较少)。
-
您要跟踪什么?大约有一百万种不同的答案,编译器无法神奇地推断出您想要跟踪的内容。这使得自动添加跟踪变得更加困难。
-
投票结束的范围太广,因为不清楚 什么 OP 想要追踪。更精确的请求:源代码行:stackoverflow.com/questions/764382/automate-tracing-in-gdb,函数调用:stackoverflow.com/questions/311948/…,行和数据:stackoverflow.com/questions/763891/…
-
使用您最喜欢的 CPU 供应商提供的工具。它们是免费的,并且它们利用硬件也可以使您的代码以合理的速度运行。您可能想对此进行调查。英特尔和 AMD 都有我上次检查过的东西:) 跟踪捕获是由 CPU 本身完成的。无需乱码!