在调试程序的时候,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还有许多复杂的命令,只是它们用到的机率很低,熟练地掌握了上面的命令,一般应付大部分的调试都不存在问题。

http://pan.baidu.com/s/1kThC6k3

版权声明:本文博主原创文章,博客,未经同意不得转载。

gdb经常使用的命令的更多相关文章

  1. GDB查看内存(x 命令)

    gdb查看内存命令 首先使用gdb [YourFileName].c进入gdb界面 使用examine命令,字母缩写为x查看内存地址的值.x命令语法 x/[number][format] <ad ...

  2. gdb调试常用实用命令和core dump文件的生成

      1.生成core dump文件的方法: $  ulimit -c //查看是否为0 如果为0 $   ulimit -c unlimited 这样在程序崩溃以后会在当前目录生成一个core.xxx ...

  3. GDB下查看内存命令(x命令)

    http://blog.csdn.net/allenlinrui/article/details/5964046 可以使用examine命令(简写是x)来查看内存地址中的值.x命令的语法如下所示: x ...

  4. gdb与adb相关命令总结

    在使用gdb与adb时需要注意一些类似于权限的问题,比如设备需要root,设备root后命令行下需要 切换用户到root用户下操作,又比如相关的目录或文件是否有足够的权限等等,总结为如下: (以下示例 ...

  5. gdb调试常用实用命令和core dump文件的生成(转)

    1.生成core dump文件的方法: $  ulimit -c //查看是否为0 如果为0 $   ulimit -c unlimited 这样在程序崩溃以后会在当前目录生成一个core.xxxx的 ...

  6. GDB最常用的命令

    为了调试我的指针LCT--我学会了如何使用gdb! 粘一个常用命令表(原文地址:https://blog.csdn.net/tzshlyt/article/details/53668885) gcc ...

  7. GDB调试——常用的命令

    首先说明一点,如果我们要使用GDB来调试我们的C/C++程序时,在使用GCC编译程序时,应该带上 –g 参数, 它负责生成 与GDB相关的调试信息: 1.如何对一个文件启动GDB调试? 方法一: 命令 ...

  8. gdb的调试常用命令

    一.gdb常用的命令 list                       l    常看源代码 break                  b    设置断点     b  10(行号)    b ...

  9. gdb对应vc调试命令

    gdb vc调试对照表: 实现功能                vc                   gdb 修改后编译              f7                   ma ...

随机推荐

  1. 《Node.js In Action》笔记之流程控制

    转向Javascript后,开始学习了node.js,选择的第一本书是<Node.js in Action> 将近一个月时间,断断续续看完,选几个点做下笔记 1.实现串行化流程控制 var ...

  2. Android Graphics专题(1)--- Canvas基础

    作为Android Graphics专题的开篇.毫无疑问,我们将讨论Android UI技术的核心概念--Canvas. Canvas是Android UI框架的基础,在Android的控件体系中.全 ...

  3. The mell hall——坑爹

    The mell hall 题目描述 In HUST,there are always manystudents go to the mell hall at the same time as soo ...

  4. windows phone 7,sliverlight 下载网页的解析,关于wp7 gb2312编码

    原文:windows phone 7,sliverlight 下载网页的解析,关于wp7 gb2312编码 关于silverlight和wp7(windows phone 7)是默认不支持gb2312 ...

  5. SSL与TLS的区别以及介绍(转)

    SSL:(Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层.SSL通过互相认证.使用数字签名确保完整性.使用加密确保私密性,以实现客户 ...

  6. 一类斜率优化的dp(特有性质:只能连续,不能交叉)

    hdu3480 给定一个有n个数的集合,将这个集合分成m个子集,要求子集的并等于全集求花费最小. 花费为该子集的(最大数-最小数)的平方. 我们将n个数排序, a < b < c < ...

  7. Android如何获得手机power_profile.xml文件

    上的能量消耗进行最近的测试,阅读文章一个月,最后,我们发现了一些新的想法,但产生的问题.那 工作无法再进行下去. 在Android手机中,对于手机中的每一个部件(cpu.led.gps.3g等等)执行 ...

  8. 项目构建之maven篇:2.HelloWorld项目构建过程

    文件结构说明: 项目构建生命周期: 清理 编译 測试 打包 执行 部署 清理与编译 hello\pom.xml POM:Project Object Model,项目对象模型 pom.xml与ant的 ...

  9. BackTrack5 (BT5)无线password破解教程WPA/WPA2-PSK无线password皴

    昨天公布了BackTrack5 (BT5)无线weppassword破解教程之minidwep-gtk破解法一文,对BT5下破解wep无线password的简单方法做了介绍,今天奶牛为朋友们介绍下怎样 ...

  10. 解决SMARTFORMS 中table 控件单行跨页的问题

    在CX项目中,MM模块做了大量的的单据打印的工作,一个问题困扰了我好久,一直不能解决.当物料描述很长时,table控件在单元格中能自动换行,这样就有可能在换页处出现一行记录的一部分打在上一页,一部分记 ...