> 文章列表 > 【Linux】工具(5)——gdb

【Linux】工具(5)——gdb

【Linux】工具(5)——gdb

今天我们来到Linux工具的最后一篇博客:gdb的使用

目录

一、Linux下的release和debug

二、gdb常用指令选项


一、Linux下的release和debug

我们先来写一个Makfile,来方便我们编译代码:

再来写一个test.c的源文件:

接着我们使用make来编译一下源文件:
编译
可以看到编译没有通过
这是因为当前gcc编译的标准不支持在for循环中定义变量,但是我们可以在gcc指令后面加上-std=c99就可以按照c99的标准来编译代码:

 接着我们再使用make来编译一下:

 

 编译完成生成了运行文件,我们来运行一下:

 光运行已经不能满足我们了,我们需要进行调试,这时就轮到gdb上场了,具体使用方法:

gdb  要调试的可执行文件

我们现在试了一下,发现并不能正常调试,主要是缺少了调试信息:

这是因为在Linux环境下gcc/g++默认编译的代码是release版本

debug版本:程序本身会被加入更多的调试信息 以便于进行调试

release版本:不会添加任何调试信息 是不可调试的

我们在linux中默认生成的文件都是release版本的 是不可以使用gbd调试的

如果我们想要它可被调试则需加入debug信息

具体指令如下:

gcc test.c -g -o test_debug.exe -std=c99

 即在gcc指令上加上-g选项即可(表示生成debug版本的可执行程序)

我们可以发现debug版本的可执行程序比release版本的可执行程序大一些,这是因为debug版本的含有调试信息

下面我们再来使用gdb进行调试:

 这时就成功了

二、gdb常用指令选项

【l 行号】:显示binFile源代码,接着上次的位置往下列,每次列10行。

【l 函数名】:列出某个函数的源代码。

【r】:从头开始连续而非单步执行程序

【n】:单条执行

【s】:进入函数调用

【c】:从当前位置开始连续而非单步执行程序

【b 行号】:在某一行设置断点

【b 函数名】:在某个函数开头设置断点

【info b】 :查看所设置的断点信息

【finish】:执行到当前函数返回,然后挺下来等待命令

【p 变量名】:打印变量值

【set variable 变量名】:修改变量的值

【delete breakpoints】:删除所有断点

【delete breakpoints n】:删除序号为n的断点

【disable breakpoints n】:禁用序号为n的断点(禁用后该断点不起作用,但并没有删除)

【enable breakpoints n】:启用序号为n的断点

【display 变量名】:跟踪查看一个变量,每次停下来都显示它的值(变量常显示)

【undisplay 变量名】:取消对先前设置的那些变量的跟踪

【until 行号】:运行至所给行号处停下

【bt】:查看各级函数调用及参数

【info locals】:查看当前栈帧局部变量的值

【q】:退出gdb


感谢各位的阅读,我们下一期见