Linux下gdb调试程序及举例
2016-07-09 11:21
776 查看
1、三大功能:①启动被调试程序
②让被调试的程序在指定位置停止
③当程序被停止时,可以检查程序中所发生的事
2、调试:
<1>运用gcc调试时,在编译时用gcc -g demo.c -o demo将demo.c生成demo文件
<2>调出demo程序:gdb demo
<3>运行:(gdb) run
如果有段错误,则在有段错误的那一行
<4>查看代码:(gdb) list
代码显示不全,只会显示10行,若要继续看,则需要再次运行
<5>设置断点:(gdb) break 20
表示在第20行设置一断点,代码运行停止在第20行
(gdb)break 20 if i=10 表示当i=10时,代码运行停在第20行
(gdb) break add_sum 表示在调用add_sum
函数时停止
在断点情况下:
(gdb)run 表示执行并且停止在断点处
(gdb)continue表示执行断点之后的代码,并且在遇到下一个断点时停止
(gdb) finish 表示执行完当前函数
(gdb)next 表示一步步执行代码,但是不会进入函数
(gdb)step表示单步执行函数,但是会进入函数
(gdb)printf i表示查看变量i的值
(gdb)info break 表示查看断点
(gdb)delete 1 表示清除断点1
(gdb) q退出gdb调试
3、补充:
在外部补充头文件中:#define debug_msg(fms,args...) printf(fmt,##args)表示将所有的
debug_msg替换成printf (此项功能运用于调试,如软件额内部测试版和发行版)
在编译时,可以在程序外部用-D定义加入一个宏__DEBUG__
举例:编写一个简单的打印程序
在编译时,不加__DEBUG__编译,则不会出现调试信息ABC:
在编译时,外部定义加入一个宏__DEBUG__,则会出现打印信息:
作用:如果程序出现错误,在运行调试信息时,程序只会打印到错误处,可以直接找出错误
所在地,而不用在代码中慢慢寻找
②让被调试的程序在指定位置停止
③当程序被停止时,可以检查程序中所发生的事
2、调试:
<1>运用gcc调试时,在编译时用gcc -g demo.c -o demo将demo.c生成demo文件
<2>调出demo程序:gdb demo
<3>运行:(gdb) run
如果有段错误,则在有段错误的那一行
<4>查看代码:(gdb) list
代码显示不全,只会显示10行,若要继续看,则需要再次运行
<5>设置断点:(gdb) break 20
表示在第20行设置一断点,代码运行停止在第20行
(gdb)break 20 if i=10 表示当i=10时,代码运行停在第20行
(gdb) break add_sum 表示在调用add_sum
函数时停止
在断点情况下:
(gdb)run 表示执行并且停止在断点处
(gdb)continue表示执行断点之后的代码,并且在遇到下一个断点时停止
(gdb) finish 表示执行完当前函数
(gdb)next 表示一步步执行代码,但是不会进入函数
(gdb)step表示单步执行函数,但是会进入函数
(gdb)printf i表示查看变量i的值
(gdb)info break 表示查看断点
(gdb)delete 1 表示清除断点1
(gdb) q退出gdb调试
3、补充:
在外部补充头文件中:#define debug_msg(fms,args...) printf(fmt,##args)表示将所有的
debug_msg替换成printf (此项功能运用于调试,如软件额内部测试版和发行版)
在编译时,可以在程序外部用-D定义加入一个宏__DEBUG__
举例:编写一个简单的打印程序
在编译时,不加__DEBUG__编译,则不会出现调试信息ABC:
在编译时,外部定义加入一个宏__DEBUG__,则会出现打印信息:
作用:如果程序出现错误,在运行调试信息时,程序只会打印到错误处,可以直接找出错误
所在地,而不用在代码中慢慢寻找
相关文章推荐
- Linux U盘启动盘制作出现的问题
- 工程管理器makefile的解释及简单模型
- PCIe之DMA (二)
- Linux ssh安全配置
- linux ln -s 软链接
- Linux C第一课
- linux时间获取
- Qt Creator中.pro跨平台(Win32\Linux)的写法
- Linux音频配置文件asound.conf的了解
- Linux内核---57.sysfs的读写操作
- Linux内核---56.gpio控制
- Linux内核---55.动态创建设备结点
- Linux系统重启python程序
- Linux内核---54.一个非常简单的字符设备
- Linux内核---53.安装kernel API的man手册
- Linux内核---52.ioremap过程
- Linux内核---51.驱动程序的hello world
- Linux内核---50.各个平台下内核模块的编译
- Linux下mysql基本操作
- linux开发---2.汇编语言arm-linux下的打印