<分区>
我想知道我们是否可以在任何 C 或 C++ 应用程序中启用跟踪。
例如,使用 gcc 选项或小工具,我将启用跟踪,并且跟踪会打印在控制台上或转储到文件中。
由于有很多文件和函数/类,我不想开始手动添加跟踪打印。
如果此类工具不可用,下一个选择是使用脚本并尝试在跟踪打印中添加。
strace
没有多大用处,因为它主要提供系统调用。
<分区>
我想知道我们是否可以在任何 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/