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

unix下sdb命令詳解( 三 )


如果只輸入
* r
命令,sdb使用最近一次執(zhí)行調(diào)試程序時給它提供的參數(shù)來啟動之 。如果想不帶任何參數(shù)來重新啟動程序的運行,可使用
* R
命令 。
3.控制程序的單步或者連續(xù)執(zhí)行
在用r(R)命令啟動程序的運行之后,sdb將在第一個斷點處暫停程序的運行 。此時斷點行成為當前行,但并未被執(zhí)行 。此時我們可以在sdb的星號(*)提示符下輸入前面已介紹過的或后面將要介紹的各種命令 。當然最重要的是顯示那些關(guān)鍵變量的值,以了解程序的運行情況 。在這之后便可以繼續(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ù)調(diào)用,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
11: if(TestInput(argv[i])==TESTOK)
* s
BREAKPOINT process 584 function TestInput() in myfunc.c
9: {while (* ValueInput)}
* s
也能讓sdb將用戶自定義的函數(shù)調(diào)用,當成是一條普通語句而不進入此函數(shù)的定義 。此時可以在那些包含有用戶自定義函數(shù)調(diào)用的行,使用S命令以執(zhí)行之 。
s 和S命令都可以接收一個指明待執(zhí)行的語句數(shù)目的參數(shù) 。例如:
* s 2
使sdb執(zhí)行當前行及其下那行語句,然后當前行之下的第2行將成為新的當前行 。注意當使用s 或S時,如果sdb遇上一個未加-g選項編譯的用戶自定義函數(shù),那么執(zhí)行將繼續(xù)直到一個帶-g 選項編譯的函數(shù)為止 。
控制程序執(zhí)行的第二種是使用c或C命令 。一個最簡單的c命令將使sdb從當前行把程序執(zhí)行到下一個斷點處 。在c命令中還可以臨時設(shè)置“斷點” 。例如:
* 8c
將使sdb在第8行上設(shè)置一個斷點并使程序從當前行執(zhí)行至該斷點處后停下來,然后將此斷點自動刪除并等待用戶輸入其他命令 。
在c命令中還可以指定在繼續(xù)執(zhí)行時后面第幾個斷點處停下來 。例如:
* c 2
將使sdb從當前行開始執(zhí)行,直到當前行之后的第2個斷點為止 。一般的:
* c
命令實際上相當于:
* c 1
C命令的作用及用法同c基本上是相同的 。只不過此時sdb將進程收到的終止信號傳給該進程進行處理 。這對于調(diào)試有軟中斷處理的進程是很有用的 。但sdb并不是將進程所收到的所有信號都傳送給進程進行處理 。要傳遞的信號可在sdb的命令行中用-s選項指定 。
我們可以用g命令來告訴sdb在給定的行開始繼續(xù)程序的執(zhí)行:
* 6g
此命令使sdb在當前文件的第6行處恢復(fù)執(zhí)行 。而:
* 6g2
使sdb在當前文件的第6行恢復(fù)執(zhí)行并跳過兩個斷點 。但在使用g命令時必須小心 。如果此命令跳過了那些必須得初始化語句,或者進程的執(zhí)行被恢復(fù)到某個并不終止進程的函數(shù)中,此時都將會是程序的執(zhí)行出現(xiàn)人為的差錯 。一般而言,除非能夠確信所跳過的代碼段是不正確的代碼,不要輕易使用g命令 。
4 關(guān)聯(lián)命令
我們可以告訴sdb在使用到某種情況下暫停下來,完成某些操作之后繼續(xù)執(zhí)行 。例如:
* 7b t; i/;c
將使得sdb在當前文件的第7行設(shè)置一個斷點,然后每當遇到該斷點時都顯示函數(shù)調(diào)用棧(t)、變量i的值(i/),并繼續(xù)程序的執(zhí)行(c) 。
上述命令的一種變化形式是a(Announce命令) 。例如:
* FunctionName:a
將使得sdb在程序執(zhí)行過程中每當函數(shù)FunctionName被調(diào)用時即顯示其函數(shù)名和參數(shù)值 。而命令:

推薦閱讀