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__,则会出现打印信息:
作用:如果程序出现错误,在运行调试信息时,程序只会打印到错误处,可以直接找出错误
所在地,而不用在代码中慢慢寻找