GDB调试(上)

116 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第1天,点击查看活动详情

最近在学习 6.S081 网课,需要用到 gdb 进行调试,所以记录一下常用的命令。

启动 gdb

现在终端 1 运行 make qemu-gdb 命令 ,然后重开一个终端 2 ,输入命令 gdb-multiarch 即可进行调试。

·在终端 2 使用 file 命令指定需要被调试的程序:

file user/_ls

运行

使用 run 或者 r 命令运行被调试的程序,即可以像直接运行程序一样输入数据并获得输出。

  • 如果程序正常退出,会收到 ... Code 1 的提示
  • 如果运行出现错误,Runtime Error,会提示中断信号以及所在行的行号

退出

使用 quit 或者 q

  • 如果程序正常退出,会成功退出 GDB
  • 否则会出现提示,弹出输入 y/n之后,才能退出

断点

使用 break 或者 b 命令设置断点,后跟一个行号或者函数名:

使用 info break 或者 i b 查看断点信息

使用 disable Num 禁用断点,Num是断点序号

使用 delete Num 或者 d Num 删除断点

(gdb) b 9
(gdb) b main
(gdb) b 6 if val==1234 //使用 r 运行程序,如果val为1234则中断,否则继续运行

控制

使用 continue 或者 c 使得中断的程序继续运行。

使用 step 或者 s 命令使中断的程序运行一行,如果该行有函数调用,程序将跟踪进入函数,在函数体的第一行中断。

使用 finish 命令来跳出一个函数

使用 next 或者 n 命令使中断的程序执行一行,如果该行有函数调用,程序不跟踪进入函数,直接在下一行中断。

参考链接:

6.S081课程大纲

中文版xv6_book