基本命令
以下是一些在 Linux 中使用 gdb 进行调试时常用的基本命令(下面的每一个命令都可以简写为命令首字母):
-
gdb <executable>:启动 gdb 调试器,并指定要调试的可执行文件。 -
run或r:运行程序。 -
break <location>或b <location>:在指定的位置设置断点,可以是函数名、行号或文件名。 -
continue或c:继续执行程序,直到下一个断点或程序结束。 -
next或n:执行下一行代码,但不会进入函数内部。 -
step或s:执行下一行代码,并进入函数内部。 -
print <variable>或p <variable>:打印变量的值。 -
info locals:显示当前上下文的局部变量。 -
backtrace或bt:显示函数调用堆栈。 -
quit或q:退出 gdb 调试器。 -
list或l:显示当前位置附近的源代码。 -
set var <variable> = <value>:设置变量的值。 -
display <variable>:持续显示某个变量的值。 -
break <function>:在指定的函数内设置断点。 -
delete breakpoints:删除所有断点。
这些命令只是 gdb 的基本命令,还有更多高级的命令和选项可用于调试。
步骤(gdb普通文件)
第一步:gcc -g xxx 生成调试信息(如果不加 -g 的话是使用不了 gdb 的)
第二步:由第一步产生的可执行文件 a.out (如果指定了别的可执行文件也可以使用它的文件名)进行 gdb a.out 进行执行
第三步:l(小写 L)查看文件内容
第四步:设置断点 b xxx (行号),b 后面可以跟 main,这样会自动设置一个 main 函数中的断点
第五步:r (运行代码)
第六步:可以 c (继续执行完代码) / 可以 n (一步一步执行,但是已经 c 完的代码,还需要 r 一下)
第七步:n 的过程中可以 p (打印)变量的值,一直 n 的话会继续一步步执行直到退出程序,如果要进入某个函数查看的话这样不符合需求,因为 n 会跳过进入函数,直接运行出函数结果,所以这个时候就需要 n 到函数位置时 s,进去函数以后再 n 。(如果里面还有要看的函数再 s,否则就是继续 n)
步骤(gdb core文件)
第一步:正常运行(非GDB)代码后出现 Segmentation fault (core dumped) 错误后,就会生成 core 文件(但这个文件不一定就是和刚刚执行的文件匹配,所以可以先删除一下之前的 core 文件,然后加上 -g 重新生成调试信息 和 core 文件),如果想要 gdb 调试的话,一定要加上 -g 编译,否则 gdb 出的信息定位不准确。
第二步:把第一步生成的默认可执行文件(其它可执行文件也行)和 core 文件放一起 gdb:gdb a.out core
第三步:一般 enter 一下进行调试信息页面就能看到这个段错误(Segmentation fault )发生在哪一行代码了:

从上图可以看到,段错误发生在 test.c 文件的第 31 行,然后再结合上下文分析段错误具体原因即可。
步骤(gdb 调试正在运行的进程)
第一步:先必须保证有一个正在运行的进程(也是需要 -g 生成调试信息)
第二步:利用 ps aux | grep 进程名 命令查找该进程的进程 ID
第三步:gdb 执行文件名(默认 a.out) -p 进程ID
第四步:同 gdb 普通文件步骤
1万+

被折叠的 条评论
为什么被折叠?



