gdb
gdb(GNU Debugger)是一个强大的调试工具,用于调试 C、C++ 程序。它允许你在程序执行过程中监视变量、设置断点、逐行执行代码,并且可以帮助你定位程序中的错误和异常。
- 编译程序时启用调试信息
为了能够使用 gdb 调试程序,必须在编译程序时启用调试信息。这通常通过在编译时添加 -g 选项来实现。例如:
g++ -g -o my_program my_program.cpp
-g 选项会告诉编译器生成调试信息,便于 gdb 调试。 - 启动 gdb
使用 gdb 启动你的程序,方法如下:
gdb ./my_program
这将启动 gdb,并加载 my_program 程序。 - 设置断点
断点用于暂停程序的执行,使你可以检查程序状态。可以在函数、文件或行号处设置断点。
设置在函数上断点:(gdb) break function_name
例如:(gdb) break main
设置在特定行号的断点:(gdb) break file_name:line_number
例如:(gdb) break my_program.cpp:25
这将在 my_program.cpp 文件的第 25 行设置一个断点。
设置条件断点: 如果你希望断点在满足某个条件时才触发,可以设置条件断点。例如,只有当变量 x 的值大于 10 时才暂停:
(gdb) break function_name if x > 10 - 运行程序
设置好断点后,可以运行程序。使用 run 命令启动程序:
(gdb) run
如果程序有命令行参数,可以通过在 run 命令后加上参数来传递它们:
(gdb) run arg1 arg2
当程序执行到断点处时,它会暂停执行,并返回到 gdb 提示符。 - 逐步执行代码
逐行执行(单步执行):
(gdb) step
该命令将执行当前行的代码,并在遇到函数调用时进入该函数。
单步跳过(不进入函数):
(gdb) next
该命令执行当前行代码,但如果遇到函数调用,它将跳过该函数,直接执行下一行代码。
继续执行:
(gdb) continue
如果程序在断点处暂停,可以使用 continue 命令让程序继续执行,直到下一个断点或程序结束。 - 查看变量的值
在调试过程中,你可能想查看某个变量的当前值。使用 print 命令:
(gdb) print variable_name
例如,要查看变量 x 的值:
(gdb) print x
查看复杂类型的值,例如数组或结构体:
(gdb) print my_array[2]
(gdb) print my_struct.member
如果变量的类型比较复杂,还可以使用 p(print)命令查看详细信息:
(gdb) p/x variable_name # 以十六进制格式查看 - 查看堆栈信息
如果程序崩溃或发生错误,查看堆栈信息可以帮助你追踪问题发生的位置。使用以下命令:
查看当前堆栈帧:
(gdb) backtrace
这将显示程序当前执行路径(调用栈),从当前函数一直回溯到程序入口。
查看特定堆栈帧:
(gdb) frame <frame_number>
例如:
(gdb) frame 2 - 修改变量的值
在调试过程中,你可以临时修改变量的值,检查程序在不同情况下的行为:
(gdb) set variable_name = new_value
例如:
(gdb) set x = 10 - 退出 gdb
当调试完毕后,可以使用以下命令退出 gdb:
(gdb) quit - 查看帮助
(gdb) help
浙公网安备 33010602011771号