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

unix下sdb命令詳解( 五 )


在用core文件進行調(diào)試時,當(dāng)前行和當(dāng)前函數(shù)分別被設(shè)成是程序出錯時所執(zhí)行的那條語句所在地行和函數(shù)(如同上面顯示出來的那樣) 。但如果在編譯時未加-g選項,顯示出來的將只有函數(shù)名和函數(shù)的地址了 。
在對活動進程進行排錯時,sdb將把當(dāng)前函數(shù)和當(dāng)前行分別設(shè)成是main()函數(shù)和main()函數(shù)的第一個可執(zhí)行的語句行 。
不論是哪種情況,sdb都將顯示出*提示符 。在此提示符之下我們可以輸入各種sdb命令,以控制程序的執(zhí)行或觀察變量的變化情況,等等 。在下面的幾個小節(jié)中我們將分別詳細討論這些問題 。
源程序的顯示和搜索
程序出錯一般來說不只是出錯的那條語句本身造成的 。事實上出現(xiàn)錯誤經(jīng)常是前面或相關(guān)的代碼執(zhí)行了不正確的操作或少了某些必要的處理 。因此調(diào)試過程中經(jīng)常要觀察一下源程序中的語句,或者在程序中搜索某個符號出現(xiàn)在什么地方 。其中字符串的搜索功能同vi基本上是相同的,而文件的顯示則同另外一個我們沒有具體討論的編輯器ed類似 。下面我們將具體介紹這些命令 。
1.源程序的顯示
在用core進入sdb之后,在*提示符后輸入w命令,該命令指示sdb顯示源程序中的當(dāng)前行為中心的前后10行的內(nèi)容并保持當(dāng)前行不變:
* w
7:int
8: TestInput(char * ValueInput)
9: {while ( * ValueInput)
10: if (! isdigit( * ValueInput)) return (! TESTOK);
11: else ValueInput;
12: return ((100/atoi(ValueInput))? TESTOK:! TESTOK);
13: }
*
我們看到,在進入sdb時,當(dāng)前行是第12行,以該行為中心的10行內(nèi)容正好就是上面所顯示出來的 。其他可以顯示源程序語句的sdb命令如下:
P 顯示當(dāng)前行
l 顯示對應(yīng)于當(dāng)前指令的那條語句
Z 顯示當(dāng)前行開始的下面10條語句
Ctrl D 顯示當(dāng)前行之后(不包括當(dāng)前行)的第10條語句
n 顯示第n條語句,這里n是一個數(shù)
注意這些命令顯示出的是源程序語句還是匯編語句(后面我們將要介紹)取決于最近一次顯示出的是什么 。
2.改變當(dāng)前行
在用戶顯示語句時,當(dāng)前行也會相應(yīng)地發(fā)生變化 。例如,Z命令將使當(dāng)前行向程序尾移動9行,而Ctrl D則使當(dāng)前行向后移動10行 。
在使用數(shù)字來顯示某行語句時將使該行語句成為當(dāng)前行 。而在*提示符之后按一下回車,當(dāng)前行將下移一行 。例如,接著上面的例子,輸入:
* 8p
8: TEstInput(char * ValueInput)
* 回車
9: { while ( * ValueInput)}
*
這里8p實際上是兩條命令的組合 。它使當(dāng)前行移至源文件的第八行,然后再顯示出新的當(dāng)前行 。按回車鍵將使當(dāng)前行后移一行 。
3.改變當(dāng)前源文件
在vi中我們可以用e命令對另外某個文件進行編輯 。sdb也提供了e命令,可以用此命令來改變當(dāng)前文件,如:
* e myprog.c
current file is now myprog.c
* 8p
8: main(int argc,char * argv[])
*
我們看到,當(dāng)前文件改變之后,sdb將第一行設(shè)為是當(dāng)前行 。如果此文件的第一行是個函數(shù),那么該函數(shù)便成為當(dāng)前函數(shù) 。否則將臨時出現(xiàn)沒有當(dāng)前函數(shù)的情況 。
在上一節(jié)中,我們介紹過在命令行中可以指定源文件搜索目錄名列表(缺省情況為當(dāng)前目錄) 。如果某個文件不在此搜索目錄中,則可以用e命令將其加入:
* e Another SourceDir
這里Another SourceDir是一個目錄名 。如果要顯示該目錄下的某個文件,只需要輸入:
* e FileName.c
當(dāng)然直接使用:
* e Another SourceDir/FileName.c
也能達到同樣的效果 。
使用:
* e FunctionName
將使包含函數(shù)FunctionName的文件名成為當(dāng)前文件,而當(dāng)前函數(shù)不言而喻將成為FunctionName 。當(dāng)前行則理所當(dāng)然的是該函數(shù)的第一行 。同一程序中函數(shù)名在各模塊中的唯一性保證了這一點是能夠成功的,但如果包含指定函數(shù)的文件不在當(dāng)前搜索目錄列表中,則必須用e命令將其加入 。

推薦閱讀