今天仔细看了一下gdb的介绍,发现它的调试功能实在是太强大了。VC++在它面前必将羞愧不已。
比较imba的功能列举如下:
1、break *address
在程序运行的内存地址处停住。
2、break ... if
condition表示条件,在条件成立时停住。比如在循环体中,可以设置break if i=100,表示当i为100时停住程序。
除了断点之外,gdb还能设置观察点和捕捉点。
观察点一般来观察某个表达式(变量也是一种表达式)的值是否有变化了,如果有变化,马上停住程序。
1、watch
为表达式(变量)expr设置一个观察点。一表达式值有变化时,马上停住程序。
2、rwatch
当表达式(变量)expr被读时,停住程序。
3、awatch
当表达式(变量)的值被读或被写时,停住程序。
gdb可以设置捕捉点来捕捉程序运行时的一些事件。如:载入共享库(动态链接库)或是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时。(vfork为关键字,目前此功能只在HP-UX下有用)
6. load 或 load 载入共享库(动态链接库)时。(load为关键字,目前此功能只在HP-UX下有用)
7. unload 或 unload 卸载共享库(动态链接库)时。(unload为关键字,目前此功能只在HP-UX下有用)
看来命令行调试工具不仅丝毫不逊色于图形化调试工具,反而在某些方面更加强大。
阅读(1801) | 评论(0) | 转发(1) |