eu-stack命令用法及示例详解
eu-stack命令用法及示例
eu-stack
是 elfutils
工具集的一部分,用于获取正在运行进程或核心转储文件(core dump)的堆栈跟踪信息。它比 pstack
更高效,尤其适合生产环境调试。以下是详细用法和示例:
基本语法
1 | eu-stack [选项] <pid> # 分析运行中的进程 |
常用选项
选项 | 说明 |
---|---|
-p <pid> |
指定目标进程的 PID |
-c <core> |
指定核心转储文件 |
-e <executable> |
指定可执行文件(分析 core 时必需) |
-n |
跳过系统调用帧(只显示用户空间栈) |
-s |
包含系统调用帧(默认) |
-l |
显示源代码行号(需调试符号) |
-q |
安静模式(减少输出) |
-r |
显示原始地址(不解析符号) |
示例场景
1. 获取运行中进程的堆栈
1 | eu-stack -p 1234 |
输出示例:
1 | #0 0x00007f9a5e0d5f0d in nanosleep () from /lib64/libc.so.6 |
2. 分析核心转储文件
1 | eu-stack -e ./myapp -c core.1234 |
输出示例:
1 | #0 0x00007f4b3a9214d5 in raise () from /lib64/libc.so.6 |
3. 跳过系统调用帧
1 | eu-stack -p 1234 -n |
输出(省略内核调用):
1 | #0 0x0000000000401156 in worker_thread () at demo.c:15 |
4. 显示源代码行号
1 | eu-stack -p 1234 -l |
输出(需编译时加 -g
选项):
1 | #2 0x0000000000401156 in worker_thread () at demo.c:15 |
5. 仅显示原始地址
1 | eu-stack -p 1234 -r |
输出(不解析符号):
1 | #0 0x00007f9a5e0d5f0d |
常见问题解决
权限不足
使用sudo
执行:1
sudo eu-stack -p 1234
缺少调试信息
编译程序时添加-g
选项:1
gcc -g myapp.c -o myapp
核心转储分析失败
确保核心文件和可执行文件匹配:1
eu-stack -e /path/to/myapp -c /path/to/core.1234
工具安装
- Debian/Ubuntu:
1
sudo apt install elfutils
- RHEL/CentOS:
1
sudo yum install elfutils
提示:
eu-stack
对进程影响极小,适合生产环境诊断死锁、卡顿等问题。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Helloeuler!