gdb 命令大全
-
启动和加载程序:
-
gdb program
:启动 GDB 并加载要调试的程序。 -
run
:运行程序。 -
attach process_id
:附加到正在运行的进程。
-
-
断点和单步执行:
-
break function 或 b function
:在函数function
的入口处设置断点。 -
break filename:line_number
:在特定源代码文件的特定行上设置断点。 -
info breakpoints
:显示当前设置的断点列表。 -
delete breakpoint_number
:删除指定断点。 -
next
:执行下一行代码。 -
step
:进入函数调用。 -
finish
:执行当前函数,直到返回。
-
-
变量和表达式:
-
print expression
或p expression
:显示表达式的值。 -
info locals
:显示当前函数的局部变量。 -
info args
:显示当前函数的参数。 -
watch expression
:观察表达式的值是否变化。 -
set variable = value
:设置变量的值。
-
-
堆栈和调用链:
-
backtrace
或bt
:显示调用堆栈。 -
frame frame_number
:切换到指定帧。 -
up
和down
:在调用堆栈中上下移动。
-
-
查看源代码:
-
list
或l
:显示当前源代码位置的附近代码。 -
list function
:显示函数function
的源代码。
-
-
文件操作:
-
file executable
:加载一个不同的可执行文件。 -
cd directory
:更改工作目录。
-
-
调试控制:
-
continue
或c
:继续执行程序,直到下一个断点。 -
quit
或q
:退出 GDB。 -
detach
:从正在运行的进程分离 GDB,但保持进程运行。
-
-
查看程序状态:
-
info program
:显示程序的状态和信息。 -
info threads
:显示线程信息。 -
info registers
:显示寄存器的值。
-
-
其他:
-
help
或h
:获取帮助信息,例如help command
以获取有关特定命令的详细信息。 -
set pagination off
:禁用分页,以便在显示大量输出时不中断。 -
show
:显示当前 GDB 配置的设置。
-
gdb 调试简单程序
当使用 GDB 调试 C 代码时,以下是一个简单的示例,展示了如何设置断点、查看变量和执行调试操作。假设有一个名为 example.c
的 C 源代码文件,内容如下:
#include <stdio.h>
int add(int a, int b) {
return a + b;
}
int main() {
int x = 5;
int y = 7;
int result;
result = add(x, y);
printf("The result is: %d\n", result);
return 0;
}
以下是如何使用 GDB 调试这个程序的示例:
1. 编译代码时加入调试信息:
使用 GCC 编译器编译代码时,确保加入 -g
选项来生成包含调试信息的可执行文件:
gcc -g -o example example.c
-g:生成可执行文件
-o:修改生成文件的名字为example
2. 启动 GDB:
在终端中,输入以下命令以启动 GDB 并加载可执行文件:
gdb ./example
3. 设置断点:
在 GDB 中,可以设置断点,以在程序执行时停下来查看状态。在 main
函数的第 6 行设置一个断点:
(gdb) b 6
(gdb) tbreak line_number
或者可以使用函数名设置断点:
(gdb) b add
(gdb) tbreak function_name # 临时断点,程序执行到达一次后自动删除
如果你只想删除一个特定的断点,你可以使用 delete
命令,后跟断点号或断点的编号。首先,在 GDB 中列出当前的断点列表以获取断点编号:
(gdb) info breakpoints
然后,使用 delete
命令后跟断点编号来删除指定的断点:
(gdb) delete 1
如果你想删除所有已设置的断点,可以使用 delete
命令后跟 breakpoints
关键字:
(gdb) delete breakpoints
如果你只想删除所有临时断点(即使用 tbreak
命令设置的断点),可以使用 delete
命令后跟 tbreakpoints
关键字:
(gdb) delete tbreakpoints
4. 运行程序:
运行程序并开始调试:
(gdb) run
程序将在断点处停下来,你可以查看变量的值和程序状态。
5. 查看变量值或变量地址:
在程序停止时,你可以使用 print
命令查看变量的值。例如,查看 x
和 y
的值:
(gdb) print x
(gdb) print y
查看变量地址:
(gdb) print &x
6. 单步执行:
使用 next
命令逐行单步执行程序:
(gdb) next
或者使用 step
命令进入函数并逐行执行:
(gdb) step
7. 查看函数调用堆栈:
使用 backtrace
命令查看函数调用堆栈:
(gdb) backtrace
8. 继续执行:
当你想要继续执行程序直到下一个断点时,可以使用 continue
命令:
(gdb) continue
9. 退出 GDB:
当你完成调试时,可以使用 quit
命令退出 GDB:
(gdb) quit
这是一个简单的示例,展示了如何使用 GDB 调试 C 代码。在实际应用中,你可以结合更多的 GDB 命令和功能来解决更复杂的问题。记得查阅 GDB 的文档以深入了解更多功能和选项。