GDB调试(下)

109 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 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

linux调试工具GDB入门

GDB入门

Linux 高级编程 - 15 个 gdb 调试基础命令 - 登龙(DLonng

GDB 入门教程