gdb

gdb(GNU Debugger)是一个强大的调试工具,用于调试 C、C++ 程序。它允许你在程序执行过程中监视变量、设置断点、逐行执行代码,并且可以帮助你定位程序中的错误和异常。

  1. 编译程序时启用调试信息
    为了能够使用 gdb 调试程序,必须在编译程序时启用调试信息。这通常通过在编译时添加 -g 选项来实现。例如:
    g++ -g -o my_program my_program.cpp
    -g 选项会告诉编译器生成调试信息,便于 gdb 调试。
  2. 启动 gdb
    使用 gdb 启动你的程序,方法如下:
    gdb ./my_program
    这将启动 gdb,并加载 my_program 程序。
  3. 设置断点
    断点用于暂停程序的执行,使你可以检查程序状态。可以在函数、文件或行号处设置断点。
    设置在函数上断点:(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
  4. 运行程序
    设置好断点后,可以运行程序。使用 run 命令启动程序:
    (gdb) run
    如果程序有命令行参数,可以通过在 run 命令后加上参数来传递它们:
    (gdb) run arg1 arg2
    当程序执行到断点处时,它会暂停执行,并返回到 gdb 提示符。
  5. 逐步执行代码
    逐行执行(单步执行):
    (gdb) step
    该命令将执行当前行的代码,并在遇到函数调用时进入该函数。
    单步跳过(不进入函数):
    (gdb) next
    该命令执行当前行代码,但如果遇到函数调用,它将跳过该函数,直接执行下一行代码。
    继续执行:
    (gdb) continue
    如果程序在断点处暂停,可以使用 continue 命令让程序继续执行,直到下一个断点或程序结束。
  6. 查看变量的值
    在调试过程中,你可能想查看某个变量的当前值。使用 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 # 以十六进制格式查看
  7. 查看堆栈信息
    如果程序崩溃或发生错误,查看堆栈信息可以帮助你追踪问题发生的位置。使用以下命令:
    查看当前堆栈帧:
    (gdb) backtrace
    这将显示程序当前执行路径(调用栈),从当前函数一直回溯到程序入口。
    查看特定堆栈帧:
    (gdb) frame <frame_number>
    例如:
    (gdb) frame 2
  8. 修改变量的值
    在调试过程中,你可以临时修改变量的值,检查程序在不同情况下的行为:
    (gdb) set variable_name = new_value
    例如:
    (gdb) set x = 10
  9. 退出 gdb
    当调试完毕后,可以使用以下命令退出 gdb:
    (gdb) quit
  10. 查看帮助
    (gdb) help
posted @ 2025-01-16 10:33  苏为末~  阅读(72)  评论(0)    收藏  举报