简介

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也是进不去的,因为没有源代码,如果是您自定义的函数,只要有源码就可以进去。

print

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多进程调试(调试命令+调试演示)

个人公众号:拾一札记

参考:

码农有道

www.freecplus.net

https://www.bilibili.com/video/BV1ei4y1V758?p=4

https://freecplus.net/b72113dda88a43b48728e0552fd8a74c.html

如果文章有错别字,或者内容有错误,或其他的建议和意见,请您联系我指正,非常感谢!!

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐