UNIX系統管理:sdb命令使用-程式執行控制

來源:互聯網
上載者:User
關鍵字 UNIX系統管理 程式執行控制 命令使用

我們說程式調試的主要目的是觀察變數的變化情況。 但如果程式就一直不停地運行直至它終止或出錯時才停下來的話,將沒有機會去觀察任何變數。 因此,如何有效地控制程式中各語句的執行,使之在適當的時候暫停下來,待調試人員在顯示或設置了某些存儲單元的值之後再從停下的地方繼續執行下去,是偵錯工具應具有的一項基本功能。 在這一節中我們就來具體介紹如何控制程式的運行。

對程式執行控制的第一個問題是設置中斷點。 一個中斷點實際上就是程式中某行語句。 當程式執行到這條語句時控制會重複返回到sdb,由此提供給使用者進行其他操作,如顯示變數值的機會。

1.中斷點的設置和刪除

在sdb中設置中斷點的方法比較多。 但基本是b命令的變種。 例如,我們可以使用如下語句在main()函數的第一個可執行行(非變數定義這類語句)設置一個中斷點:

* main:b

也可以直接用行號來設置中斷點。 例如,在myprog.c中,第10行是main()函數中的第一個可執行語句,則使用如下命令也能達到同樣的效果:

* 10b

注意這是在myprog.c為當前檔的情況下進行的。

如果直接輸入:

* b

命令,則可將當前行設成是一個中斷點。 但是若當前行不是一個可執行語句,那麼sdb將把當前行之後的第一個可執行語句處設置一個中斷點。

在設置完中斷點之後,為了解程式中設置有哪些中斷點,可以使用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 TestInput+ 0x7

0x804482 myprog.c:13 TestInput+ 0x42

在設置完中斷點之後要將其刪除,可以使用d命令。 如:

* main:d

sdb將把在main()函數中設置的第一個可執行行上的中斷點刪除。 如果直接使用d命令,sdb將逐個列出所有中斷點並詢問使用者是否刪除之。 回答y中斷點將被刪除。 使用D命令則可刪除程式中設置的所有中斷點。

2.sdb中啟動程式的運行

在設置好所需的中斷點之後我們就可以重新開機程式的運行了。 這可以使用r命令。 如:

* r 111 2

BREAKPOINT process 554 function main() in myprog.c

10: for(i=1;i<argc:i++)

*

sdb將在main()函數中設置第一個中斷點處停下來並顯示該行的語句。 r後面給出的是傳給可執行程式myprog的兩個參數。 因此上述命令同在shell提示符下輸入:

$ myrprog 111 2

是相同的。 不同的只是在sdb中程式的執行會在中斷點處停下來。

如果只輸入

* r

命令,sdb使用最近一次執行偵錯工具時給它提供的參數來啟動之。 如果想不帶任何參數來重新開機程式的運行,可使用

* R

命令。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.