Chinaunix首页 | 论坛 | 博客
  • 博客访问: 354676
  • 博文数量: 83
  • 博客积分: 5322
  • 博客等级: 中校
  • 技术积分: 1057
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-11 11:27
个人简介

爱生活,爱阅读

文章分类

全部博文(83)

文章存档

2015年(1)

2013年(1)

2012年(80)

2011年(1)

分类: LINUX

2012-09-20 20:08:31

6. gdb高级特性
6.1如何检查内存?

使用x命令检查内存。X命令的语法为:x/FMT ADDRESSFMT由格式字符与大小字符构成。这里有很多的选项,请使用“help x”来查看。ADDRESS参数可以为任何的符号名,例如变量或者内存地址。

如果我们有字符串char *s = "Hello World\n",则使用x命令有几种形式:

作为字符串检查该变量:

(gdb) x/s s

0x8048434 <_IO_stdin_used+4>:    "Hello World\n"

作为字符检查该变量:

(gdb) x/c s

0x8048434 <_IO_stdin_used+4>:   72 'H'

作为四个字符检查该变量:

(gdb) x/4c s

0x8048434 <_IO_stdin_used+4>:   72 'H'  101 'e' 108 'l' 108 'l'

检查该变量的前32为:

(gdb) x/t s  

0x8048434 <_IO_stdin_used+4>:   01101100011011000110010101001000

16进制方式检查该变量的前24字节:

(gdb) x/3x s

0x8048434 <_IO_stdin_used+4>:   0x6c6c6548      0x6f57206f      0x0a646c72

6.2如何查看寄存器的值?

使用info registers命令。该命令的输出依赖于硬件架构。下面是一个intel架构下的部分输出:

(gdb) info registers

eax            0x40123460       1074934880

ecx            0x1      1

edx            0x80483c0        134513600

ebx            0x40124bf4       1074940916

esp            0xbffffa74       0xbffffa74

ebp            0xbffffa8c       0xbffffa8c

esi            0x400165e4       1073833444

...

6.3如何调试一个核文件(core file)?

当你的程序意外终止并留下了核文件(core dump file)时,你可以使用gdb来查看程序崩溃时的状态。使用core命令加载core文件。Core命令的参数极为core dump 文件的文件名,通常为“core”,所以整个命令为core core

prompt > myprogram

Segmentation fault (core dumped)

prompt > gdb myprogram

...

(gdb) core core

...

6.4如何按照指令级别逐步执行程序?

有两个命令,nextistepi,它们同next step命令很相似。参见这些命令的使用方法来使用它们。

6.5如何查看正在执行程序的汇编代码?

使用disassemble命令。该命令的参数是内存地址。下面是main函数的反汇编例子,该例子是一个运行在intel架构的计算机上的程序:

(gdb) disassemble main

Dump of assembler code for function main:

0x80483c0

:       push   %ebp

0x80483c1 :     mov    %esp,%ebp

0x80483c3 :     sub    $0x18,%esp

0x80483c6 :     movl   $0x0,0xfffffffc(%ebp)

0x80483cd :    mov    0xfffffffc(%ebp),%eax

0x80483d0 :    movb   $0x7,(%eax)

0x80483d3 :    xor    %eax,%eax

0x80483d5 :    jmp    0x80483d7

0x80483d7 :    leave 

0x80483d8 :    ret   

End of assembler dump.

阅读(1511) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~