GDB笔记
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笔记的更多相关文章
- gdb笔记 ---《Linux.C编程一站式学习》
gdb笔记 ---<Linux.C编程一站式学习> 单步执行和跟踪函数调用 函数调试实例 #include <stdio.h> int add_range(int low, i ...
- c语言,gdb
Get gdb call stack http://blog.csdn.net/zoufeiyy/article/details/1490241 Debugging with GDB - Examin ...
- GDB调试基础
GDB调试基础 https://lesca.me/archives/gdb-basic-knowledge.html GDB笔记(二):条件断点.命令列表.监视点 https://lesca.me/a ...
- GDB调试笔记
参考资料:GDB调试精粹及使用实例 # 调试实例 #include <iostream> #include <cstring> using namespace std; ][] ...
- ubuntu: qemu+gdb 调试linux kernel 学习笔记
声明: 本笔记内容并非本人原创,90%来自网络资料的整合.同时,由于自己是刚刚接触qemu & gdbserver remote debug,本文也就算不得教程,仅供有缘人参考而已. ---- ...
- 用gdb调试程序笔记: 以段错误(Segmental fault)为例
用gdb调试程序笔记: 以段错误(Segmental fault)为例[转] 1.背景介绍2.程序中常见的bug分类3.程序调试器(如gdb)有什么用4.段错误(Segmental fault)介绍5 ...
- 《软件调试的艺术》学习笔记——GDB使用技巧摘要
<软件调试的艺术>学习笔记——GDB使用技巧摘要 <软件调试的艺术>,因为名是The Art of Debugging with GDB, DDD, and Eclipse. ...
- 手把手教你使用eclipse+qemu+gdb来单步调试ARM内核【学习笔记】
平台信息:linux4.0 平台:qemu 作者:庄泽彬 说明:笨叔叔的Linux视频的笔记 一.编译linux源码 export CROSS_COMPILE=arm-linux-gnueabi- e ...
- gdb使用笔记
相关编译选项: 1.-g 开启gdb 2.-o0,o2 o0表示不优化, 3. -funsigned-char -fdata-sections 会使compiler为每个function和data ...
随机推荐
- jQuery ui datepicker 日历转中文
做个笔记,以后详解 jQuery(function($){ $.datepicker.regional['zh-CN'] = { closeText: '关闭', prevText: '<上月' ...
- PHP获取Cookie模拟登录CURL
要提取google搜索的部分数据,发现google对于软件抓取它的数据屏蔽的厉害,以前伪造下 USER-AGENT 就可以抓数据,但是现在却不行了.利用抓包数据发现,Google 判断了 cookie ...
- (转载)delphi文件流
delphi文件流 [复制链接] 在Delphi中,所有流对象的基类为TStream类,其中定义了所有流的共同属性和方法. TStream类中定义的属性介绍如下: 1.Size: 此属性以字节返回流中 ...
- 利用ddmlib 实现 PC端与android手机端adb forword socket通信(转)
上篇文章讲了PC与android手机连接的办法 ,通过java调用系统命令执行adb命令操作,实际上是一个比较笨的办法. 网上查阅资料,发现google 提供了ddmlib库 (adt-bundle\ ...
- Java从入门到精通——数据库篇Oracle 11g服务详解
装上Oracle之后大家都会感觉到我们的电脑慢了下来,如何提高计算机的速度呢?我们应该打开必要的服务,关闭没有用的服务.下面是Oracle服务的详解: Oracle ORCL VSS Writer S ...
- 12、在XAML中定义处理程序
<Grid> <Button x:Name="btnTest" Width="120" Height="36" Conte ...
- ssh-keygen实现免密码登陆
在 Client 端建立 Public 与 Private Key : 建立的方法真的是简单到不行!直接在 192.168.0.100 这个 Client 上面,以 test2 这个账号,使用 ssh ...
- 关于feature创建Lookup列的BUG
使用Sharepoint 2013自带的创建栏,有如下的XML <?xml version="1.0" encoding="utf-8"?>< ...
- UI控件tag属性和魔法数字的处理
说明:tag属性有很大的用处,它就好像每个UI控件的id,当多个按钮指向同一个监听方法时,可以给方法带参数UIButton,然后根据不同的tag值 来判断执行哪个按钮的监听事件: - (IBActio ...
- UIDynamic仿物理引擎-浮动碰撞效果-b
最近产品提了个需求(电商的APP-两鲜),需要在APP背景加上几个水果图案在那里无规则缓慢游荡...模仿 天天果园 APP的.好吧,那我就在网上找了很多文章,总结一下写个demo.效果如下: Mou ...