简介
Linux下强大的调试工具GDB,介绍其安装步骤和使用方法。有了GDB,便可少用printf来慢慢调试了。
一、gdb安装
(一)首先检查系统中有没有安装过,有的话用以下命令卸载gdb旧版本
$ sudo rpm -qa | grep gdb
(二)卸载完后,安装(若下载的速度太慢,可参考我另一篇文章:修改ubuntu下载源)
$ sudo apt-get install gdb
二、编译并生成可执行文件
例如现在需要调试book119.c的文件
(一)编译,并生成可执行文件
用gcc编译源程序的时候,编译后的可执行文件不会包含源程序代码,如果您打算编译后的程序可以被调试,编译的时候要加-g的参数
$ gcc -g -o book119 book119.c
tips:
-o选项的作用是:对命令输出结果进行导入操作,这里是把gcc –o a a.c -g的操作结果输出到文件a(文件名可以自定义)中进行保存。
-g选项的作用是:在可执行文件中加入源码信息,比如:可执行文件中第几条机器指令对应源代码的第几行,但并不是把整个源文件都嵌入到可执行文件中,而是在调试时必须保证gdb能找到源文件。
(二)在命令提示符下输入gdb book113就可以调试book113程序了
$ gdb book119
三、基本调试
(一)基本调试命令
命令 | 命令缩写 | 命令说明 |
set args | 设置主程序的参数。 例如:./book119 /oracle/c/book1.c /tmp/book1.c 设置参数的方法是: gdb book119 (gdb) set args /oracle/c/book1.c /tmp/book1.c | |
break | b | 设置断点,b 20 表示在第20行设置断点,可以设置多个断点。 |
run | r | 开始运行程序, 程序运行到断点的位置会停下来,如果没有遇到断点,程序一直运行下去。 |
next | n | 执行当前行语句,如果该语句为函数调用,不会进入函数内部执行。 |
step | s | 执行当前行语句,如果该语句为函数调用,则进入函数执行其中的第一条语句。 注意了,如果函数是库函数或第三方提供的函数,用s也是进不去的,因为没有源代码,如果是您自定义的函数,只要有源码就可以进去。 |
p | 显示变量值,例如:p name表示显示变量name的值。 | |
continue | c | 继续程序的运行,直到遇到下一个断点。 |
set var name=value | 设置变量的值,假设程序有两个变量:int ii; char name[21]; set var ii=10 把ii的值设置为10; set var name="西施" 把name的值设置为"西施",注意,不是strcpy。 | |
quit | q | 退出gdb环境。 |
(二)基本调试演示
以调试book119.c为例,内容如下:
编译,生成可执行文件
$ gcc -g -o book119 book119.c
开始调试命令
$ gdb book119
1.break/ run/ next/ print/ continue 演示
开始调试
2.set var
修改一下book119,在int main前面添加几行代码
开始调试
3.step 演示
修改一下book119,在int main前面添加几行代码
开始调试
tips:
若想加入printf函数行不行呢?如果有printf的源代码的话可以进去,否则不可以。
4.set argc 演示
开始调试
tips:
若参数里包含特殊字符的话,比如文件book119.c要换成 book 119.c(中间有一个空格)
这种情况下,设置参数时要加双引号,需要写成:
(gdb) set args "book 119.c" /tmp/ccc.c
下一篇:GDB多进程调试(调试命令+调试演示)