gdb经常使用的命令

在调试程序的时候,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经常使用的命令的更多相关文章
- GDB查看内存(x 命令)
gdb查看内存命令 首先使用gdb [YourFileName].c进入gdb界面 使用examine命令,字母缩写为x查看内存地址的值.x命令语法 x/[number][format] <ad ...
- gdb调试常用实用命令和core dump文件的生成
1.生成core dump文件的方法: $ ulimit -c //查看是否为0 如果为0 $ ulimit -c unlimited 这样在程序崩溃以后会在当前目录生成一个core.xxx ...
- GDB下查看内存命令(x命令)
http://blog.csdn.net/allenlinrui/article/details/5964046 可以使用examine命令(简写是x)来查看内存地址中的值.x命令的语法如下所示: x ...
- gdb与adb相关命令总结
在使用gdb与adb时需要注意一些类似于权限的问题,比如设备需要root,设备root后命令行下需要 切换用户到root用户下操作,又比如相关的目录或文件是否有足够的权限等等,总结为如下: (以下示例 ...
- gdb调试常用实用命令和core dump文件的生成(转)
1.生成core dump文件的方法: $ ulimit -c //查看是否为0 如果为0 $ ulimit -c unlimited 这样在程序崩溃以后会在当前目录生成一个core.xxxx的 ...
- GDB最常用的命令
为了调试我的指针LCT--我学会了如何使用gdb! 粘一个常用命令表(原文地址:https://blog.csdn.net/tzshlyt/article/details/53668885) gcc ...
- GDB调试——常用的命令
首先说明一点,如果我们要使用GDB来调试我们的C/C++程序时,在使用GCC编译程序时,应该带上 –g 参数, 它负责生成 与GDB相关的调试信息: 1.如何对一个文件启动GDB调试? 方法一: 命令 ...
- gdb的调试常用命令
一.gdb常用的命令 list l 常看源代码 break b 设置断点 b 10(行号) b ...
- gdb对应vc调试命令
gdb vc调试对照表: 实现功能 vc gdb 修改后编译 f7 ma ...
随机推荐
- Codeforces 61E Enemy is weak 乞讨i<j<k && a[i]>a[j]>a[k] 对数的 树阵
主题链接:点击打开链接 意大利正在寻求称号 i<j<k && a[i]>a[j]>a[k] 的对数 假设仅仅有2元组那就是求逆序数的做法 三元组的话就用一个树状 ...
- 非洲儿童(南阳oj1036)(馋)
非洲小孩 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描写叙述 家住非洲的小孩,都非常黑.为什么呢? 第一.他们地处热带,太阳辐射严重. 第二,他们不常常洗澡.(常年缺水, ...
- FMOD在Android玩音响系统的抖动问题
1. 基本介绍 在Android升级系统Android4.4之后,发现FMOD在Android音会出现抖动.导致声音不正常.边赫赫有名的"极品飞车"都有问题. 经查验,是FMOD的 ...
- 使用windows-SQLyog连接linux-mysql
嘿嘿,最近又清闲了一点,重新安装了mysql去学习. -----博客园-邦邦酱好 系统环境: 1. 主机为windows系统,安装了SQLyog. 2. 主机上还安装了虚拟机,系统为c ...
- SWT的CheckBoxTreeView的上级菜单与下级菜单的选中的实现
是不是很神奇? treeViewer.addCheckStateListener(new ICheckStateListener() { @Override public void checkStat ...
- POJ 3286 How many 0's?
题目大意: 计算[m,n]之间全部数字有多少个零. 解题思路: 能够用[0,m)之间和[0,n]之间有多少个零然后作差. 规律是计算全部位置在到当前数时有多少个零. 以下是代码: #include ...
- windows下cocos2dx3.0开发环境及Android编译环境搭建
cocos2dx更新到了3.x版本号,自己一直没有换,如今开发组要求统一换版本号,我就把搭建好开发环境的过程记录下来. 一.Windowns下开发环境搭建 1. 所需工具 1)coc ...
- POJ 1287 Networking(最小生成树)
题意 给你n个点 m条边 求最小生成树的权 这是最裸的最小生成树了 #include<cstdio> #include<cstring> #include<algor ...
- 我的CSDN之路
经营CSDN博客刚满一年,能够说CSDN给我们带来了非常大的帮助,这一年里CSDN见证了我们的成长.以下两篇博客就是我这一年在CSDN的缩影. 这篇是我一年前写的,那时候刚申请CSDN不久:http: ...
- JAVA网络编程Socket常见问题 【长连接专题】
一. 网络程序运行过程中的常见异常及处理 第1个异常是 java.net.BindException:Address already in use: JVM_Bind. 该异常发生在服务器端进行new ...