linux下使用GDB调试程序
2016-05-04 20:46
435 查看
现有一c源文件“gdb-01.c”,下面用GDB调试该程序。
首先用gcc编译“gdb-01.c”生成可执行文件test,为了能用gdb调试改程序,需要在编译时加入‘-g’选项。命令如下:
$ gcc -o test gdb-01.c -g
加载程序。用下面的命令将可执行文件test加载到GDB中,并进入(gdb)模式:
$ gdb test
设置输入参数。通常可执行文件在运行的时候需要输入参数,gdb中使用如下命令格式:”set args value1 value2 …”。例如,test中将一个参数(如3)传入程序:
(gdb) set args 3
打印代码内容。命令list用于列出可执行文件对应源文件的代码,命令格式为“list 开始的行号”,然后每次按Enter键后顺序向下列出代码。
(gdb) list 1
设置断点。b 命令在某一行设置断点,程序运行到断点的位置会中断。
(gdb) b 24
运行程序。GDB在默认的情况下是不会让可执行文件运行的。此时,程序并没有真正运行起来,只是装载进了GDB中。要是程序运行需要输入run命令。
(gdb) run 3
显示变量。在程序运行到第5步所设置的断点时,程序中断等待进一步指令。此时,可以进行一系列操作,其中,命令display可以显示变量的值。
(gdb) display result #显示变量result的值
修改变量的值。用set命令。
(gdb) set result = 6
(gdb) c #继续运行
退出GDB。调试完程序后,使用q命令退出GDB。
(gdb) q
$ #返回用户模式
上面给出了一个简单的例子来演示GDB基本使用。至于GDB的常用命令,直接百度或google,能搜到一大堆,这里就不再赘述啦~~
/*gdb-01.c*/ #include<stdio.h> static int sum(int value); int main(int argc, char *argv[]) { if (argc != 2) { printf("参数输入错误!\n"); return -1; } int input = argv[1] - '0'; int result = sum(input); printf("你输入的值为:%d,计算结果为:%d\n",input,result); return 0; } /*累加求和函数*/ static int sum(int value) { int result = 0; int i = 0; for (i = 0; i < value; ++ i) //该处有问题,需要debug出来 { result += i; } return result; }
首先用gcc编译“gdb-01.c”生成可执行文件test,为了能用gdb调试改程序,需要在编译时加入‘-g’选项。命令如下:
$ gcc -o test gdb-01.c -g
加载程序。用下面的命令将可执行文件test加载到GDB中,并进入(gdb)模式:
$ gdb test
设置输入参数。通常可执行文件在运行的时候需要输入参数,gdb中使用如下命令格式:”set args value1 value2 …”。例如,test中将一个参数(如3)传入程序:
(gdb) set args 3
打印代码内容。命令list用于列出可执行文件对应源文件的代码,命令格式为“list 开始的行号”,然后每次按Enter键后顺序向下列出代码。
(gdb) list 1
设置断点。b 命令在某一行设置断点,程序运行到断点的位置会中断。
(gdb) b 24
运行程序。GDB在默认的情况下是不会让可执行文件运行的。此时,程序并没有真正运行起来,只是装载进了GDB中。要是程序运行需要输入run命令。
(gdb) run 3
显示变量。在程序运行到第5步所设置的断点时,程序中断等待进一步指令。此时,可以进行一系列操作,其中,命令display可以显示变量的值。
(gdb) display result #显示变量result的值
修改变量的值。用set命令。
(gdb) set result = 6
(gdb) c #继续运行
退出GDB。调试完程序后,使用q命令退出GDB。
(gdb) q
$ #返回用户模式
上面给出了一个简单的例子来演示GDB基本使用。至于GDB的常用命令,直接百度或google,能搜到一大堆,这里就不再赘述啦~~
相关文章推荐
- 《linux命令》ps -aux详细解释
- Linux 上实现双向进程间通信管道
- Linux——环境变量&flags
- linux基本命令(13)——less命令
- linux常用命令
- 北京开源人linux运维实战
- centos 7 红帽认证 tigervnc服务搭建
- Linux系统下如何修改主机名
- Centos6.5 安装 jsoncpp
- 怎样在CentOS 7.0上安装和配置VNC服务器
- linux快捷键
- Linux——文件操作
- RabbitMQ 安装、配置和用户管理(CentOS、SUSE)
- linux samba 安装&配置
- linux date命令
- Linux下文件编码转换
- Linux 如何进入Program Files (x86)目录
- Linux设备模型(6)_Bus
- Linux下关于动态库调用动态库及编译需要注意的事项
- Linux设备模型(5)_device和device driver