gdb 中有很多命令。使用 help
命令可以列出所有的命令,以及关于如何使用这些命令的介绍。下表给出了最常用的 GDB 命令。
表 1. gdb 中最常用的命令
命令 | 说明 | 例子 |
---|---|---|
help | 显示命令类别 | help - 显示命令类别help breakpoints - 显示属于 breakpoints 类别的命令help break - 显示 break 命令的解释 |
run | 启动所调试的程序 | ? |
kill | 终止正在调试的程序的执行 | 通常这会在要执行的代码行已经超过了您想要调试的代码时使用。执行kill 会重置断点,并从头再次运行这个程序 |
cont | 所调试的程序运行到一个断点、异常或单步之后,继续执行 | ? |
info break | 显示当前的断点或观察点 | ? |
break | 在指定的行或函数处设置断点 | break 93 if i=8 - 当变量 i 等于 8 时,在第 93 行停止程序执行 |
Step | 单步执行程序,直到它到达一个不同的源代码行。您可以使用 s 来代表 step 命令 | ? |
Next | 与 step 命令类似,只是它不会“单步跟踪到”子例程中 | ? |
print | 打印一个变量或表达式的值 | print pointer - 打印变量指针的内容print *pointer - 打印指针所指向的数据结构的内容 |
delete | 删除某些断点或自动显示表达式 | delete 1 - 删除断点 1。断点可以通过 info break 来显示 |
watch | 为一个表达式设置一个观察点。当表达式的值发生变化时,这个观察点就会暂停程序的执行 | ? |
where | 打印所有堆栈帧的栈信息 | where - 不使用参数,输出当前线程的堆栈信息where all - 输出当前线程组中所有线程的堆栈信息where threadindex - 输出指定线程的堆栈信息 |
attach | 开始查看一个已经运行的进程 | attach <process_id> - 附加到进程 process_id 上。process_id 可以使用 ps 命令找到 |
info thread | 显示当前正在运行的线程 | ? |
thread apply threadno command | 对一个线程运行 gdb 命令 | thread apply 3 where - 对线程 3 运行 where 命令 |
Thread threadno | 选择一个线程作为当前线程 | ? |
如果一个程序崩溃了,并生成了一个 core 文件,您可以查看 core 文件来判断进程结束时的状态。使用下面的命令启动 gdb:
# gdb programname corefilename |
要调试一个 core 文件,您需要可执行程序、源代码文件以及 core 文件。要对一个 core 文件启动 gdb,请使用 -c 选项:
# gdb -c core programname |
gdb 会显示是哪行代码导致这个程序产生了核心转储。