BBS水木清华站∶精华区

发信人: TJB (老六), 信区: Linux 
标  题: GDB (8) Part Three 
发信站: BBS 水木调试站 (Wed Jun  3 08:46:33 1998) 
 
发信人: System_[email protected] (大家一起来发呆), 信区: Linux 
标  题: gdb(八) 
发信站: 中国科大BBS站 (Tue Apr 14 00:22:55 1998) 
转信站: SwordHouse!linux.ustc.edu.cn!ustcnews!ustcbbs 
 
设置观察点 
============== 
   你可以使用观察点来停止一个程序,当某个表达式的值改变时,观察点会将程序 
停止。而不需要先指定在某个地方设置一个断点。 
   由于观察点的这个特性,使观察点的使用时开销比较大,但在捕捉错误时非常有 
用。特别是你不知道你的程序什么地方出了问题时。 
 
`watch EXPR' 
     这个命令使用EXPR作为表达式设置一个观察点。GDB将把表达式加入到程序中 
并监视程序的运行,当表达式的值被改变时GDB就使程序停止。这个也可以被用在 
SPARClite DSU提供的新的自陷工具中。当程序存取某个地址或某条指令时(这个地 
址在调试寄存器中指定),DSU将产生自陷。对于数据地址DSU支持'watch'命令,然而 
硬件断点寄存器只能存储两个断点地址,而且断点的类型必须相同。就是两个 
'rwatch'型断点,或是两个'awatch'型断点。 
 
`rwatch EXPR' 
     设置一个观察点,当EXPR被程序读时,程序被暂停。 
 
`awatch EXPR' 
     设置一个观察点,当EXPR被读出然后被写入时程序被暂停。这个命令和'awatch' 
命令合用。 
 
`info watchpoints' 
     显示所设置的观察点的列表,和'info break'命令相似。 
     *注意:*在多线程的程序中,观察点的作用很有限,GDB只能观察在一个线程中 
的表达式的值如果你确信表达式只被当前线程所存取,那么使用观察点才有效。GDB 
不能注意一个非当前线程对表达式值的改变。 
 
断点和异常 
============== 
   在一些语言中比如象GNU C++,实现了异常处理。你可以使用GDB来检查异常发生的 
原因。而且GDB还可以列出在某个点上异常处理的所有过程。 
 
`catch EXCEPTIONS' 
     你可以使用这个命令来在一个被激活的异常处理句柄中设置断点。EXCEPTIONS是 
一个你要抓住的异常。 
     你一样可以使用'info catch'命令来列出活跃的异常处理句柄。 
     现在GDB中对于异常处理由以下情况不能处理。 
   * 如果你使用一个交互的函数,当函数运行结束时,GDB将象普通情况一样把控制返 
回给你。如果在调用中发生了异常,这个函数将继续运行直到遇到一个断点,一个信号 
或是退出运行。 
   * 你不能手工产生一个异常( 即异常只能由程序运行中产生 ) 
   * 你不能手工设置一个异常处理句柄。 
   有时'catch'命令不一定是调试异常处理的最好的方法。如果你需要知道异常产生的 
确切位置,最好在异常处理句柄被调用以前设置一个断点,这样你可以检查栈的内容。 
如果你在一个异常处理句柄上设置断点,那么你就不容易知道异常发生的位置和原因。 
   要仅仅只在异常处理句柄被唤醒之前设置断点,你必须了解一些语言的实现细节。 
比如在GNU C++中异常被一个叫'__raise_exception'的库函数所调用。这个函数的原 
型是: 
 
         /* ADDR is where the exception identifier is stored. 
            ID is the exception identifier.  */ 
         void __raise_exception (void **ADDR, void *ID); 
要使GDB在栈展开之前抓住所有的句柄,你可以在函数'__raise_exception'上设置断点。 
   对于一个条件断点,由于它取决于ID的值,你可以在你程序中设置断点,当某个特 
别的异常被唤醒。当有一系列异常被唤醒时,你可以使用多重条件断点来停止你的程序。 
 
-- 
※ 来源: 中国科大BBS站 [bbs.ustc.edu.cn] 
                                按任何键继续 .. 
 
-- 
※ 来源:·BBS 水木调试站 Leeward.lib.tsinghua.edu.cn·[FROM: 202.200.37.100] 

BBS水木清华站∶精华区