ltrace不适用于与-z nowoption链接的二进制文件,这是我的 Ubuntu 19.10 系统上的默认设置。它仅适用于与-z lazy.
有没有其他替代方法可以ltrace完成相同的工作,但也适用于now二进制文件?
您可以使用Namhyung Kim 编写的 uftrace 实用程序。尽管我手动从 master 分支构建了代码以确保我使用最新的 vanilla 版本,但它在 Ubuntu 中作为一个包提供。示例main.c:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
puts("Hello World");
return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
构建-z now:
gcc -O2 main.c -z now -o main
Run Code Online (Sandbox Code Playgroud)
ltrace 不起作用:
$ ltrace ./main
Hello World
+++ exited (status 0) +++
Run Code Online (Sandbox Code Playgroud)
但uftrace确实:
$ LD_LIBRARY_PATH=~/uftrace/libmcount ~/uftrace/uftrace -a --force ./main
Hello World
# DURATION TID FUNCTION
58.231 us [ 16283] | puts("Hello World") = 12;
Run Code Online (Sandbox Code Playgroud)
在 Github 上的项目站点上查看此线程:即使没有 PLT #592 也可以跟踪库调用。
| 归档时间: |
|
| 查看次数: |
611 次 |
| 最近记录: |