设置捕捉点(CatchPoint)
可设置捕捉点来补捉程序运行时的一些事件。如载入共享库(动态链接库)或是C++的异常。设置捕捉点的格式为:
catch
当event发生时,停住程序。event可以是下面的内容:
●throw 一个C++抛出的异常 (throw为关键字)。
●catch 一个C++捕捉到的异常 (catch为关键字)。
●exec 调用系统调用exec时(exec为关键字,目前此功能只在HP-UX下有用)。gdb 条件断点
●fork 调用系统调用fork时(fork为关键字,目前此功能只在HP-UX下有用)。
●vfork 调用系统调用vfork时(vfork为关键字,目前此功能只在HP-UX下有)。
●load 或 load 载入共享库(动态链接库)时 (load为关键字,目前此功能只在HP-UX下有用)。
●unload 或 unload 卸载共享库(动态链接库)时 (unload为关键字,目前此功能只在HP-UX下有用)。
tcatch
只设置一次捕捉点,当程序停住以后,应点被自动删除。
维护停止点
上面说了如何设置程序的停止点,gdb中的停止点也就是上述的三类。在gdb中,如果觉得已定义好的停止点没有用了,可以使用delete、clear、disable、enable这几个命令来进行维护。
Clear
清除所有的已定义的停止点。
clear
clear
清除所有设置在函数上的停止点。
clear
clear
清除所有设置在指定行上的停止点。
delete [breakpoints] [range…]
删除指定的断点,breakpoints为断点号。如果不指定断点号,则表示删除所有的断点。range 表示断点号的范围(如:3-7)。其简写命令为d。
比删除更好的一种方法是disable停止点。disable了的停止点,gdb不会删除,当还需要时,enable即可,就好像回收站一样。
disable [breakpoints] [range…]
disable所指定的停止点,breakpoints为停止点号。如果什么都不指定,表示disable所有的停止点。简写命令是dis.
enable [breakpoints] [range…]
enable所指定的停止点,breakpoints为停止点号。
enable [breakpoints] once range…
enable所指定的停止点一次,当程序停止后,该停止点马上被gdb自动disable。
enable [breakpoints] delete range…
enable所指定的停止点一次,当程序停止后,该停止点马上被gdb自动删除。
停止条件维护
前面在介绍设置断点时,提到过可以设置一个条件,当条件成立时,程序自动停止。这是一个非常强大的功能,这里,专门介绍这个条件的相关维护命令。
一般来说,为断点设置一个条件,可使用if关键词,后面跟其断点条件。并且,条件设置好后,可以用condition命令来修改断点的条件(只有break和watch命令支持if,catch目前暂不支持if)。
condition
修改断点号为bnum的停止条件为expression。
condition
清除断点号为bnum的停止条件。
还有一个比较特殊的维护命令ignore,可以指定程序运行时,忽略停止条件几次。
ignore
表示忽略断点号为bnum的停止条件count次。
为停止点设定运行命令
可以使用gdb提供的command命令来设置停止点的运行命令。也就是说,当运行的程序在被停住时,我们可以让其自动运行一些别的命令,这很有利行自动化调试。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-40594-14.html
应立即声明
放个屁都有道理
请问还能经济发展吗