0%

常用调试工具的常用方法

简单记录下常用的调试工具,以及常用的方法。

gdb

常用命令用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
gdb <program> <corefile>  #调试core dump file

# 下面是交互命令

r/run 执行
c/continue 继续执行
n/next 单步执行
until 循环直到条件满足,或者跟一个行号
p/pvector/pstack... 各种打印,尤其可以打印一些STL容器
call 调用函数
b n 在第n行设置断点
l/list 打印源码
bt 打印栈
up/down 在栈上向上/下层移动
frame 直接到某层栈
watch 设置监视点

这些命令大概可以覆盖90%以上的场景。

其他辅助工具

lsof

如果直接加目录文件名,就是查看读写目录的进程情况。

常用参数

1
2
3
-p <pid> 列出进程文件读写情况
-c <name> 列出name开头的进程读写文件的情况
-i [46][protocol][@hostname|hostaddr][:service|port] 列出符合条件的网络连接

ps

一般只用ps -efx

strace

一般只用strace -Ttt定位程序耗时

gcore

gcore <pid> 对正在执行的进程生成core文件。

pstack

pstack <pid> 查看正在执行进程的栈。

ipcs

直接使用即可。

iostat

watch -n 1 iostat 或者 iostat 1 每秒统计一次IO信息。

vmstat

直接使用即可。

valgrind

这个工具非常复杂。入门可以看下边这2个:

  • https://stackoverflow.com/questions/5134891/how-do-i-use-valgrind-to-find-memory-leaks。
  • https://web.stanford.edu/class/archive/cs/cs107/cs107.1212/resources/valgrind.html

手册:https://valgrind.org/docs/manual/manual.html

htop

升级版的top,可视化做的好。尤其可以尝试tree模式(按F5),显示进程树关系。

iotop

类top工具,直接打开用就可以。但是感觉不太好用。。。