gdb

yuanheci 2024年12月05日 68次浏览

油管高分教程:
===> 油管链接
===> 搬运到B站链接

对应文档:

06:23 run 运行程序,直到遇到断点
15:14 quit 退出gdb
10:46 list 显示当前命令行起的十行代码
07:24 break 设置断点 (可段在命令行/b L_number,也可在子程序/ b fun_ name) (信息行func里面,显示的是当前参数的值) 指针如果接受到地址的话,会正确显示。
10:00 next
12:06 print 【variable】的值 也可计算任何跟此var相关的公式。

15:47 example: 段错误调试
19:18 up (当前命令行/函数是谁在调用,也就是让GDB显示上一步的命令)
/down 指针B(函数名) 调试 (call stack)整个action 称作此。
21:44 display (variable)/undisplay (current item number) 查看variable(int)看值的变化,or variable(pointer)看指针地址变化,就可以找到指针丢失的那条命令。display了以后每次都会默认打印出这个值。
26:30 backtrace,打印出当前函数的调用栈。

27:19 example:阶乘递归调试
29:55 step (函数里面) go into 函数,函数里面的语句逐条调试
31:57 continue,让程序继续执行,直到遇到下一个断点或watch的变量变化处
34:40 finish 当前函数,显示函数变量们的值

38:00 example 4
40:16 watch watchpoint (var) observe var has changed. 也就是说display + continue能走到值变化的地方
44:08 info b/variable
44:28 delete Number 删除断点,如果delete后不跟任何number表示删除所有断点
47:15 whatis 查变量属性(int? double? … )

48:29 example 5
49:43 target record-full (gdb能反向调试,会记录所有变量变化情况,条件比较苛刻,有一定局限性)
52:00 reverse 倒运行 /step /c

52,55 set var "变量名= value" 重设变量值(不用每次退出gdb-修改代码-编译-启动gdb,太麻烦啦~)

文档2:《gdb基础学习笔记


gdb调试 | next, nexti, step, stepi单步调试详解

  在gdb中,有next, nexti, step, stepi等指令来单步调试程序,他们功能各不相同,区别在于单步的“跨度”上。

1、next 单步到程序源代码的下一行,不进入函数。
2、nexti 单步一条机器指令,不进入函数。
3、step 单步到下一个不同的源代码行(包括进入函数)。
4、stepi 单步一条机器指令。

可以分两类来记住:

1、next和nexti(即n和ni)是下一条,不进入函数内部,比如说在某一行发生了函数调用,next/nexti就继续到下一行。next是在源码层面的下一行,而nexti就是机器指令层面的,单步到下一个机器指令。

2、step和stepi(即s和si)就是单步步入,进入函数内部,比如说在某一行发生了函数调用,step/stepi就会进入函数体内部,把函数体执行一遍,再返回执行下一条指令。同理,step是在源码层面的操作指令,stepi是在机器指令层面的。


gdb文本用户界面
tui enable (ctrl + x 松开 + a)
tui disable (ctrl + x 松开 + a)

layout:用于分割窗口,可以一边查看代码,一边测试。主要有以下几种用法:

layout src:显示源代码窗口
layout asm:显示汇编窗口
layout regs:显示源代码/汇编和寄存器窗口
layout split:显示源代码和汇编窗口
layout next:显示下一个layout
layout prev:显示上一个layout
Ctrl + L:刷新窗口
Ctrl + x,再按1:单窗口模式,显示一个窗口
Ctrl + x,再按2:双窗口模式,显示两个窗口
Ctrl + x,再按a:回到传统模式,即退出layout,回到执行layout之前的调试窗口。

如果想再次回到之前的layout界面,再按一次Ctrl+x+a即可重新打开

focus命令切换窗口焦点,然后就可以在c源码窗口或者汇编窗口中上下滑动查看代码了~

focus next (fs next)
focus prev (fs prev)


配套练习:CSAPP—bomb lab 炸弹实验
完善的电子书和实验内容:CSAPP gitbook

bomb lab实验讲解视频
https://www.bilibili.com/video/BV1vu411o7QP?spm_id_from=333.788.videopod.episodes&vd_source=4b3e800f3be3fbabb11c99c759de12aa

CSDN CSAPP文档
https://blog.csdn.net/weixin_43362650/article/details/122890142