⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 00000016.htm

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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -