欢迎来到天天文库
浏览记录
ID:37724062
大小:37.50 KB
页数:11页
时间:2019-05-29
《gdb单步调试(中)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、一、设置断点(BreakPoint)我们用break命令来设置断点。正面有几点设置断点的方法:break在进入指定函数时停住。C++中可以使用class::function或function(type,type)格式来指定函数名。break在指定行号停住。break+offsetbreak-offset在当前行号的前面或后面的offset行停住。offiset为自然数。breakfilename:linenum在源文件filename的linenum行处停住。break
2、filename:function在源文件filename的function函数的入口处停住。break*address在程序运行的内存地址处停住。breakbreak命令没有参数时,表示在下一条指令处停住。break...if...可以是上述的参数,condition表示条件,在条件成立时停住。比如在循环境体中,可以设置breakifi=100,表示当i为100时停住程序。查看断点时,可使用info命令,如下所示:(注:n表示断点号)infobreakpoints[n]infobre
3、ak[n]二、设置观察点(WatchPoint)观察点一般来观察某个表达式(变量也是一种表达式)的值是否有变化了,如果有变化,马上停住程序。我们有下面的几种方法来设置观察点:watch为表达式(变量)expr设置一个观察点。一量表达式值有变化时,马上停住程序。rwatch当表达式(变量)expr被读时,停住程序。awatch当表达式(变量)的值被读或被写时,停住程序。infowatchpoints列出当前所设置了的所有观察点。三、设置捕捉点(CatchPoint)你可设置
4、捕捉点来补捉程序运行时的一些事件。如:载入共享库(动态链接库)或是C++的异常。设置捕捉点的格式为:catch当event发生时,停住程序。event可以是下面的内容:1、throw一个C++抛出的异常。(throw为关键字)2、catch一个C++捕捉到的异常。(catch为关键字)3、exec调用系统调用exec时。(exec为关键字,目前此功能只在HP-UX下有用)4、fork调用系统调用fork时。(fork为关键字,目前此功能只在HP-UX下有用)5、vfork调用系统调用vfork
5、时。(vfork为关键字,目前此功能只在HP-UX下有用)6、load或load载入共享库(动态链接库)时。(load为关键字,目前此功能只在HP-UX下有用)7、unload或unload卸载共享库(动态链接库)时。(unload为关键字,目前此功能只在HP-UX下有用)tcatch只设置一次捕捉点,当程序停住以后,应点被自动删除。四、维护停止点上面说了如何设置程序的停止点,GDB中的停止点也就是上述的三类。在GDB中,如果你觉得已定义好的停止点没有用了,
6、你可以使用delete、clear、disable、enable这几个命令来进行维护。clear清除所有的已定义的停止点。clearclear清除所有设置在函数上的停止点。clearclear清除所有设置在指定行上的停止点。delete[breakpoints][range...]删除指定的断点,breakpoints为断点号。如果不指定断点号,则表示删除所有的断点。range表示断点号的范围(如
7、:3-7)。其简写命令为d。比删除更好的一种方法是disable停止点,disable了的停止点,GDB不会删除,当你还需要时,enable即可,就好像回收站一样。disable[breakpoints][range...]disable所指定的停止点,breakpoints为停止点号。如果什么都不指定,表示disable所有的停止点。简写命令是dis.enable[breakpoints][range...]enable所指定的停止点,breakpoints为停止点号。enable[breakpoints
8、]oncerange...enable所指定的停止点一次,当程序停止后,该停止点马上被GDB自动disable。enable[breakpoints]deleterange...enable所指定的停止点一次,当程序停止后,该停止点马上被GDB自动删除。五、停止条件维护前面在说到设置断点时,我们提到过可以设置一个条件,当条件成立时,程序自动停止,这是一个非常强大的功能,这里,我想专门说说这个条件的相关维护命令。一
此文档下载收益归作者所有