最新免费av在线观看,亚洲综合一区成人在线,中文字幕精品无码一区二区三区,中文人妻av高清一区二区,中文字幕乱偷无码av先锋

登錄 免費(fèi)注冊(cè) 首頁(yè) | 行業(yè)黑名單 | 幫助
維庫(kù)電子市場(chǎng)網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

轉(zhuǎn)載:GDB調(diào)試器使用手冊(cè)(八)

作者:宇宙飛船 欄目:驅(qū)動(dòng)編程
轉(zhuǎn)載:GDB調(diào)試器使用手冊(cè)(八)
<< GDB調(diào)試器使用手冊(cè)(八)


     設(shè)置斷點(diǎn)
=============
使用\"break\"或簡(jiǎn)寫成\"b\"來(lái)設(shè)置斷點(diǎn)。gdb使用環(huán)境變量$bpnum來(lái)記錄你最新設(shè)置的
斷點(diǎn)。
你有不少方法來(lái)設(shè)置斷點(diǎn)。


`break FUNCTION\"
此命令用來(lái)在某個(gè)函數(shù)上設(shè)置斷點(diǎn)。當(dāng)你使用允許函數(shù)重載的語(yǔ)言比如C++時(shí),有可
能同時(shí)在幾個(gè)重載的函數(shù)上設(shè)置了斷點(diǎn)。

`break +OFFSET\"
`break -OFFSET\"
在當(dāng)前程序運(yùn)行到的前幾行或后幾行設(shè)置斷點(diǎn)。OFFSET為行號(hào)。

`break LINENUM\"
在行號(hào)為L(zhǎng)INENUM的行上設(shè)置斷點(diǎn)。程序在運(yùn)行到此行之前停止。

`break FILENAME:LINENUM\"
在文件名為FILENAME的原文件的第LINENUM行設(shè)置斷點(diǎn)。

`break FILENAME:FUNCTION\"
在文件名為FILENAME的原文件的名為FUNCTION的函數(shù)上設(shè)置斷點(diǎn)。
當(dāng)你的多個(gè)文件中可能含有相同的函數(shù)名時(shí)必須給出文件名。

`break *ADDRESS\"
在地址ADDRESS上設(shè)置斷點(diǎn),這個(gè)命令允許你在沒有調(diào)試信息的程
序中設(shè)置斷點(diǎn)。
`break\"
當(dāng)\"break\"命令不包含任何參數(shù)時(shí),\"break\"命令在當(dāng)前執(zhí)行到的程
序運(yùn)行棧中的下一條指令上設(shè)置一個(gè)斷點(diǎn)。除了棧底以外,這個(gè)命令使
程序在一旦從當(dāng)前函數(shù)返回時(shí)停止。相似的命令是\"finish\",但\"finish\"
并不設(shè)置斷點(diǎn)。這一點(diǎn)在循環(huán)語(yǔ)句中很有用。
gdb在恢復(fù)執(zhí)行時(shí),至少執(zhí)行一條指令。

`break ... if COND\"
這個(gè)命令設(shè)置一個(gè)條件斷點(diǎn),條件由COND指定;在gdb每次執(zhí)行到此
斷點(diǎn)時(shí)COND都被計(jì)算當(dāng)COND的值為非零時(shí),程序在斷點(diǎn)處停止。這意味著
COND的值為真時(shí)程序停止。...可以為下面所說(shuō)的一些參量。

`tbreak ARGS\"
設(shè)置斷點(diǎn)為只有效一次。ARGS的使用同\"break\"中的參量的使用。

`hbreak ARGS\"
設(shè)置一個(gè)由硬件支持的斷點(diǎn)。ARGS同\"break\"命令,設(shè)置方法也和
\"break\"相同。但這種斷點(diǎn)需要由硬件支持,所以不是所有的系統(tǒng)上這個(gè)
命令都有效。這個(gè)命令的主要目的是用于對(duì)EPROM/ROM程序的調(diào)試。因?yàn)?
這條命令可以在不改變代碼的情況下設(shè)置斷點(diǎn)。這可以同SPARCLite DSU
一起使用。當(dāng)程序訪問某些變量和代碼時(shí),DSU將設(shè)置“陷井”。注意:
你只能一次使用一個(gè)斷點(diǎn),在新設(shè)置斷點(diǎn)時(shí),先刪除原斷點(diǎn)。
`thbreak ARGS\"
設(shè)置只有一次作用的硬件支持?jǐn)帱c(diǎn)。ARGS用法同\"hbreak\"命令。這個(gè)命令
和\"tbreak\"命令相似,它所設(shè)置的斷點(diǎn)只起一次作用,然后就被自動(dòng)的刪除。這
個(gè)命令所設(shè)置的斷點(diǎn)需要有硬件支持。

`rbreak REGEX\"
在所有滿足表達(dá)式REGEX的函數(shù)上設(shè)置斷點(diǎn)。這個(gè)命令在所有相匹配的函數(shù)
上設(shè)置無(wú)條件斷點(diǎn),當(dāng)這個(gè)命令完成時(shí)顯示所有被設(shè)置的斷點(diǎn)信息。這個(gè)命令設(shè)
置的斷點(diǎn)和\"break\"命令設(shè)置的沒有什么不同。這樣你可以象操作一般的斷點(diǎn)一
樣對(duì)這個(gè)命令設(shè)置的斷點(diǎn)進(jìn)行刪除,使能,使不能等操作。當(dāng)調(diào)試C++程序時(shí)這
個(gè)命令在重載函數(shù)上設(shè)置斷點(diǎn)時(shí)非常有用。

`info breakpoints [N]\"
`info break [N]\"
`info watchpoints [N]\"
顯示所有的斷點(diǎn)和觀察點(diǎn)的設(shè)置表,有下列一些列

*Breakpoint Numbers*----斷點(diǎn)號(hào)
*Type*----斷點(diǎn)類型(斷點(diǎn)或是觀察點(diǎn))
*Disposition*---顯示斷點(diǎn)的狀態(tài)。

*Enabled or Disabled*---使能或不使能。\"y\"表示使能,\"n\"表示不使能。

*Address*----地址,斷點(diǎn)在你程序中的地址(內(nèi)存地址)
*What*---地址,斷點(diǎn)在你程序中的行號(hào)。
如果斷點(diǎn)是條件斷點(diǎn),此命令還顯示斷點(diǎn)所需要的條件。
帶參數(shù)N的\"info break\"命令只顯示由N指定的斷點(diǎn)的信息。
此命令還顯示斷點(diǎn)的運(yùn)行信息(被執(zhí)行過幾次),這個(gè)功能在使用\"ignore\"
命令時(shí)很有用。你可以\"ignore\"一個(gè)斷點(diǎn)許多次。使用這個(gè)命令可以查看斷點(diǎn)
被執(zhí)行了多少次。這樣可以更快的找到錯(cuò)誤。
gdb允許你在一個(gè)地方設(shè)置多個(gè)斷點(diǎn)。但設(shè)置相同的斷點(diǎn)無(wú)疑是弱智的。不過
你可以使用條件斷點(diǎn),這樣就非常有用。
gdb有時(shí)會(huì)自動(dòng)在你的程序中加入斷點(diǎn)。這主要是gdb自己的需要。比如為了正
確的處理C語(yǔ)言中的\"longjmp\"。這些內(nèi)部斷點(diǎn)都是負(fù)值,以\"-1\"開始。\"info
breakpoints\"不會(huì)顯示它們。
不過你可以使用命令’maint info breakpoints\"來(lái)查看這些斷點(diǎn)。

`maint info breakpoints\"
使用格式和\"info breakpoints\"相同,顯示所有的斷點(diǎn),無(wú)論是你設(shè)置的還是
gdb自動(dòng)設(shè)置的。
以下列的含義:

`breakpoint\"
斷點(diǎn),普通斷點(diǎn)。
`watchpoint\"
普通觀察點(diǎn)。

`longjmp\"
內(nèi)部斷點(diǎn),用于處理\"longjmp\"調(diào)用。

`longjmp resume\"
內(nèi)部斷點(diǎn),設(shè)置在\"longjmp\"調(diào)用的目標(biāo)上。

`until\"
\"until\"命令所使用的內(nèi)部斷點(diǎn)。

`finish\"
\"finish\"命令所使用的內(nèi)部斷點(diǎn)。
設(shè)置觀察點(diǎn)
==============
你可以使用觀察點(diǎn)來(lái)停止一個(gè)程序,當(dāng)某個(gè)表達(dá)式的值改變時(shí),觀察點(diǎn)會(huì)將程序
停止。而不需要先指定在某個(gè)地方設(shè)置一個(gè)斷點(diǎn)。
由于觀察點(diǎn)的這個(gè)特性,使觀察點(diǎn)的使用時(shí)開銷比較大,但在捕捉錯(cuò)誤時(shí)非常有
用。特別是你不知道你的程序什么地方出了問題時(shí)。

`watch EXPR\"
這個(gè)命令使用EXPR作為表達(dá)式設(shè)置一個(gè)觀察點(diǎn)。GDB將把表達(dá)式加入到程序中
并監(jiān)視程序的運(yùn)行,當(dāng)表達(dá)式的值被改變時(shí)GDB就使程序停止。這個(gè)也可以被用在
SPARClite DSU提供的新的自陷工具中。當(dāng)程序存取某個(gè)地址或某條指令時(shí)(這個(gè)地
址在調(diào)試寄存器中指定),DSU將產(chǎn)生自陷。對(duì)于數(shù)據(jù)地址DSU支持\"watch\"命令,然而
硬件斷點(diǎn)寄存器只能存儲(chǔ)兩個(gè)斷點(diǎn)地址,而且斷點(diǎn)的類型必須相同。就是兩個(gè)
\"rwatch\"型斷點(diǎn),或是兩個(gè)\"awatch\"型斷點(diǎn)。

`rwatch EXPR\"
設(shè)置一個(gè)觀察點(diǎn),當(dāng)EXPR被程序讀時(shí),程序被暫停。

`awatch EXPR\"
設(shè)置一個(gè)觀察點(diǎn),當(dāng)EXPR被讀出然后被寫入時(shí)程序被暫停。這個(gè)命令和\"awatch\"
命令合用。

`info watchpoints\"
顯示所設(shè)置的觀察點(diǎn)的列表,和\"info break\"命令相似。
*注意:*在多線程的程序中,觀察點(diǎn)的作用很有限,GDB只能觀察在一個(gè)線程中
的表達(dá)式的值如果你確信表達(dá)式只被當(dāng)前線程所存取,那么使用觀察點(diǎn)才有效。GDB
不能注意一個(gè)非當(dāng)前線程對(duì)表達(dá)式值的改變。

斷點(diǎn)和異常
==============
在一些語(yǔ)言中比如象GNU C++,實(shí)現(xiàn)了異常處理。你可以使用GDB來(lái)檢查異常發(fā)生的
原因。而且GDB還可以列出在某個(gè)點(diǎn)上異常處理的所有過程。

`catch EXCEPTIONS\"
你可以使用這個(gè)命令來(lái)在一個(gè)被激活的異常處理句柄中設(shè)置斷點(diǎn)。EXCEPTIONS是
一個(gè)你要抓住的異常。
你一樣可以使用\"info catch\"命令來(lái)列出活躍的異常處理句柄。
現(xiàn)在GDB中對(duì)于異常處理由以下情況不能處理。
* 如果你使用一個(gè)交互的函數(shù),當(dāng)函數(shù)運(yùn)行結(jié)束時(shí),GDB將象普通情況一樣把控制返
回給你。如果在調(diào)用中發(fā)生了異常,這個(gè)函數(shù)將繼續(xù)運(yùn)行直到遇到一個(gè)斷點(diǎn),一個(gè)信號(hào)
或是退出運(yùn)行。
* 你不能手工產(chǎn)生一個(gè)異常( 即異常只能由程序運(yùn)行中產(chǎn)生 )
* 你不能手工設(shè)置一個(gè)異常處理句柄。
有時(shí)\"catch\"命令不一定是調(diào)試異常處理的最好的方法。如果你需要知道異常產(chǎn)生的
確切位置,最好在異常處理句柄被調(diào)用以前設(shè)置一個(gè)斷點(diǎn),這樣你可以檢查棧的內(nèi)容。
如果你在一個(gè)異常處理句柄上設(shè)置斷點(diǎn),那么你就不容易知道異常發(fā)生的位置和原因。
要僅僅只在異常處理句柄被喚醒之前設(shè)置斷點(diǎn),你必須了解一些語(yǔ)言的實(shí)現(xiàn)細(xì)節(jié)。
比如在GNU C++中異常被一個(gè)叫\(zhòng)"__raise_exception\"的庫(kù)函數(shù)所調(diào)用。這個(gè)函數(shù)的原
型是:

/* ADDR is where the exception identifier is stored.
ID is the exception identifier. */
void __raise_exception (void **ADDR, void *ID);
要使GDB在棧展開之前抓住所有的句柄,你可以在函數(shù)\"__raise_exception\"上設(shè)置斷點(diǎn)。
對(duì)于一個(gè)條件斷點(diǎn),由于它取決于ID的值,你可以在你程序中設(shè)置斷點(diǎn),當(dāng)某個(gè)特
別的異常被喚醒。當(dāng)有一系列異常被喚醒時(shí),你可以使用多重條件斷點(diǎn)來(lái)停止你的程序。

發(fā)布人:netbull 來(lái)自:中國(guó)LINUX開發(fā)聯(lián)盟 

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
轉(zhuǎn)載:GDB調(diào)試器使用手冊(cè)(七)
轉(zhuǎn)載:GDB調(diào)試器使用手冊(cè)(六-2)
轉(zhuǎn)載:GDB調(diào)試器使用手冊(cè)(六-1)
轉(zhuǎn)載:GDB調(diào)試器使用手冊(cè)(五)
轉(zhuǎn)載:GDB調(diào)試器使用手冊(cè)(四)
免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 www.udpf.com.cn 浙ICP證030469號(hào)