码迷,mamicode.com
首页 > 数据库 > 详细

gdb常用命令

时间:2015-06-12 23:57:05      阅读:277      评论:0      收藏:0      [点我收藏+]

标签:gdb   linux   

技术分享技术分享在调试程序的时候,gdb是一柄利器,恰当的使用gdb可以解决掉程序的许多bug。

技术分享技术分享gdb并不检查语法错误,那是gcc或者g++的事情,gdb干的是调试的事情。

技术分享技术分享说明:

技术分享技术分享(1)gdb 程序名 [corefile]之类的是代表命令的用法,[]中间的内容是可选项,即你可以加,也可以不加。

技术分享技术分享(2)如果需要重复执行一条命令,不需要每次都键入命令,gdb记住了最后一个被执行的命令,只要简单的按enter键就可以重复执行最后的命令。

1.  gdb命令

技术分享技术分享该命令主要用来启动调试。

技术分享技术分享gdb 程序名 [corefile]

技术分享技术分享corefile是可选的,但能增强gdb的调试能力。Linux默认是不生成corefile的,所以需要在.bashrc文件中添加

ulimit -c unlimited

技术分享技术分享修改完.bashrc文件后记得. .bashrc让修改生效。

 技术分享

技术分享

技术分享技术分享下面是一个没有语法错误,但是存在逻辑错误的代码:

技术分享

技术分享技术分享一运行立马就会提示错误:

技术分享技术分享Segmentation fault (coredumped)

技术分享技术分享我们列出当前目录下的文件,发现多了一个core.*之类的文件,这就是系统给我们生成的core文件。

技术分享技术分享我们现在可以启动gdb进行调试了。

技术分享技术分享gdb 1 core.1997

技术分享技术分享其中1是代码生成的程序,core.1997是出错后系统给我们生成的core文件。

技术分享技术分享如果你不喜欢一大堆的软件信息,可以通过-q参数关闭软件信息

技术分享技术分享gdb -q 1 core.1997

技术分享技术分享#0  0x080483c4 in test () at test.c:5

技术分享技术分享5               *p = 2;

技术分享技术分享可以看到gdb通过core告诉你,程序哪条语句出现问题

2.  run命令

技术分享

技术分享技术分享该命令使得程序跑起来,需要注意:gdb命令并没有运行程序,只是进入了gdb状态。

3.  continue命令

技术分享技术分享与run相对的是continue命令,记住,run是开始执行,continue是继续执行,两者是不同的,程序在断点处听下之后,你如果输入run,程序会重新启动,而输入continue,程序会从断点处向下继续执行。

4.  where命令

技术分享技术分享where命令,可以显示导致段错误的执行函数处。

技术分享

技术分享技术分享#0  0x080483c4 in test () at test.c:5

技术分享技术分享#1  0x080483e6 in main () at test.c:10

5.  list命令

技术分享技术分享知道函数出错行的上下文对调试程序是很有帮助的。

技术分享技术分享list[m,n],m,n是要显示包含错误首次出现位置的起始行和结尾行。不带参数的list将显示附近的10行代码。

技术分享

技术分享

6.  break命令

技术分享技术分享break命令主要用来设置断点。具体用法如下:

技术分享技术分享break linenum在文件的linenum行设置断点;

技术分享技术分享break funcname对funcname函数设置断点,每次该函数被调用都会触发断点;

技术分享技术分享break filename:linenum在filename文件的linenum行设置断点;

技术分享技术分享break filename:funcname在filename文件对funcname函数设置断点。

技术分享

技术分享技术分享对于上面的一段代码,我们对test函数设置断点,在第10行设置断点:

技术分享

技术分享技术分享info break可以查看已有的断点的信息。

技术分享技术分享delete + 断点序号可以删除断点。

7.  单步调试命令

技术分享技术分享step命令:step顾名思义,就是一步一步执行。当遇到一个函数的时候,step将进入函数,每次执行一条语句,相当于step into。

技术分享技术分享next命令:当遇到一个函数的时候,next将执行整个函数,相当于step over。

8.  print命令

技术分享技术分享gdb最有用的功能之一就是它可以显示被调试程序中任何表达式、变量的值。

技术分享技术分享print 变量,表达式

技术分享技术分享print ‘file’::变量,表达式, ‘’是必须的,以便让gdb知道指的是一个文件名。

技术分享技术分享print funcname::变量,表达式

技术分享技术分享我们先对test函数设置断点,然后单步执行,然后输出i的值:

技术分享

技术分享技术分享我们可以看到,print命令确实强大,方便地输出了变量的值。

9.  whatis命令

技术分享技术分享whatis 命令可以告诉你变量的类型,ptype 告诉你结构的定义。

技术分享

10.     return命令

技术分享技术分享return [value]

技术分享技术分享停止执行当前函数,将value返回给调用者,相当于stepreturn。

技术分享技术分享执行该命令,会让当前的函数立马退出,并且返回。

技术分享

11.     set命令

技术分享技术分享该命令可以改变一个变量的值。

技术分享技术分享set variable varname = value

技术分享技术分享varname是变量名称,value是变量的新值。

技术分享

技术分享技术分享当然gdb还有非常多复杂的命令,不过它们用到的机率非常低,熟练地掌握了上面的命令,一般应付大部分的调试都不存在问题。

gdb常用命令

标签:gdb   linux   

原文地址:http://blog.csdn.net/lishuhuakai/article/details/46476519

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!