strace 打印堆栈

本文介绍了如何使用strace的-k选项来打印系统调用时的堆栈信息,这对于问题定位非常有用。然而,发现公司环境中自带的strace不支持此功能,需要自行编译源码。首次编译仅添加了--with-libunwind选项,但未成功demangle C++函数名。在第二次编译时,加入--with-libiberty选项,但遇到了找不到libiberty/demangle.h的问题。经过调查,发现这可能是由于旧版本binutils包导致的。最终通过删除多余头文件,成功编译并实现了带demangle功能的strace -k,输出了清晰的函数调用信息。
摘要由CSDN通过智能技术生成

平常初次定位问题时,我一般是先看看 api 调用,再不济就多看看堆栈,如用 gdb 的commands 指令在 每次断点时自动打印堆栈。

 

strace 有个实验性的功能,在打印每个系统调用的同时打印当时的堆栈,有了堆栈简直就是手握问题的钥匙。

strace -h
...
  -k             obtain stack trace between each syscall
...

but,but,but,but,but,but,but,but,but,but,but,but,

公司中开发环境的centos linux 上自带的 strace 没有编译对 -k 功能 的支持。只能自己从源代码中编译。

[strace-4.24]# ./configure --help
...
  --with-libdw            use libdw to implement stack tracing support

  --with-libunwind        use libunwind to implement stack tracing support
  --with-libiberty        use libiberty to demangle symbols in stack trace
...

首次编译时,只加了 --with-libunwind ,--with-libunwind 与 --with-libdw 功能是同样的,选其中一个就可以了,只是我对 libunwind 多点偏好而已。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值