【发布时间】:2010-09-23 15:13:12
【问题描述】:
我正在寻找像ltrace 或strace 这样可以跟踪可执行文件中本地定义的函数的工具。 ltrace 只跟踪动态库调用,strace 只跟踪系统调用。例如,给定以下 C 程序:
#include <stdio.h>
int triple ( int x )
{
return 3 * x;
}
int main (void)
{
printf("%d\n", triple(10));
return 0;
}
使用ltrace 运行程序将显示对printf 的调用,因为这是一个标准库函数(这是我系统上的动态库),strace 将显示来自启动代码的所有系统调用,用于实现 printf 的系统调用和关闭代码,但我想要一些可以告诉我函数 triple 被调用的东西。假设本地函数没有被优化编译器内联并且二进制文件没有被剥离(符号删除),有没有工具可以做到这一点?
编辑
一些澄清:
- 如果该工具还为非本地函数提供跟踪信息,也可以。
- 我不想重新编译支持特定工具的程序,可执行文件中的符号信息应该足够了。
- 如果我能像使用 ltrace/strace 一样使用该工具附加到现有进程,我会非常高兴。
【问题讨论】:
-
您是否研究过使用 gdb 进行跟踪?它曾经说过我它只适用于远程目标。也许您可以使 gdb 与远程目标一起工作并连接到本地主机?不确定,只是一些随机的想法。
-
我不想中断程序流程,如果 gdb 可以不显眼地跟踪像 ltrace 这样的程序,如果有人告诉我如何,我愿意尝试一下。