解决core核心文件转出问题

ulimit -c #查看core文件的生成开关,若为0则关闭

ulimit -c unlimited #打开开关,只在当前shell生效

sudo sh -c 'echo "./%e.core.%p" > /proc/sys/kernel/core_pattern' #在当前目录下生成core文件,临时生效

启动GDB

gdb ./process         #直接调试目标程序gdb ./process core   #调试转储文件gdb <program> <PID>  #调试服务程序

开始调试

栈回溯显示我们是如何到达失败点的,通常足够帮助我们确定常见的问题。

bt (backtrace的简写)常常是我在 gdb 中使用的第一条命令

gdb$ bt     #栈回溯,有core文件的情况下disas main  #反汇编main函数,或者其它出错函数i r      #(info registers 的简写)打印寄存器值start    #开始调试,在main函数的第一条语句停下来 ; 等同于 break main

查看源代码

  • list :简记为 l ,其作用就是列出程序的源代码,默认每次显示10行。
  • list 行号:将显示当前文件以“行号”为中心的前后10行代码,如:list 12
  • list 函数名:将显示“函数名”所在函数的源代码,如:list main
  • list :不带参数,将接着上一次 list 命令的,输出下边的内容

设置断点

break 是设置断点,可简写为b

b n  #在第n行源码处设置断点

b fn1 if a>b   #条件断点设置

b func  #在func()函数入口点设置断点

delete 断点号n  #删除第n个断点

disable 断点号n  #暂停第n个断点

enable 断点号n  #开启第n个断点

clear 行号n  #清除第n行的断点

info b   #(info breakpoints)显示当前程序的断点设置情况

delete breakpoints  #清除所有断点

交互命令

r  #运行此程序
c  #继续运行
next  #单步步过
step  #单步步入
until  #一直运行程序,直到退出循环体
until+行号  #运行至某行,不仅仅用来跳出循环
finish  #运行程序,直到当前函数完成返回,并打印函数返回时的堆栈地址和返回值及参数值等信息
call 函数(参数)  #调用程序中可见的函数,并传递“参数”,如:call gdb_test(55)
q  #退出

打印表达式

print 表达式:简记为 p ,其中“表达式”可以是任何当前正在被测试程序的有效表达式

比如当前正在调试C语言的程序,那么“表达式”可以是任何C语言的有效表达式,包括数字,变量甚至是函数调用

print a    #将显示整数 a 的值
print name  #将显示字符串 name 的值
p main    #打印main函数内容和地址
p buffer    #打印buffer内容
p &buffer    #打印buffer地址info f  #这句也可以查到main函数地址,最后一行

  • display 表达式:在单步运行时将非常有用,使用display命令设置一个表达式后,它将在每次单步进行指令后,紧接着输出被设置的表达式及值。如: display a
  • watch 表达式:设置一个监视点,一旦被监视的“表达式”的值改变,gdb将强行终止正在被调试的程序。如: watch a
  • whatis :查询变量或函数
  • info function: 查询函数
  • 扩展info locals: 显示当前堆栈页的所有变量

回退

gdb 有一个超棒的功能叫回退

这里我可以逐行或逐条指令的回退。它通过播放我们记录的寄存器状态来工作

reverse-stepi    #回退一条指令

用GDB查看内存

格式: x /nfu <addr>

x 是 examine 的缩写

n 表示要显示的内存单元的个数

f 表示显示方式, 可取如下值

x 按十六进制格式显示变量。
d 按十进制格式显示变量。
u 按十进制格式显示无符号整型。
o 按八进制格式显示变量。
t 按二进制格式显示变量。
a 按十六进制格式显示变量。
i 指令地址格式
c 按字符格式显示变量。
f 按浮点数格式显示变量。

u 表示一个地址单元的长度

b 表示单字节
h 表示双字节
w 表示四字节
g 表示八字节

Format letters are

o(octal), x(hex), d(decimal), u(unsigneddecimal)
t(binary), f(float), a(address), i(instruction), c(char) ands(string)

Size letters are

b(byte), h(halfword), w(word), g(giant, 8bytes)

举例

x/3uh buf
表示从内存地址buf读取内容
h 表示以双字节为一个单位
3 表示三个单位
u 表示按十六进制显示

详细例子:

(gdb) list
#include<stdio.h>
int main()
{char a[1];a[0]='a';unsigned long long md5=14126471717450151013;printf("%d/n",a[0]);return 0;}(gdb) break 10Breakpoint 1 at 0x8048372: file test.c, line 10.(gdb) runStarting program:/data/compiler/g_platform/bradenwu/md5/test.outBreakpoint 1, main () at test.c:1010             return 0;(gdb) x/8xb md50x8837f465:    Cannot access memory at address 0x8837f465(gdb) x/8xb &md50xbfffefa0:    0x65   0xf4   0x37   0x88   0x2e   0x4f   0x0b    0xc4

转载于:https://www.cnblogs.com/wintrysec/p/10485016.html

GDB 调试工具高级用法相关推荐

  1. 【工欲善其事,必先利其器】之gdb五大高级用法

    本篇文章讲解gdb的一些高级用法,在我们的开发生涯中,调试是很重要的技能,而在linux下开发,最常用的调试工具就是gdb了,所以这里介绍几种gdb比较高级的用法,助力我们的调试技能. 还是先看下思维 ...

  2. Git log高级用法

    格式化Log输出 首先,这篇文章会展示几种git log格式化输出的例子.大多数例子只是通过标记向git log请求或多或少的信息. 如果你不喜欢默认的git log格式,你可以用git config ...

  3. chrome调试工具高级不完整使用指南(基础篇)

    一.前言 本文记录的是作者在工作上面对chrome的一些使用和情况的分析分享,内容仅代表个人的观点.转发请注明出处(http://www.cnblogs.com/st-leslie/),谢谢合作 二. ...

  4. 【C语言基础】gdb调试工具的使用

    gdb调试教程 快速入门 要想快速入门gdb调试,可以直接翻阅基本案例:采内存 介绍 GDB是一个由GNU开源组织发布的.UNIX/LINUX操作系统下的.基于命令行的.功能强大的程序调试工具. 对于 ...

  5. Jquery(二)之高级用法

    Jquery之高级用法 一.事件冒泡 二.页面加载及常见事件 三.隐藏(hide)/显示(show) 四.淡入(fadeIn)/淡出(fadeOut)(自) 五.滑入(slideUp)/滑出(slid ...

  6. Linux基础和c语言的高级用法

    Linux基础 基础命令 与文件相关的: mkdir:创建一个目录文件 touch:创建一个普通文件 rmdir:删除一个空的目录文件 cd:+目录名:进入该目录文件 +路径:进入该路径下 ls:显示 ...

  7. Fiddler 高级用法:Fiddler Script 与 HTTP 断点调试

    之前在<关于 WEB/HTTP 调试利器 Fiddler 的一些技巧分享>中系统的介绍过 Fiddler 的原理与一些常见技巧,但那篇文章只是入门科普,并不深入,今天要介绍到的内容相对更加 ...

  8. vim的高级用法配置以及在系统中如何获取帮助

    vim的高级用法配置以及在系统中如何获取帮助 1 vim的三种模式 1.1 使用方法 1.2 vim模式 2 vim工作的基本配置 2.1 临时设定(set设定) 2.2 永久设定方式 3 搜索 4 ...

  9. Cacti Weathermap 高级用法 (二)

    成都长宽Weathermap实际运用的效果图示例: 这是一个CNC出口的质量监控图. 途中cnc节点(红色)是一个展示图例,TEL节点根据存活状态显示为绿色 TEL节点上面P:47.2ms 是一个,这 ...

最新文章

  1. L1-025 正整数A+B
  2. 对于电单车同学们提出的改动建议
  3. 为了远程控制:teamview检测为商用、ZeroTier + 自带远程桌面、Ping其他电脑ping不通
  4. eclipse 注释星号没对齐_36 个奇葩代码注释,看完笑哭了!
  5. CSS+JS鼠标悬停单元格变色
  6. leetcode94. 二叉树的中序遍历(左中右)
  7. aio 系统原理 Java_Java新一代网络编程模型AIO原理及Linux系统AIO介绍
  8. Java 建模: 子整体软件开发,第二部分
  9. # JDK7+ MethodHandle
  10. 龙格现象python程序_基于切比雪夫多项式的函数插值逼近
  11. 如何压缩图片大小到100K以下
  12. plotly系列 | 绘制散点图组合箱线图(联合图)
  13. 关于maven仓库的配置步骤
  14. iOS 解决TableView reloadData时cell中图片会闪的问题
  15. 更改windows 2003 密钥
  16. javaweb闲暇小程序之抽签程序
  17. win7系统服务器角色向导,Windows Server2012入门-添加服务器角色和功能
  18. npm包--rimraf
  19. html实现展开余下全文多个,DIV+css内容太长,怎么实现点击展开余下全文?
  20. 缓存(cache、Redis)

热门文章

  1. 细菌基因组框架图+比较基因组学分析助力细菌耐药和毒力研究
  2. 马云出席“马云乡村教师奖”颁奖典礼
  3. mysql—数据库的基础建表
  4. 【unity shader 入门精要 读书笔记】透明
  5. 用计算机打出惊雷这首,惊雷是什么歌?惊雷这首歌为什么火
  6. html页面展示json数据并格式化
  7. 图神经网络也能用作CV骨干模型,华为诺亚ViG架构媲美CNN、Transformer
  8. 【Java】Spring更简单的读取和存储
  9. OpenLayers 3地图添加图标
  10. GAMES103-基于物理的计算机动画入门(1~4,lab1)