注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

gmd20的个人空间

// 编程和生活

 
 
 

日志

 
 

GDB调试程序常用命令  

2009-05-06 18:06:29|  分类: linux相关 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
记得用gcc 加-g 参数编译程序,以便生成的程序中带有调试信息。

1。gdb载入程序
gdb a.out

2。运行程序
run 加程序需要的参数

3。设置源代码目录
gdb directory /代码目录

4。查看函数名字用 info
gdb info functions
类似的有
gdb info files
查看函数所在的源代码行数
gdb info line 函数名字
(gdb) info line  *0xb6779198
(gdb) list *0xb6779198


5。下断点
(gdb) br net.c:911 在源代码的 net.c 文件911行下断点
Breakpoint 2 at 0x4163fc: file net.c, line 911.

在改函数上下断点
br 函数名字  

6。 查看寄存器 内容
info regiseter 查看寄存器   简写 i reg

7.查看堆栈
bt

8.查看变量的值 用 print 加表达式
(gdb) print (struct intfconfig_s *) 0x7fff2d15f878
$21 = (struct intfconfig_s *) 0x7fff2d15f878

9。查看类型 用ptype
(gdb) ptype struct intfconfig_s   
type = struct intfconfig_s {
    newtComponent ipv4Entry;
    newtComponent cidr4Entry;
    newtComponent ipv6Entry;
    newtComponent cidr6Entry;
    newtComponent gwEntry;
    newtComponent nsEntry;
    const char *ipv4;
    const char *cidr4;
    const char *ipv6;
    const char *cidr6;
    const char *gw;
    const char *ns;
}
10。 查看结构的子成员
(gdb) print ((struct intfconfig_s *) 0x7fff2d15f878)->ipv6
$25 = 0x1bf63740 " \025- \177"

(gdb) print ((struct intfconfig_s *) 0x7fff2d15f878)->ipv4
$26 = 0x0
(gdb) print ((struct intfconfig_s *) 0x7fff2d15f878)->ipv6Entry
$27 = (newtComponent) 0x1bf916e0

(gdb) print ((struct intfconfig_s *) 0x7fff2d15f878)->ipv4Entry
$28 = (newtComponent) 0x7fff2d15fb90

(gdb) print ((struct intfconfig_s *) 0x7fff2d15f878)->cidr6
$29 = 0x30687465 <Address 0x30687465 out of bounds>

(gdb) print ((struct intfconfig_s *) 0x7fff2d15f878)->cidr4
$30 = 0x1bf91580 " \027 \033"
(gdb) print ((struct intfconfig_s *) 0x7fff2d15f878)->gw
$31 = 0x1bf92410 "\004"

11 执行下一句
next
nexti

12。运行时修改数据
set


13.   查看 详细的堆栈内容。 
--------------------------
info frame
会打印出这些信息:栈的层编号,当前的函数名,函数参数值,函数所在文件及行号,函数执行到的语句。
info args
打印出当前函数的参数名及其值。
info locals
打印出当前函数中所有局部变量及其值。

(gdb) x/12a  0xbffff478
解析栈上可能的地址。

没有符号时,查看栈上的变量
(gdb) info frame 
Stack level 0, frame at 0xbffff480:
 eip = 0x805081a in TiXmlString::append (tinystr.cpp:75); saved eip 0x804e37a
 called by frame at 0xbffff4d0
 source language c++.
 Arglist at 0xbffff478, args: this=0xbffff550, str=0xbffff4b4 "1", len=1
 Locals at 0xbffff478, Previous frame's sp is 0xbffff480
 Saved registers:
  ebp at 0xbffff478, eip at 0xbffff47c
  
(gdb)  x/10x 0xbffff478 (gdb) x/10x 0xbffff478 (使用info frame 里面 ebp at 0xbffff478的地址)
0xbffff478: 0xbffff4c8(ebp) 0x0804e37a(eip) 0xbffff550(参数1) 0xbffff4b4(参数2)
0xbffff488: 0x00000001 (参数3) 0x00000000 0xb7cd4134 0x00000000
0xbffff498: 0xbffff400 0x0804dc00
  


14. 查看加载的模块地址
----------------------
(gdb) info proc mappings   

15. 打印内存
------------
x/64x   0xb60d3158 

16。 更多内容 输入 help 看帮助,呵呵。基本上上面这些就已经够用了。
-------------------
  评论这张
 
阅读(476)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017