GDB(GNU Debugger)是一款强大的调试工具,主要用于调试 C、C++ 和其他编程语言编写的程序。以下是 GDB 的使用方法:
一、启动 GDB
-
编译程序时加上调试信息
- 在编译程序时,使用
-g选项可以让编译器生成调试信息,以便 GDB 能够更好地进行调试。例如,对于 C 程序,可以使用以下命令进行编译:gcc -g program.c -o program。对于 C++ 程序,可以使用:g++ -g program.cpp -o program。
- 在编译程序时,使用
-
启动 GDB
- 启动 GDB 并加载要调试的程序。在命令行中输入
gdb program,其中program是要调试的程序的名称。
- 启动 GDB 并加载要调试的程序。在命令行中输入
二、基本命令
-
run(或r)- 运行程序。在 GDB 中输入
run命令后,程序将开始执行。如果程序需要命令行参数,可以在run命令后面加上参数,例如:run arg1 arg2。
- 运行程序。在 GDB 中输入
-
break(或b)- 设置断点。可以在程序的特定行号、函数名或地址处设置断点。例如,要在第 10 行设置断点,可以输入
break 10。要在名为main的函数处设置断点,可以输入break main。
- 设置断点。可以在程序的特定行号、函数名或地址处设置断点。例如,要在第 10 行设置断点,可以输入
-
next(或n)- 执行下一行代码,但不进入函数内部。
-
step(或s)- 执行下一行代码,如果是函数调用,则进入函数内部。
-
continue(或c)- 继续执行程序,直到遇到下一个断点或程序结束。
-
print(或p)- 打印变量的值。例如,要打印变量
x的值,可以输入print x。
- 打印变量的值。例如,要打印变量
-
backtrace(或bt)- 打印调用栈信息,显示当前程序的执行路径。
-
quit(或q)- 退出 GDB。
三、查看变量和内存
-
info locals- 显示当前函数的局部变量及其值。
-
info args- 显示当前函数的参数及其值。
-
x /<format> <address>- 检查内存地址处的值。
<format>可以是不同的格式说明符,例如x/d表示以十进制格式显示整数,x/s表示以字符串格式显示内存内容。
- 检查内存地址处的值。
四、条件断点
可以设置条件断点,只有当满足特定条件时,断点才会生效。例如,要在变量 x 等于 10 时才中断程序,可以输入 break 10 if x == 10。
五、多线程调试
-
info threads- 显示当前程序中的所有线程。
-
thread <thread-id>- 切换到指定的线程进行调试。
六、远程调试
可以使用 GDB 进行远程调试,例如调试在另一台机器上运行的程序。这通常需要在目标机器上运行一个调试服务器,并在本地使用 GDB 连接到该服务器。