开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第2天,点击查看活动详情
最近在学习 6.S081 网课,需要用到 gdb 进行调试,所以记录一下常用的命令。
监视
使用 print 或者 p 命令输出一个表达式的值,这里的表达式可以是一个变量,也可以是包含了多个函数调用的复杂表达式.
使用display 或者 disp 命令持续监视某个表达式的值
使用 watch var 来监控一个变量,使用info watch 来查看监控的变量
(gdb) b 6
(gdb) r
(gdb) p val_a
(gdb) disp function(val_i) // int function(int x);
(gdb) watch val_b
(gdb) info watch
在 GDB 7.0 之后,可以用p命令输出STL容器的内容
栈
在函数调用时,系统栈会储存函数的调用信息,使用 backtrace 或者 bt 命令查看调用栈.
使用frame命令切换正在调试的函数上下文
(gdb) bt
#0 a (x=36) at test.cpp:2
#1 0x00000000004005a7 in b (x=12) at test.cpp:6
#2 0x00000000004005c9 in c (x=2) at test.cpp:10
#3 0x00000000004005f5 in d (x=4) at test.cpp:14
#4 0x0000000000400619 in main () at test.cpp:18
(gdb) frame 3
#3 0x00000000004005f5 in d (x=4) at test.cpp:14
查看代码
使用 list 或者 l 命令查看部分代码,后跟一个行号,代表查看从该行开始若干行代码
使用 whatis 查看一个变量的类型
(gdb) l 3 //从第三行开始查看代码
(gdb) whatis val_a
type = int
进入shell
使用命令shell 启动 shell,使用 exit退出,返回gdb
(gdb) shell
root@ubuntu:~/$ exit
exit
(gdb)
可视化
在gdb下使用wi启动可视化调试
Reference