我們說程序調試的主要目的是觀察變量的變化情況 。但如果程序就一直不停地運行直至它終止或出錯時才停下來的話,將沒有機會去觀察任何變量 。因此,如何有效地控制程序中各語句的執(zhí)行,使之在適當?shù)臅r候暫停下來,待調試人員在顯示或設置了某些存儲單元的值之后再從停下的地方繼續(xù)執(zhí)行下去,是調試程序應具有的一項基本功能 。在這一節(jié)中我們就來具體介紹如何控制程序的運行 。
對程序執(zhí)行控制的第一個問題是設置斷點 。一個斷點實際上就是程序中某行語句 。當程序執(zhí)行到這條語句時控制會重復返回到sdb,由此提供給用戶進行其他操作,如顯示變量值的機會 。
1.斷點的設置和刪除
在sdb中設置斷點的方法比較多 。但基本是b命令的變種 。例如,我們可以使用如下語句在main()函數(shù)的第一個可執(zhí)行(非變量定義這類語句)設置一個斷點:* main:b
也可以直接用行號來設置斷點 。例如,在myprog.c中,第10行是main()函數(shù)中的第一個可執(zhí)行語句,則使用如下命令也能達到同樣的效果:* 10b
注意這是在myprog.c為當前文件的情況下進行的 。如果直接輸入:* b 命令,則可將當前行設成是一個斷點 。但是若當前行不是一個可執(zhí)行語句,那么sdb將把當前行之后的第一個可執(zhí)行語句處設置一個斷點 。在設置完斷點之后,為了解程序中設置有哪些斷點,可以使用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
在設置完斷點之后要將其刪除,可以使用d命令 。如:* main:d
sdb將把在main()函數(shù)中設置的第一個可執(zhí)行行上的斷點刪除 。如果直接使用d命令,sdb將逐個列出所有斷點并詢問用戶是否刪除之 ?;卮饄斷點將被刪除 。使用D命令則可刪除程序中設置的所有斷點 。
2.sdb中啟動程序的運行
在設置好所需的斷點之后我們就可以重新啟動程序的運行了 。這可以使用r命令 。如:* r 111 2
BREAKPOINT process 554 function main() in myprog.c
10: for(i=1;i *
sdb將在main()函數(shù)中設置第一個斷點處停下來并顯示該行的語句 。r后面給出的是傳給可執(zhí)行程序myprog的兩個參數(shù) 。因此上述命令同在shell提示符下輸入: $ myrprog 111 2 是相同的 。不同的只是在sdb中程序的執(zhí)行會在斷點處停下來 。
如果只輸入 * r 命令,sdb使用最近一次執(zhí)行調試程序時給它提供的參數(shù)來啟動之 。如果想不帶任何參數(shù)來重新啟動程序的運行,可使用 * R 命令 。
3.控制程序的單步或者連續(xù)執(zhí)行
在用r(R)命令啟動程序的運行之后,sdb將在第一個斷點處暫停程序的運行 。此時斷點行成為當前行,但并未被執(zhí)行 。此時我們可以在sdb的星號(*)提示符下輸入前面已介紹過的或后面將要介紹的各種命令 。當然最重要的是顯示那些關鍵變量的值,以了解程序的運行情況 。在這之后便可以繼續(xù)程序的執(zhí)行 。繼續(xù)執(zhí)行有兩種方式 。一種是單步方式,即逐條語句執(zhí)行 。這可以使用S命令完成:
* s
STEPPED process 584 function main() in myprog.c
14: printf("The %dth value "%s" tis BAD!n",i,argv[i]);
*
sdb在執(zhí)行完當前語句之后,將當前行后移一行并顯示出其代碼 。對于用戶自定義的函數(shù)調用,S命令并不將其當成是一條語句,此時它將指示sdb進入該函數(shù)(使之成為當前函數(shù)) 。如我們可以接著上面輸入下列命令:
* s
STEPPED process 584 function main() in myprog.c
11: if(TestInput(argv[i])== TESTOK)
* s
BREAKPOINT process 594 function main() in myprog.c
推薦閱讀
- 輕松制作SCO UNIX系統(tǒng)備份
- SCO UNIX 5 的幾個新特點
- 機器啟動的認識 SCO UNIX學習寶典
- 創(chuàng)建一個包含vi的SCO5.05系統(tǒng)應急引導盤
- SCO Unix 故障排除四例
- 應急啟動盤與安全管理
- SCO UNIX基礎講座--第二講shell環(huán)境
- SCO UNIX作業(yè)調度
- 電腦如何重裝系統(tǒng) u盤
- Informix數(shù)據(jù)庫軟件開發(fā)方法與工具
