c++ - 自动跟踪程序执行

标签 c++ c trace

<分区>

我想知道我们是否可以在任何 C 或 C++ 应用程序中启用跟踪。

例如,使用 gcc 选项或小工具,我将启用跟踪,并且跟踪会打印在控制台上或转储到文件中。

由于有很多文件和函数/类,我不想开始手动添加跟踪打印。

如果此类工具不可用,下一个选择是使用脚本并尝试在跟踪打印中添加。

strace 没有多大用处,因为它主要提供系统调用。

最佳答案

要跟踪函数进入/退出,您可以使用选项 -finstrument-functions 重新编译您的代码这样每次调用函数时,都会调用 __cyg_profile_func_enter() 函数,并在函数返回时调用 __cyg_profile_func_exit()

您可以实现这些函数来跟踪被调用函数的地址,并且它们使用 nm将地址转换为函数名。

编辑:etrace完成所有这些:它提供了 __cyg_profile_func_enter()__cyg_profile_func_exit() 的源代码,以及将地址写入命名管道的函数,以及一个 Perl 和 Python 脚本读取地址并使用函数名称和缩进进行实际跟踪。

关于c++ - 自动跟踪程序执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5816950/

相关文章:

iptables - 如何读取 iptables TRACE 日志(策略编号)

c - 使 fscanf 忽略可选参数

c - 用 C 提取二进制文件的最后 128 个字节

ios - PjSip 添加多个 header

c# - 如何像 Firebug 一样检查 C# 中的元素?

c++ - 静态常量字符串数组,如何使用

c++ - 根据模板参数引用不同基类的函数

c++ - 使用 const 引用与 const 变量声明常量文字字符串

c++ - 我如何在 C++ 和 Flash 之间进行通信?

python - Tkinter 基于 OptionMenu 值打包条目小部件,否则 pack_forget