BBS水木清华站∶精华区

发信人: TJB (老六), 信区: Linux
标  题: GDB (8) Part Five
发信站: BBS 水木调试站 (Wed Jun  3 08:48:50 1998)

发信人: System_Killer@bbs.ustc.edu.cn (大家一起来发呆), 信区: Linux
标  题: gdb(八)
发信站: 中国科大BBS站 (Wed Apr 29 00:49:33 1998)
转信站: SwordHouse!linux.ustc.edu.cn!ustcnews!ustcbbs

断点条件
===========
   最简单的断点就是当你的程序每次执行到的时候就简单将程序挂起。你也可以为断点
设置“条件”。条件只是你所使用的编程语言的一个布尔表达式,带有条件表达式的断点
在每次执行时判断计算表达式的值,当表达式值为真时才挂起程序。
   这是使用“断言”的一中形式,在这种形式中你只有在断言为真时才挂起程序。如果
在C语言中你要使断言为假时挂起程序则使用:“!表达式”。
   条件表达式对观察点也同样有效,但你并不需要它,因为观察点本身就计算一个表达式?
?
但它也许会简单一些。比如只在一个变量名上设置观察点然后设置一个条件来测试新的赋
值。
  断点条件可能有副作用(side effects)会影响程序的运行。这一点有时也是很有用的
比如来激活一个显示程序完成情况的的函数,或使用你自己的打印函数来格式化特殊的
数据结构。当在同一位置没有另一个断点设置时,结果是可预见的。(在gdb中如果在同一
个地方使用了一个断点和一个条件断点则普通断点可能先被激活。)在条件断点的应用上
有很多技巧。
   断点条件可以在设置断点的同时被设置。使用'if'命令作为'break'命令的参数。断点
条件也可以在任何时候使用'condition'命令来设置。'watch'命令不能以'if'作为参数

所以使用'condition'命令是在观察点上设置条件的唯一方法。

`condition BNUM EXPRESSION'
     把'EXPRESSIN'作为断点条件。断点用'BNUM'来指定。在你为BNUM号断点设置了条件
后,只有在条件为真时程序才被暂停。当你使用'condition'命令GDB马上同步的检查
'EXPRESSION'的值判断表达式中的符号在断点处是否有效,但GDB并不真正计算表达式
的值。

`condition BNUM'
     删除在'BNUM'号断点处的条件。使之成为一个普通断点。
   一个条件断点的特殊例子是时一个程序在执行了某句语句若干次后停止。由于这
个功能非常常用,你可以使用一个命令来直接设置它那就是'ignore count'。每个
断点都有'ignore count',缺省是零。如果'ignore count'是正的那么你的程序在
运行过断点处'count'次后被暂停。

`ignore BNUM COUNT'
     设置第BNUM号断点的'ignore count'为'COUNT'。
     如果要让断点在下次执行到时就暂停程序,那么把'COUNT'设为0.
     当你使用'continue'命令来继续你程序的执行时,你可以直接把'ignore count'
作为'continue'的参数使用。你只要直接在'continue'命令后直接跟要"ignore"的
次数就行。
     如果一个断点同时有一个ignore count和一个条件时,条件不被检查。只有当
'ignore count'为零时GDB才开始检查条件的真假。
     另外你可以用'condition'命令来获得与用‘ignore count'同样效果的断点。用法
是用类似于'$foo--<=0'的参量作为'condition'命令的参数(使用一个不停减量的变量
作为条件表达式的成员)。

--
※ 来源: 中国科大BBS站 [bbs.ustc.edu.cn]
                                按任何键继续 ..

--
※ 来源:·BBS 水木调试站 Leeward.lib.tsinghua.edu.cn·[FROM: 202.200.37.100]

BBS水木清华站∶精华区

本文转自中文Linux论坛