文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>gdb调试技巧

gdb调试技巧

时间:2009-05-06  来源:mumutouv

1.首先我们针对堆和栈中的分析进行gdb调试。

int b;                //栈 
char s[] = "abc";     //栈 ,在常量区也会有一份,在知道这里的时候会从常量区拷贝一份出来,填充到栈上。
char *p2;             //栈 
char *p3 = "123456";  //123456\0在常量区,p3在栈上。 
static int c =0;     //全局(静态)初始化区 
p1 = (char *)malloc(10); //堆
p2 = (char *)malloc(20); //堆

(gdb) p &b
$18 = (int *) 0x7fb95db0
(gdb) p &s
$17 = (char (*)[4]) 0x7fb95db4
(gdb) p &p2
$20 = (char **) 0x7fb95dac
(gdb) p &p3
$19 = (char **) 0x7fb95da8
(gdb) p &c
$27 = (int *) 0x410a54

执行到p2 = (char *)malloc(20)的时候,内存堆栈分布情况为:
在调用函数中执行
--参数n
   ....
   参数2
   参数1
   返回地址
--
在被调用函数中执行
临时变量

c   --
b   --  这是一个从静态变量区拷贝过来的数组,放在栈中。
s = a  --
b
p2
p3

在mipsel上面反汇编看看,多么整齐的4字节指令啊
(gdb) disassemble main
Dump of assembler code for function main:
0x004006c0 <main+0>:    lui    gp,0x2
0x004006c4 <main+4>:    addiu    gp,gp,-31936
0x004006c8 <main+8>:    addu    gp,gp,t9
0x004006cc <main+12>:    addiu    sp,sp,-56
0x004006d0 <main+16>:    sw    ra,52(sp)
0x004006d4 <main+20>:    sw    s8,48(sp)
0x004006d8 <main+24>:    move    s8,sp
0x004006dc <main+28>:    sw    gp,16(sp)
0x004006e0 <main+32>:    lw    v1,-32740(gp)
0x004006e4 <main+36>:    addu    zero,zero,v0
0x004006e8 <main+40>:    lw    a0,2472(v1)
0x004006ec <main+44>:    addiu    v0,v1,2472
0x004006f0 <main+48>:    lw    v0,4(v0)
0x004006f4 <main+52>:    sw    a0,36(s8)
0x004006f8 <main+56>:    sw    v0,40(s8)
0x004006fc <main+60>:    addiu    v0,v1,2472
相关阅读 更多 +
排行榜 更多 +
大武道最新版

大武道最新版

休闲益智 下载
宝宝巴士手机版(babybus)

宝宝巴士手机版(babybus)

休闲益智 下载
宝宝巴士快乐启蒙游戏

宝宝巴士快乐启蒙游戏

休闲益智 下载