gdb
(GNU调试器)是一个功能强大的Unix下的程序调试工具,它允许你查看源代码、设置断点、单步执行代码、查看堆栈跟踪、修改变量的值等。以下是一些常用的gdb
命令:
-
启动gdb
gdb [可执行文件名] |
-
列出源代码
list
或l
:列出当前位置的源代码list 行号
:列出指定行号的源代码list 函数名
:列出指定函数的源代码
-
设置断点
break [文件名:]函数名
:在函数处设置断点break [文件名:]行号
:在指定行号设置断点break ... if 条件
:在满足条件时设置断点tbreak
:临时断点,断点只会在第一次达到时触发
-
删除断点
delete [断点号]
:删除指定编号的断点clear [文件名:]函数名
或clear [文件名:]行号
:删除在指定函数或行号的断点
-
查看断点
info breakpoints
:列出所有断点
-
执行程序
run [参数]
:运行程序,并传递参数continue
或c
:继续执行程序,直到遇到断点或程序结束
-
单步执行
next
或n
:执行下一行代码(不进入函数)step
或s
:执行下一行代码(进入函数)finish
:执行到当前函数返回
-
查看信息
info locals
:查看当前栈帧的局部变量info args
:查看当前函数的参数info registers
:查看寄存器信息info breakpoints
:查看断点信息info files
:查看被加载的文件info proc
:显示被调试程序的系统级信息
-
修改变量值
print 变量=值
:修改变量的值(注意这不会改变程序中的值,只影响gdb的显示)set variable 变量=值
:真正修改变量的值(在程序中)
-
查看堆栈
backtrace
或bt
:查看堆栈跟踪frame [编号]
:选择堆栈中的某个帧up
:移动到当前栈帧的上一层down
:移动到当前栈帧的下一层
-
退出gdb
quit
或q
:退出gdb
-
其他常用命令
enable [断点号]
:启用指定的断点disable [断点号]
:禁用指定的断点kill
:发送SIGKILL信号给被调试的程序print [表达式]
或p [表达式]
:打印表达式的值watch [表达式]
:当表达式的值改变时停止执行catch [事件]
:当某个事件发生时停止执行(如捕获信号)
这些只是gdb
的常用命令,它还有许多其他功能和命令。你可以通过gdb
的帮助系统(help
命令)获取更多信息。