ltrace 的替代方案,它适用于与“-z now”链接的二进制文件?

Sum*_*osh 8 c linux ltrace

ltrace不适用于与-z nowoption链接的二进制文件,这是我的 Ubuntu 19.10 系统上的默认设置。它仅适用于与-z lazy.

有没有其他替代方法可以ltrace完成相同的工作,但也适用于now二进制文件?

Ark*_*zyk 5

您可以使用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 也可以跟踪库调用