linux中C语言debug命令使用
linux中C语言debug命令使用详细介绍
在 Linux 系统中调试 C 语言程序,最常用的工具是 GDB(GNU Debugger)。以下是 GDB 的核心使用方法及常见调试场景的操作指南:
一、准备调试环境
调试前需确保程序编译时生成了调试信息,需在编译命令中添加 -g 选项(或 -ggdb 增强调试信息):
bash
gcc your_program.c your_program
二、GDB 核心命令
通过 gdb your_program 启动调试器后,可使用以下命令控制程序执行并分析问题:
1.
查看代码(list)
list(或l):显示当前行附近的代码(默认显示 10 行)。list 行号:显示指定行号附近的代码(如list 15)。list 函数名:显示指定函数的代码(如list main)。
2.
设置断点(break)
断点用于暂停程序执行,方便观察状态。常用方式:
break 行号:在指定行设置断点(如break 20)。break 函数名:在函数入口设置断点(如break main)。break 文件名:行号:在其他文件的指定行设置断点(如break utils.c:30)。info break(或i b):查看所有断点信息(包括编号、位置、是否启用)。delete 断点编号:删除指定断点(如delete 3)。disable 断点编号/enable 断点编号:禁用 / 启用断点。
3.
运行程序(run)
run [参数](或r):启动程序运行,遇到断点会暂停。
示例:run 10 data.txt表示程序启动时传递参数10和data.txt。
4.
单步执行
程序暂停后(如触发断点),可用以下命令逐行分析:
next(或n):单步执行(跳过函数内部,直接执行完整个函数)。step(或s):单步进入(会进入调用的函数内部)。until(或u):执行到当前循环结束(跳出循环)。continue(或c):继续运行到下一个断点或程序结束。
5.
查看与修改变量
print 变量名(或p):打印变量当前值(如p sum)。
支持表达式:p i+5、p *array(查看数组内容)、p &var(查看变量地址)。whatis 变量名:查看变量类型(如whatis count)。set var 变量名=值:修改变量值(如set var i=0)。
6.
调用栈回溯(backtrace)
backtrace(或bt):查看函数调用栈(当前函数、上层函数、参数等)。
输出示例:plaintext#0 add (a=3, b=5) at test.c:5#1 main () at test.c:10
表示当前在
add函数(第 5 行),由main函数(第 10 行)调用。
7.
观察点(watch)
观察点用于监控变量或表达式的变化,当值改变时程序暂停:
watch 变量名:当变量值改变时触发暂停(如watch sum)。info watchpoints:查看所有观察点。
三、实战示例
假设我们有一个简单的 C 程序 test.c,存在计算错误:
c
a b
a b
x y
result x y
result
调试步骤:
- 编译生成调试版本:bash
gcc test.c - 启动 GDB:bash
gdb - 在
main函数设置断点:gdb(gdb) break main - 运行程序:gdb
(gdb) run程序会在
main函数的第一行暂停。 - 单步进入
add函数:gdb(gdb) step // 执行到 int result = add(x, y); 时,再次输入 step 进入 add 函数 - 查看
a和b的值:gdb(gdb) print a // 输出 3(gdb) print b // 输出 5
- 检查
add函数的返回逻辑:
发现return a + b被错误写成a * b,修正后重新编译即可。
四、其他调试工具
除 GDB 外,以下工具可辅助调试:
- Valgrind:检测内存泄漏(如
valgrind --leak-check=full ./your_program)。 - strace:跟踪程序的系统调用和信号(如
strace ./your_program查看文件 / 网络操作)。
通过 GDB 的这些命令,可高效定位 C 程序中的逻辑错误、内存问题或崩溃原因。实际调试时可结合断点、单步执行和变量观察,逐步缩小问题范围。