?? unix系統(tǒng)開(kāi)發(fā)-sdb命令使用:源程序的顯示和搜索.txt
字號(hào):
UNIX系統(tǒng)開(kāi)發(fā)-sdb命令使用:源程序的顯示和搜索
sdb命令的使用
同我們前面介紹過(guò)的mail,ftp一類工具類似,sdb也是一個(gè)命令解釋程序。也就是說(shuō),用戶在sdb提示符(一個(gè)星號(hào)*)下輸入sdb能夠識(shí)別的命令,sdb將根據(jù)被調(diào)試的程序的具體情況給出響應(yīng)。
例如,在運(yùn)行myprog出錯(cuò),生成core文件之后進(jìn)入sdb時(shí),sdb將給出如下的響應(yīng):
$ sdb myprog
12: return ((100/atoi(ValueInput))? TESTOK:! TESTOK);
*
sdb給出來(lái)的實(shí)際上是程序出錯(cuò)所在的函數(shù),在源程序文件中的行號(hào)以及出錯(cuò)那一行的語(yǔ)句。
在sdb的使用中要注意三個(gè)"當(dāng)前"概念:
(1)當(dāng)前文件 即當(dāng)前將要被執(zhí)行的語(yǔ)句所在的那個(gè)源程序文件
(2)當(dāng)前函數(shù) 即當(dāng)前將要被執(zhí)行的語(yǔ)句所在的那個(gè)函數(shù)
(3)當(dāng)前行 這個(gè)概念只有在編譯時(shí)加入-g選項(xiàng)才會(huì)有,它指的是將要被執(zhí)行的那條語(yǔ)句。與當(dāng)前行相應(yīng),有一個(gè)行號(hào)的概念。它指的是每條語(yǔ)句在程序中位于第幾行。注意行號(hào)是從文件頭開(kāi)始計(jì)算的,第一行的行號(hào)為1,空白行和注釋也包括在內(nèi)。
在用core文件進(jìn)行調(diào)試時(shí),當(dāng)前行和當(dāng)前函數(shù)分別被設(shè)成是程序出錯(cuò)時(shí)所執(zhí)行的那條語(yǔ)句所在地行和函數(shù)(如同上面顯示出來(lái)的那樣)。但如果在編譯時(shí)未加-g選項(xiàng),顯示出來(lái)的將只有函數(shù)名和函數(shù)的地址了。
在對(duì)活動(dòng)進(jìn)程進(jìn)行排錯(cuò)時(shí),sdb將把當(dāng)前函數(shù)和當(dāng)前行分別設(shè)成是main()函數(shù)和main()函數(shù)的第一個(gè)可執(zhí)行的語(yǔ)句行。
不論是哪種情況,sdb都將顯示出*提示符。在此提示符之下我們可以輸入各種sdb命令,以控制程序的執(zhí)行或觀察變量的變化情況,等等。在下面的幾個(gè)小節(jié)中我們將分別詳細(xì)討論這些問(wèn)題。
源程序的顯示和搜索
程序出錯(cuò)一般來(lái)說(shuō)不只是出錯(cuò)的那條語(yǔ)句本身造成的。事實(shí)上出現(xiàn)錯(cuò)誤經(jīng)常是前面或相關(guān)的代碼執(zhí)行了不正確的操作或少了某些必要的處理。因此調(diào)試過(guò)程中經(jīng)常要觀察一下源程序中的語(yǔ)句,或者在程序中搜索某個(gè)符號(hào)出現(xiàn)在什么地方。其中字符串的搜索功能同vi基本上是相同的,而文件的顯示則同另外一個(gè)我們沒(méi)有具體討論的編輯器ed類似。下面我們將具體介紹這些命令。
1.源程序的顯示
在用core進(jìn)入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
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -