gdb的简单使用

1.gdb 可执行文件

例子:gdb one

2.gdb attach pid

例子:gdb attach 123

3.set args 参数  

例子: set args  1  2 3

4.info args 查看参数

5.info locals :查看本地变量

6. next:源码级别不过

7.nexti:汇编代码级别不过

8:gdb -tui 可执行文件,layout split分割源码和汇编窗口

9.step:源码级别步入

10:stepi: 汇编级别步入

11.p/[o/x/d/u/t/f/a/i/c/s/z]  ( 变量/$寄存器)

0:八进制格式

x:16进制格式

d:十进制格式

u:无符号十进制格式

t:二进制格式

f:浮点型

a:地址

i:汇编,用在x命令中

c:字符

s:字符串

z:0填充的十六进制

例子:p/x $eax

12.  x/[长度.格式.单位]   内存地址:用来查看从某个地址开始的n个数据,并且单位数据以某种格式展示.

b:单位为1字节

h:单位为半字

w:单位为一个字

g:单位为8个字节

例子 :x/8xb 0x123

13.break 函数名

例子:break main.main

14.break *地址

例子:break 0x123

15.break 文件名:行号

例子:break /users/one.go:13

16 break 断点 if 表达式

例子:break one.go:13 if i==3

16.tbreak:是临时断点,只断一次点,其它和break一样

17.info registers :查看寄存器

18.display 变量:自动打印变量

19.info threads :查看所有线程

20.thread n:切换线程到线程序号n

例子:thread 3

21.info goroutines:查看所有的goroutine

22:goroutine  n :切换到goroutine n

例子:goroutine  3

23.backtrace :查看调用栈

24.frame  n:切换到栈n

例子:frame 5

26.up:切换到上一个frame

27.down:切换到下一个frame

28.set 变量=值

例子:set a=3

29. set 寄存器=值

例子:set  $eax=33

30. set *地址=值  :更改内存值

例子:set *0x7fdffbd0=1:

31.set scheduler-locking on:多线程调试,设置每次只能有一个线程运行

32.find [/SIZE-CHAR] [/MAX-COUNT] START-ADDRESS, END-ADDRESS, EXPR1 [, EXPR2 ...]:内存搜索字符串

33.record后,gdb可以逆向调试

34.一般不知道如何使用命令,可以百度,或者是help 命令,要善于使用tab自动补全

35.生成核心存储文件

help ulimit :查看帮助

ulimit  -c 核心存贮文件大小大小  :默认核心存储文件大小是没有限制的

ulimit -c unlimited  :设置核心存贮文件的大小为无限 

gdb 调试文件后  ,用命令 :generate-core-file  生成核心存储文件

调试核心存储文件 :  gdb  可执行文件名   该可执行文件生成的核心存储文件名

36. info proc mappings :当调试的程序运行后查看该程序的内存映射

37.return 函数即使没有执行完,也直接返回

38.finish 执行完当前函数并返回

39.list 函数  或者 list  显示源码,在未执行前显示文件位置

40.pwd:查看当前工作目录

41.step n,stepi   n,nexti  n, next  n, continue  n:连续执行n次

42. command 断点号 //断点触发时,执行命令,一般用于打印变量

43.(gdb) command 1

Type commands for breakpoint(s) 1, one per line.

End with a line saying just "end".

>print x

>end

44.def steprefresh

step

refresh

end

上面为定义一个新的命令steprefresh

45.set auto-load safe-path /

46.set disassembly-flavor intel :设置汇编为intel格式

47.监测点

watch //为表达式(变量)expr设置一个观察点。一量表达式值有变化时,马上停住程序。

rwatch //当表达式(变量)expr被读时,停住程序。

awatch //当表达式(变量)的值被读或被写时,停住程序。

info watchpoints //列出当前所设置了的所有观察点。

经验:观察某个变量是否变化,被读或者被写,由于变量只在某一个作用域,可以获取变量的地址,然后观察。

比如:观察examined_rows变量神马时候被修改

(1).p &examined_rows,得到地址

(2).watch *(ha_rows *) 0x7ffec8005e28,则可以观察这个变量的变化情况。

48.undisplay //取消自动打印

49.注意:默认编译的时候,调试过程是看不见宏的值的,编译时候需要给选项。-g3

50.thread apply all command //所有线程都执行命令打印栈桢

比如:thread apply all bt //所有线程都打印栈桢

51.show scheduler-locking :显示调度锁

52.set scheduler-locking off:关闭调度锁

53.non-stop模式(7.0以后的版本支持)

set target-async 1

set pagination off

set non-stop on

gdb启动了不停模式,除了断点有关的线程会被停下来,其他线程会执行。

54.信号

(1).singal 发送信号

假定你的程序已将一个专用的 SIGINT(键盘输入,或CTRL-C;信号2)信号处理程序设置成采取某个清理动作,

要想测试该信号处理程序,你可以设置一个断点并使用如下命令:

(gdb) signal 2

(2).handle 拦截信号

Handle命令可控制信号的处理,他有两个参数,一个是信号名,另一个是接受到信号时该作什么。几种可能的参数是:

* nostop 接收到信号时,不要将它发送给程序,也不要停止程序。

* stop 接受到信号时停止程序的执行,从而允许程序调试;显示一条表示已接受到信号的消息(禁止使用消息除外)

* print 接受到信号时显示一条消息

* noprint 接受到信号时不要显示消息(而且隐含着��停止程序运行)

* pass 将信号发送给程序,从而允许你的程序去处理它、停止运行或采取别的动作。

* nopass 停止程序运行,但不要将信号发送给程序。 

比如:

handle SIGPIPE stop print //截获SIGPIPE信号,程序停止并打印信息

handle SIGUSR1 nostop noprint //忽略SIGUSR1信号


info target:查看调试进程的相关信息,包括入口地址,段地址等

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,992评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,212评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,535评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,197评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,310评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,383评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,409评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,191评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,621评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,910评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,084评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,763评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,403评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,083评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,318评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,946评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,967评论 2 351

推荐阅读更多精彩内容

  • 简介 gdb 是 GNU 开源组织发布的一个强大的 Linux 下的程序调试工具,gdb 除支持 c/c++ 语言...
    颸下独角兽阅读 407评论 0 0
  • 官方文档 http://sourceware.org/gdb/current/onlinedocs/gdb/[ht...
    wayyyy阅读 13,161评论 0 3
  • 一、gdb的简介 GDB是一个由GNU开源组织发布的,Unix/Linux操作系统下的,基于命令行的,功能强大的程...
    JoeSuperM028阅读 1,444评论 0 0
  • 01概念 GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工...
    程序员姜戈阅读 727评论 0 0
  • 程序调试的基本思想是“分析现象->假设错误原因->产生新的现象去验证假设”这样一个循环过程,根据现象如何假设错误原...
    Manfred_Zone阅读 16,523评论 0 26