c – 自动跟踪程序执行

我想知道我们是否可以在任何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脚本以读取地址并使用函数执行实际跟踪的函数姓名和缩进.

翻译自:https://stackoverflow.com/questions/5816950/automatic-tracing-of-program-execution

转载注明原文:c – 自动跟踪程序执行