c - ltrace 的替代方案,它适用于与 `-z now` 链接的二进制文件?
问题描述
ltrace
不适用于与-z now
option链接的二进制文件,这是我的 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;
}
构建-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,也可以跟踪库调用。
推荐阅读
- node.js - 降级 Angular 版本 11-9
- powershell - 从 XML 中删除子节点
- javascript - 不和谐机器人 | 音乐机器人从语音频道中弹出
- matlab - 如何从复杂的垫子中提取数据并将它们保存到乘法表中
- javascript - 5 秒后在模板中隐藏 div
- python - 如何在 Pandas 的两个 Dataframe 上访问每个相同的索引单元格?
- postgresql - 将字符串日期(DD-MM-YYYY)与当前日期 postgress 进行比较
- php - 舍入/限制 ms-duration (DateTime::diff) 到一位
- python - Astropy transform_to 忽略春分
- c++ - “转换表达式”,我们必须将给定的中缀表达式转换为后缀表达式