GDB 调试的常用命令与技巧
- 1. GDB 常用命令
- 1.1 安装 GDB
- 1.2 启动 GDB
- 1.3 设置程序的参数
- 1.4 设置断点
- 1.5 启动程序并运行至断点
- 1.6 执行一步
- 1.7 打印变量值
- 1.8 查看函数调用栈
- 2. GDB 调试 Core 文件
- 2.1 生成 Core 文件
- 2.2 使用 GDB 调试 Core 文件
- 3. GDB 调试正在运行的程序
- 3.1 附加到正在运行的进程
- 3.2 在进程中设置断点
- 3.3 恢复程序执行
GDB(GNU Debugger)是一个功能强大的调试工具,可以帮助开发者在程序运行过程中查找和修复问题。本文将介绍如何使用 GDB 调试程序,包括常用命令、调试 core 文件和正在运行的程序。
1. GDB 常用命令
在使用 GDB 调试程序时,掌握一些常用命令非常重要。以下是一些基础命令和用法:
1.1 安装 GDB
在 Linux 系统中,使用以下命令安装 GDB:
yum -y install gdb
或者在 Ubuntu 系统中使用:
sudo apt-get install gdb
1.2 启动 GDB
要启动 GDB 并调试一个程序,可以使用以下命令:
gdb 目标程序
例如,调试一个名为 my_program
的程序:
gdb my_program
1.3 设置程序的参数
在 GDB 中,你可以使用 set args
来为程序设置命令行参数。例如:
set args 张三 西施 我是一只傻傻鸟
这将模拟命令行参数传递给程序。假设程序的命令行参数使用 argc
和 argv
获取,执行程序时,它将使用这些参数。
1.4 设置断点
使用 break
或简称 b
命令设置断点。例如:
break 20
该命令会在程序的第 20 行设置一个断点。你也可以为函数名设置断点:
break main
1.5 启动程序并运行至断点
使用 run
或简称 r
来启动程序,程序会在设置的断点处停止:
run
如果程序没有遇到断点,它会直接运行至结束。
1.6 执行一步
使用 step
或简称 s
命令可以逐步执行当前语句,并且进入函数内部:
step
如果你只是希望跳过当前函数调用而不进入函数体,可以使用 next
或简称 n
。
1.7 打印变量值
要查看变量的当前值,可以使用 print
或简称 p
命令:
print variable_name
例如,查看变量 i
的值:
print i
1.8 查看函数调用栈
使用 bt
(backtrace)命令查看当前的函数调用栈:
bt
2. GDB 调试 Core 文件
当程序崩溃时,系统可能会生成一个 core 文件,包含了程序的内存快照和崩溃时的状态信息。使用 GDB 可以帮助分析这些文件。
2.1 生成 Core 文件
在 Linux 中,可以通过 ulimit
命令设置生成 core 文件的最大大小:
ulimit -c unlimited
这将允许程序在崩溃时生成 core 文件。运行程序并发生崩溃后,可以使用以下命令:
gdb 程序名 core 文件名
例如,调试一个名为 my_program
的程序和它的 core 文件:
gdb my_program core
2.2 使用 GDB 调试 Core 文件
调试 core 文件时,首先可以使用 bt
命令查看函数调用栈,以便了解崩溃发生的位置:
bt
你还可以使用 print
命令查看崩溃时的变量值,以进一步分析问题所在。
3. GDB 调试正在运行的程序
GDB 也可以用于调试正在运行的程序。你可以附加到一个已经启动的进程,并实时调试它。
3.1 附加到正在运行的进程
使用 attach
命令将 GDB 附加到一个正在运行的进程。例如,如果进程 ID 为 1234:
gdb
(gdb) attach 1234
这将使 GDB 附加到进程,接下来可以设置断点、查看变量等。
3.2 在进程中设置断点
在调试正在运行的程序时,你可以在进程中的特定位置设置断点。例如:
(gdb) break main
这会在程序的 main
函数处设置断点。
3.3 恢复程序执行
使用 continue
或简称 c
命令,可以恢复程序的执行,直到遇到下一个断点为止:
continue