|
1
54
使用调试信息编译(因为您已经有了符号信息,所以在中可能也有足够的调试) 鉴于
使用gdb跟踪:
以下是我收集所有函数地址的方法:
|
|
2
23
系统抽头 可用于现代Linux设备(Fedora 10、RHEL 5等)。 然后运行:
|
|
|
3
11
使用 Uprobes
假设您希望跟踪中的所有函数
|
|
|
4
9
以下是输出结果:
在Solaris上,truss(strace等效)能够过滤要跟踪的库。当我发现斯特拉斯没有这样的能力时,我很惊讶。 |
|
|
5
4
更多: ftrace.1 |
|
6
3
KcacheGrind https://kcachegrind.github.io/html/Home.html 测试程序:
现在,您将被放在一个非常棒的GUI程序中,该程序包含许多有趣的性能数据。 在右下角,选择“调用图”选项卡。这显示了一个交互式调用图,当您单击函数时,它与其他窗口中的性能指标相关联。
由此可见:
最酷的事
因此,即使没有源代码,也可以使用它,只有可执行文件。
在Ubuntu 18.04上测试。 |
|
|
7
2
如果您将该函数外部化到外部库中,您还应该能够看到它被调用(使用ltrace)。 这样做之所以有效,是因为ltrace将自身置于应用程序和库之间,当所有代码都内部化为一个文件时,它无法拦截调用。 ie:ltrace xterm 从X库中吐出东西,X很难成为系统。
我刚刚浏览了这个应用程序,它看起来很有趣: http://www.gnu.org/software/cflow/
|
|
|
8
2
如果函数不是内联的,您甚至可能会幸运地使用
举个例子,让我们在GCC 4.3.2的开头进行掠夺。
|
|
|
9
2
有一个shell脚本用于使用gdb自动跟踪函数调用。但它不能附加到正在运行的进程。 blog.superadditive.com/2007/12/01/call-graphs-using-the-gnu-project-debugger/
http://web.archive.org/web/20090317091725/http://superadditive.com/software/callgraph.tar.gz
这个脚本在大对象(大约数千个函数)上运行得相当慢,所以我在函数列表上添加了一个过滤器(通过egrep)。这很简单,我几乎每天都使用这个脚本。 |
|
|
10
1
Gprof 也许是你想要的 |
|
|
11
1
请参阅traces,Linux C/C++应用程序的跟踪框架: https://github.com/baruch/traces#readme 它需要用它的instrumentor重新编译代码,但将提供所有函数、它们的参数和返回值的列表。有一个交互式的,可以方便地导航大数据样本。 |
|
12
0
callgrind or cachegrind tools Valgrind 会给你你想要的信息。 |
|
|
13
0
这是一个基于本地流的跟踪工具,而不是一个基于本地流的跟踪工具。Linux ELF x86_64/x86_32受公开支持。 |
|
|
MaPo · Linux,设置锁定ICMP_过滤器选项 1 年前 |
|
|
user2138149 · 双栈网络服务器无法按预期处理ipv4请求 1 年前 |
|
|
Marco · PyCharm Linux系统文件上os.stat异常 1 年前 |