gdb debug c

用gdb可以debug c程序,简单操作如下:
[b]step-0:[/b]准本工作
拿下面的程序为例子

#include <stdio.h>
#include <ctype.h>

main()
{
int c;

while((c=getchar())!=EOF){
if(isspace(c) && c!='\n'){
printf("is a space!\n");
}else if(isdigit(c)){
printf("is a number!\n");
}else if(isalpha(c)){
printf("is a letter!\n");
}
}

}



[b]step-1:[/b]编译
gcc -g test.c -o test
注:-g是调试参数,-o指定目标名称,这样会生成test.exe

[b]step-2:[/b]进入gdb
gdb test

注:gdb <filename>

此时命令行显示:
GNU gdb 5.2.1
Copyright 2002 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i686-pc-mingw32"...
(gdb)


[b]step-3:[/b]打断点
(gdb) list
1 #include <stdio.h>
2 #include <ctype.h>
3
4 main()
5 {
6 int c;
7
8 while((c=getchar())!=EOF){
9 if(isspace(c) && c!='\n'){
10 printf("is a space!\n");

注:运行list可以查看源码,一次10行
找到要打断点的行,比如第8行,可以输入
(gdb) break 8

此时显示
Breakpoint 1 at 0x4012ba: file test.c, line 8.


[b]step-4:[/b]debug
现在可以运行程序了,命令是:
(gdb) run

会弹出一个新的cmd,是运行的界面,此时gdb的界面会显示:
Starting program: E:\forc\6/test.exe

Breakpoint 1, main () at test.c:8
8 while((c=getchar())!=EOF){


可以看到断点信息,此时可以单步一下:
(gdb) next

下面在运行的界面输入一个字符,比如说'a',回车
单步操作,可以在gdb界面看到如下信息:
8               while((c=getchar())!=EOF){
(gdb) next
9 if(isspace(c) && c!='\n'){
(gdb) next
11 }else if(isdigit(c)){
(gdb) next
13 }else if(isalpha(c)){
(gdb) next
14 printf("is a letter!\n");
(gdb) next


可以看到每一步的操作,但是没有打印出变量c的值,可以通过下面的命令来查看
(gdb) watch c
Hardware watchpoint 2: c

这样每次循环都可以看到c的值,如下:
Old value = 2
New value = 97



更多详细用法可以参考:
http://www.huihoo.org/gnu/linux/gdb.html
### GDB调试教程与使用指南 GDB(GNU Debugger)是Linux平台下常用的命令行调试工具,能够帮助开发者分析和解决程序中的问题。以下是关于GDB调试的详细教程与使用指南。 #### 1. 检查GDB是否已安装 在CentOS 7系统中,可以通过以下命令检查是否已安装GDB: ```bash rpm -qa | grep gdb ``` 如果未安装,可以使用以下命令进行安装[^1]: ```bash sudo yum install -y gdb ``` #### 2. GDB的应用场景 GDB主要用于开发版本(debug)中进行应用。在调试过程中,需要确保编译时添加`-g`选项以生成调试信息。例如: ```bash gcc -g program.c -o program ``` #### 3. 启动GDB并加载程序 启动GDB后,可以加载需要调试的程序: ```bash gdb ./program ``` 加载完成后,可以输入`run`命令运行程序[^2]。 #### 4. 基础调试操作 以下是一些常用的GDB基础操作命令: - **设置断点**:`break <line_number>` 或 `break <function_name>` - **查看断点**:`info breakpoints` - **删除断点**:`delete <breakpoint_number>` - **单步执行**:`step` 或 `next` - **继续执行**:`continue` - **查看变量值**:`print <variable_name>` #### 5. 高级功能 GDB的强大之处在于其高级功能,例如: - **条件断点**:`break <line_number> if <condition>` - **观察点**:`watch <variable_name>` 用于监控变量变化 - **反汇编代码**:`disassemble <function_name>` 查看汇编代码 - **查看堆栈信息**:`backtrace` 显示当前调用栈 #### 6. 示例代码调试 假设有一个简单的C程序`example.c`: ```c #include <stdio.h> int main() { int a = 10; int b = 0; int c = a / b; // 可能导致除零错误 printf("Result: %d\n", c); return 0; } ``` 编译时添加`-g`选项: ```bash gcc -g example.c -o example ``` 然后使用GDB加载并调试: ```bash gdb ./example ``` 设置断点并运行程序: ```bash break main run ``` 当程序运行到断点时,可以逐步执行并检查变量值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值