首页 > 解决方案 > ltrace 的替代方案,它适用于与 `-z now` 链接的二进制文件?

问题描述

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

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

标签: clinuxltrace

解决方案


您可以使用Namhyung Kim 编写的 uftrace 实用程序。尽管我从 master 分支手动构建了代码以确保我使用最新的 vanilla 版本,但它在 Ubuntu 中作为一个包提供。示例main.c

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
  puts("Hello World");

  return EXIT_SUCCESS;
}

构建-z now

gcc -O2 main.c -z now -o main

ltrace不起作用:

$ ltrace ./main
Hello World
+++ exited (status 0) +++

但是uftrace

$ LD_LIBRARY_PATH=~/uftrace/libmcount ~/uftrace/uftrace -a --force ./main
Hello World
# DURATION     TID     FUNCTION
  58.231 us [ 16283] | puts("Hello World") = 12;

在 Github 上的项目站点上查看此线程:即使没有 PLT #592,也可以跟踪库调用


推荐阅读