日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

unix下sdb命令詳解( 二 )


這里1111為待調(diào)試進(jìn)程的進(jìn)程號,用戶可以用PS命令得到 。系統(tǒng)在/proc目錄下用文件的形式保存了每一個活動進(jìn)程的信息,而文件名正好就是相應(yīng)的進(jìn)程號 。
指定的進(jìn)程將在執(zhí)行時遇到第一個系統(tǒng)調(diào)用或調(diào)用sdb后收到某個軟中斷信號時暫停其運行,我們就可以在sdb中檢查變量的值、設(shè)置斷點、恢復(fù)執(zhí)行,等等 。在退出sdb時,控制又返回程序,執(zhí)行進(jìn)程又從其原停止的地方繼續(xù)執(zhí)行 。
第四種情況,一般情況下當(dāng)被調(diào)試的活動進(jìn)程在收到某個軟中斷信號時sdb會停止該進(jìn)程 。為了防止這一點,可以使用-s 選項 。例如:
$ sdb -s 14 myprog
將告訴sdb不要因為軟中斷信號14(鬧鐘報警信號)而使進(jìn)程的執(zhí)行停止 。此時該信號被傳給相應(yīng)進(jìn)程 。在程序接收并處理多個軟中斷信號的情況下,可以使用多個-s選項 。
在sdb命令行中還有其他一些選項,對此我們不再一一列舉,讀者可以參考命令幫助 。
在使用上述方法之一進(jìn)入sdb之后,便可以進(jìn)行在前一節(jié)中提到的各種操作,如顯示或設(shè)置變量值、函數(shù)調(diào)用關(guān)系、控制語句的執(zhí)行等 。下一節(jié)我們將詳細(xì)討論完成這些操作的方法 。
【unix下sdb命令詳解】UNIX系統(tǒng)開發(fā)-sdb命令使用:程序執(zhí)行控制
我們說程序調(diào)試的主要目的是觀察變量的變化情況 。但如果程序就一直不停地運行直至它終止或出錯時才停下來的話,將沒有機(jī)會去觀察任何變量 。因此,如何有效地控制程序中各語句的執(zhí)行,使之在適當(dāng)?shù)臅r候暫停下來,待調(diào)試人員在顯示或設(shè)置了某些存儲單元的值之后再從停下的地方繼續(xù)執(zhí)行下去,是調(diào)試程序應(yīng)具有的一項基本功能 。在這一節(jié)中我們就來具體介紹如何控制程序的運行 。
對程序執(zhí)行控制的第一個問題是設(shè)置斷點 。一個斷點實際上就是程序中某行語句 。當(dāng)程序執(zhí)行到這條語句時控制會重復(fù)返回到sdb,由此提供給用戶進(jìn)行其他操作,如顯示變量值的機(jī)會 。
1.斷點的設(shè)置和刪除
在sdb中設(shè)置斷點的方法比較多 。但基本是b命令的變種 。例如,我們可以使用如下語句在main()函數(shù)的第一個可執(zhí)行行(非變量定義這類語句)設(shè)置一個斷點:
* main:b
也可以直接用行號來設(shè)置斷點 。例如,在myprog.c中,第10行是main()函數(shù)中的第一個可執(zhí)行語句,則使用如下命令也能達(dá)到同樣的效果:
* 10b
注意這是在myprog.c為當(dāng)前文件的情況下進(jìn)行的 。
如果直接輸入:
* b
命令,則可將當(dāng)前行設(shè)成是一個斷點 。但是若當(dāng)前行不是一個可執(zhí)行語句,那么sdb將把當(dāng)前行之后的第一個可執(zhí)行語句處設(shè)置一個斷點 。
在設(shè)置完斷點之后,為了解程序中設(shè)置有哪些斷點,可以使用B命令:
* B
0x80483f0 myprog.c:10 main 0x8
0x80483f7 myprog.c:11 main 0xf
0x8048407 myprog.c:12 main 0xlf
0x8048440 myprog.c:9 TestInput
0x8048447 myprog.c:10 TestInput0x7
0x804482 myprog.c:13 TestInput0x42
在設(shè)置完斷點之后要將其刪除,可以使用d命令 。如:
* main:d
sdb將把在main()函數(shù)中設(shè)置的第一個可執(zhí)行行上的斷點刪除 。如果直接使用d命令,sdb將逐個列出所有斷點并詢問用戶是否刪除之 ?;卮饄斷點將被刪除 。使用D命令則可刪除程序中設(shè)置的所有斷點 。
2.sdb中啟動程序的運行
在設(shè)置好所需的斷點之后我們就可以重新啟動程序的運行了 。這可以使用r命令 。如:
* r 111 2
BREAKPOINT process 554 function main() in myprog.c
10: for(i=1;i*
sdb將在main()函數(shù)中設(shè)置第一個斷點處停下來并顯示該行的語句 。r后面給出的是傳給可執(zhí)行程序myprog的兩個參數(shù) 。因此上述命令同在shell提示符下輸入:
$ myrprog 111 2
是相同的 。不同的只是在sdb中程序的執(zhí)行會在斷點處停下來 。

推薦閱讀