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 的文档以深入了解更多功能和选项。