GDB是在Linux命令行下对C/C++的程序进行调试常用的一个命令,现将平时记录在本子上的笔记整理如下:

一、断点

  断点类型有breakpoints, watchpoints, catchpoints.

1).breakpoints:   普通断点,程序运行到该点时暂停(此时此行尚未运行),是gdb中最常用的断点,相关命令为:

  break [函数名,行数或者指令地址]  [condi]  :在指定地方加上断点

例:

  (gdb) set $counter = 0
  (gdb) break 26 if ++$counter == 99

  在第26行设置断点,每次触发断点的时候执行判断条件,仅在判断条件为真的时候使程序在断点处停止。在循环的debug中很好用。

  类似的命令还有condition等。

  rbreak RE   :在所有符合正则表达式RE的函数上加上断点

2).watchpoints: 也称为data breakpoints,在表达式值变化时停止执行的断点。

  watch expr[thread threadnum]   表达式可以是变量值,地址(如*(int *)0x12345678)或数学表达式。

3).catchpoints:  程序事件断点,如c++异常

  catch event   :event可以是 throw或catch事件

查看断点:

  info breakpoint[n]  : 打印所有(或者第n个)断点信息,同 info break

  info watchpoints[n]  : 同上

删除断点:

  delete [断点号] [range...]  :range是断点号,空格分割

  clear location   :location是函数名,行数等

  enable/disable  :使能/使失效断点,不删除

其他:

为断点号bnum写一个命令列表,程序运行到断点时gdb会依次运行列表中的命令:

  commands [bnums]

    ...command list...

    end

 二、单步调试

1)基本命令:

  step:运行下一步(即step into,进入调用的函数体内)

  next:同上,但是不进入函数体

  finish:往下运行直至当前栈帧(下面解释)中的函数返回

  continue:往下运行直至遇到断点

打印信息:

  print/x data:以x(十六进制)格式打印数据data的值(或者缩写为p/x data);

输出格式有x、d、u、o、t(二进制,two,因为b已经用来表示byte)、a(address)、c(char)、f(float)、s(string)、r(raw)     

  查看数据类型: ptype data;

  打印数组: p *array@len

    

2)栈帧(stack frame)是在栈中为参数、返回地址和局部变量保留的一块内存区,必要时在过程调用中使用,相关命令:

  frame[args]:从一个栈帧移动到另一个,并打印选择的栈帧。args可以是栈帧号或其地址。

  info frame []:查看栈帧的详细信息

  backtrace:向后追踪栈帧(调用)

3)底层信息:

  查看汇编:disassemble [option] [range]

接收一个参数时,打印该地址周围的函数的汇编,接收两个参数时,表示需要dump的范围

  查看内存:x  /nfu addr

n:重复数。默认为1,表示要显示多少内存(以单元u为基数)

f:显示格式。同print,默认为x, i表示机器指令

u:单元大小。分别可以是b(byte)、h(halfwords,=2byte)、w(words,=4byte)和g(gaint words,=8byte);默认为w

  寄存器:

$pc:程序计数器,值为下一条指令的地址

$ps:程序状态寄存器

$sp:stack pointer栈指针

$fp:frame pointer 指向当前栈帧的指针

三、变更执行

1)修改变量

  print i=num,赋值并打印变量i

  set i=num,仅赋值

2)修改内存

  用'{...}'结构来生成地址。如:

  set {int}0x83040 = 4;  //将4存储到地址0x83040中

3)跳转

  jump [location]

location可以是行号或者地址。注意jump命令仅仅改变$pc的值,而不改变当前栈帧、堆栈指针或上下文,效果相当于set $pc = {int}location

4)中断

  signal sig  //立即将信号sig发给程序

5)其他

  return:使(函数)返回

  

GDB笔记的更多相关文章

  1. gdb笔记 ---《Linux.C编程一站式学习》

    gdb笔记 ---<Linux.C编程一站式学习> 单步执行和跟踪函数调用 函数调试实例 #include <stdio.h> int add_range(int low, i ...

  2. c语言,gdb

    Get gdb call stack http://blog.csdn.net/zoufeiyy/article/details/1490241 Debugging with GDB - Examin ...

  3. GDB调试基础

    GDB调试基础 https://lesca.me/archives/gdb-basic-knowledge.html GDB笔记(二):条件断点.命令列表.监视点 https://lesca.me/a ...

  4. GDB调试笔记

    参考资料:GDB调试精粹及使用实例 # 调试实例 #include <iostream> #include <cstring> using namespace std; ][] ...

  5. ubuntu: qemu+gdb 调试linux kernel 学习笔记

    声明: 本笔记内容并非本人原创,90%来自网络资料的整合.同时,由于自己是刚刚接触qemu & gdbserver remote debug,本文也就算不得教程,仅供有缘人参考而已. ---- ...

  6. 用gdb调试程序笔记: 以段错误(Segmental fault)为例

    用gdb调试程序笔记: 以段错误(Segmental fault)为例[转] 1.背景介绍2.程序中常见的bug分类3.程序调试器(如gdb)有什么用4.段错误(Segmental fault)介绍5 ...

  7. 《软件调试的艺术》学习笔记——GDB使用技巧摘要

    <软件调试的艺术>学习笔记——GDB使用技巧摘要 <软件调试的艺术>,因为名是The Art of Debugging with GDB, DDD, and Eclipse. ...

  8. 手把手教你使用eclipse+qemu+gdb来单步调试ARM内核【学习笔记】

    平台信息:linux4.0 平台:qemu 作者:庄泽彬 说明:笨叔叔的Linux视频的笔记 一.编译linux源码 export CROSS_COMPILE=arm-linux-gnueabi- e ...

  9. gdb使用笔记

    相关编译选项: 1.-g 开启gdb 2.-o0,o2  o0表示不优化, 3. -funsigned-char -fdata-sections 会使compiler为每个function和data ...

随机推荐

  1. 一款jQuery打造的滚动条在底部滑出信息提示层

    一款jQuery打造的滚动条在底部滑出信息提示层, 当滚动鼠标滚轮,或者滚动条往下拉的时候,在右下角,弹出一个信息提示框. 有一点仿的是一个插件工具,就是网页中大家都长用到的友荐. 这款特效算一款简单 ...

  2. Atan2

    在三角函数中,两个参数的函数atan2是正切函数的 一个变种.对于任意不同时等于0的实参数x和y,atan2(y,x)所表达的意思是坐标原点为起点,指向(x,y)的射线在坐标平面上与x轴正方向之间 的 ...

  3. 基础学习总结(五)---baseAdapter、ContentProvider

    小写转大写 : ctrl+shift+F <ScrollView></ScrollView>滚动条显示视图 ListView与BaseAdapter: public class ...

  4. 【Qt】Qt之自定义界面(QMessageBox)【转】

    简述 通过前几节的自定义窗体的学习,我们可以很容易的写出一套属于自己风格的界面框架,通用于各种窗体,比如:QWidget.QDialog.QMainWindow. 大多数窗体的实现都是采用控件堆积来完 ...

  5. 常用HTML meta 标签属性(网站兼容与优化需要),meta标签

    常用HTML meta 标签属性(网站兼容与优化需要),meta标签 标签提供关于HTML文档的元数据.元数据不会显示在页面上,但是对于机器是可读的.它可用于浏览器(如何显示内容或重新加载页面),搜索 ...

  6. Python-Day7 面向对象进阶/异常处理/Socket

    一.面向对象高级语法部分 1.静态方法     通过@staticmethod装饰器即可把其装饰的方法变为一个静态方法,什么是静态方法呢?其实不难理解,普通的方法,可以在实例化后直接调用,并且在方法里 ...

  7. python autopy

    今天学习了python autopy 主要包括alert,color,mouse,key,bitmap,screen等的操作 文档在http://www.autopy.org/documentatio ...

  8. oracle 外部表

    CREATE TABLE "EXT_ENTRY_WORKFLOW" ( ), ), "CREATE_DATE" DATE, ), ), ), ), ), ), ...

  9. <亲测好使>mac os 安装mcrypt扩展

    以前安装opencart的时候倒是不需要mcrypt 这个库.但是新版本需要了.加上自己的 是mac环境.当时闲麻烦,就一直没装.这次下午就寻思给装上吧! 1.首先你要先安装xcode这个工具.不然没 ...

  10. hornetq 入门(1)

    Hornetq 版本2.4.0final  需要JDK7及以上 Hornetq官网 Hornetq2.1中文手册 step1.启动服务端 1.1准备配置文件(配置说明参考官网手册) hornetq-c ...