Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29215
  • 博文数量: 19
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 200
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-19 08:37
文章分类
文章存档

2011年(3)

2010年(16)

我的朋友

分类: LINUX

2010-12-17 23:38:42

gdb 
  file /opt/bin/test 运行执行文件的路径
  directory /opt/test_code  源码的路径
  run -qws display dircetfb 运行可执行文件(可显示的程序,参数是根据可执行文件的特性)
 
break(b)                设置断点
info break(info b)      显示断点信息
delete b                删除断点
continue(c)            继续执行函数,直到函数结束或遇到新断点
next(n)                 单步恢复程序运行,但不进入函数调用
step(s)                 单步恢复程序运行,且进入函数调用
list(l)行号|<函数名>     查看指定位置的程序源码
run                      程序开始运行,直到遇到断点
print(p) 表达式 |变量     查看程序运行对应表达式和变量的值

(gdb)l                  查看源文件,一次显示10行
(gdb)list/l  行号       查看指定位置的代码
(gdb)b 函数名/行号      在某函数或指定位置设置断点
(gdb)info b            查看断点信息(有多个断点,Num显示断点序号)
(gdb)r  行号            gdb默认从第一行开始运行,如果要指定行开始运行,则使用该命令
(gdb)p 变量名           查看指定变量的值
(gdb)set 变量=设定值   修改变量值。gdb显示变量时都会在对应值前加“%n”标记,以后再引用的话可以直接使用  “%n”,提高效率。
(gdb)n或s              单步运行程序。若有函数,调用时s会进入该函数,而n不会进入该函数。
(gdb)c                 查看完变量或堆栈后可以输入“c” 命令恢复程序的正常运行,把剩余的程序执行完。
(gdb)q                 退出gdb环境
 
info args             列出你程序所接受的命令行参数
info registers       列出寄存器的状态
info b               列出在程序中设的断点
 
当程序崩溃的时候linux会生成一个core文件,可以用
gdb a.out core
where
查看导致崩溃的原因
 
break ... if COND
这个命令设置一个条件断点,条件由COND指定;在gdb每次执行到此断点时
COND都被计算当COND的值为非零时,程序在断点处停止
rbreak REGEX
在所有满足表达式REGEX的函数上设置断点。这个命令在所有相匹配的函数上设置无
条件断点,当这个命令完成时显示所有被设置的断点信息。这个命令设置的断点和
break命令设置的没有什么不同。当调试C++程序时这个命令在重载函数上设置断点时
非常有用。
watch EXPR
为表达式(变量)expr设置一个观察点。一量表达式值有变化时,马上停住程序。
这个命令使用EXPR作为表达式设置一个观察点。GDB将把表达式加入到程序中并监
视程序的运行,当表达式的值被改变时GDB就使程序停止。这个也可以被用在SPARClite
DSU提供的新的自陷工具中。当程序存取某个地址或某条指令时(这个地址在调试寄
存器中指定),DSU将产生自陷。对于数据地址DSU支持'watch'命令,然而硬件断点寄
存器只能存储两个断点地址,而且断点的类型必须相同。就是两个'rwatch'型断点
或是两个'awatch'型断点。
info watchpoints
在多线程的程序中,观察点的作用很有限,GDB只能观察在一个线程中的表达式的值
如果你确信表达式只被当前线程所存取,那么使用观察点才有效。GDB不能注意一个
非当前线程对表达式值的改变。
 
catch EXCEPTIONS
使用这个命令在一个被激活的异常处理句柄中设置断点。EXCEPTIONS是一个你要抓住
的异常。你一样可以使用'info catch'命令来列出活跃的异常处理句柄。

GDB中对于异常处理由以下情况不能处理:
* 如果你使用一个交互的函数,当函数运行结束时,GDB将象普通情况一样把控制返
回给你。如果在调用中发生了异常,这个函数将继续运行直到遇到一个断点,一个信号
或是退出运行。
* 你不能手工产生一个异常( 即异常只能由程序运行中产生 )
* 你不能手工设置一个异常处理句柄。
有时'catch'命令不一定是调试异常处理的最好的方法。如果你需要知道异常产生的
确切位置,最好在异常处理句柄被调用以前设置一个断点,这样你可以检查栈的内容。
如果你在一个异常处理句柄上设置断点,那么你就不容易知道异常发生的位置和原因。
要仅仅只在异常处理句柄被唤醒之前设置断点,你必须了解一些语言的实现细节
阅读(739) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-12-19 14:50:28

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com