调试技术
# 调试编译
# ldd 查看程序依赖库
ldd 可执行文件:显示文件依赖库,和对应库的位置
# 运行调试
# strace 查看进程执行的系统调用
strace -p process_pid
实时打印进程的系统调用栈
strace -o filename
将输出内容写入文件内
通常的完整用法:
strace -rttTp process_pid -e trace=all
- r 打印出每个系统调用的相对时间
- tt 以us为单位显示
- T 显示每个调用的自己的耗时
- e 指定跟踪的系统调用类型
-e参数的具体使用:
-e trace=[set]
跟踪指定的系统调用,如open、close、socket
-e trace=file
只跟踪有关文件操作的系统调用.
-e trace=process
只跟踪有关进程控制的系统调用.
-e trace=network
跟踪与网络有关的所有系统调用.
-e strace=[signal]
跟踪所有与系统信号有关的系统调用
-e signal=set
指定跟踪的系统信号.默认为all.如signal=ISIGIO(或者signal=lio)表示不跟踪SIGIO信号.
其他参数:
- -f 跟踪目标进程和子进程
- -c 统计每个进程调用的时间、调用次数、错误次数,(非实时,手动结束后才打印出来)
# ltrace 查看进程执行的库函数
同strace
# pstack 查看指定进程的调用栈
gdb自带,是封装了gdb的一个脚本工具
pstack [process_pid]
# 打印指定进程当前的调用栈
# pstree 显示进程和子进程
pstree -p process_pid
# addr2line 显示指定地址的函数信息
如果程序出现了段错误,显示指定地址出错,可以使用这个命令查看这个地址的信息
file 可执行文件
# 查看可执行文件的信息,判断是否有调试信息
addr2line -e 可执行文件 -f 地址 -p
(-p更可读的方式输出)
上次更新: 2025/02/21, 14:57:10