1.gdb简介
2.gdb常用命令及举例
3.调试的方法补充
一、gdb简介
在任何的程序开发过程中每一个程序开发员都避免不了程序的出错,为此程序的调试对于每个程序员是必不可少的。
gcc调试C程序时只能根据gcc编译时发出的错误警告进行修改,而gdb可以有更强的调试功能。gdb调试器是由GNU开发的一款调试器,它可以和Visual C++、Visual Basic等开发工具的调试器媲美。
gdb主要有下列这些功能:
1.可以在指定的断点处让被调试程序停止
2.启动被调试程序,可以按自己的意愿运行程序
3.可以动态地改变程序的执行环境
二、gdb的常用命令及举例
1.生成调试信息
在使用gdb调试器时,编译时我们必须将gdb的调试信息加到可执行文件中,我们通过-g实现。
gcc -g filename
2.启动gdb
3.gdb下的常用命令及命令举例
命令 | 命令描述 |
run | 运行程序 |
List(或l) | 列出源代码,接着上次的位置往下列,每次列10行 |
break | 设置断点 |
next(或n) | 一步步执行下一行语句,不会进入子函数 |
info | 列出信息 |
print(或p) | 打印表达式的值 |
step | 单步执行下一语句,遇到函数时会进入函数去一步步执行 |
break 函数名 | 在调用到某一函数时停止 |
delete 断点号 | 删除某一断点 |
Continue | 运行到下一断点结束,无断点则一直执行 |
finish | 执行完当前函数返回到调用它的函数 |
运行程序:run
源代码罗列:list(或l)
断点设置:break
删除断点:delete
三、调试的方法补充
程序员在开发一项软件时通常有两个版本,一个是测试版本,一个是发行版本。通常测试版本里含有测试信息,而发行版本则不显示这些信息。通常他们采用的是在程序中添加下面这样的一个头文件。
通常其中定义有_DEBUG_这一宏定义,此处没有定义,这一头文件用于发行版程序。#define debug_msg(fmt, args...) printf(fmt, ##args)这一语句表示当定义了_DEBUG_这一宏时将源代码中的debug_msg(fmt, args...)替换成printf(fmt, ##args),这样程序员在调试时就可以很容易发现错误的位置并进行修改。
若要在头文件中添加宏定义_DEBUG_,可在编译hello.c文件时输入gcc hello.c -D_DEBUG_,-D的功能是在编译hello.c文件时在其头文件中添加-D后的宏定义。