軟體調試系列:.Net應用程式調試之設定斷點

來源:互聯網
上載者:User
 .Net應用程式調試之設定斷點

在軟體調試過程中,斷點功能至關重要,想像一下,如果沒有斷點功能,那麼當我們需要查看特定函數的執行情況時,該是多麼的困難。

.Net應用程式雖然是在執行過程中將中間代碼編譯成本地代碼,也就是說如果中間代碼未被編譯成本地代碼之前,我們無法用bp 命令來設定斷點,而我們又很難知道中間代碼何時被編譯成本地代碼,看似是一個很困難的任務,但所幸Windbg.exe 的外掛程式SOS.dll 與SOSex.dll提供了一些有用的擴充命令來協助我們完成該任務。

先來看SOS.dll提供的BPMD 命令的應用

!BPMD命令格式如下所示:

0:004> !help bpmd

-------------------------------------------------------------------------------

!BPMD [-nofuturemodule] <module name> <method name>

!BPMD -md <MethodDesc>

!BPMD -list

!BPMD -clear <pending breakpoint number>

!BPMD -clearall

 

從以上可知BPMD支援通過函數名或函數地址來設定斷言

其中值得注意有以下2點:

1:若通過!BPMD [-nofuturemodule] <module name> <method name> 來設定斷點,則需要在<method name> 包含命名空間,如下例所示

!BPMD ConsoleApplication TEST.CTest.Hello

其中TEST為命名空間

2:若斷點設定的函數若未被編譯成本地代碼,BPMD 將會在收到該斷點函數被編譯成本地代碼時設定斷點,同時如果要設定斷點的函數所在的模組未被載入,則應該加上-nofuturemodule選項以通知BPDM 模組可能沒有被載入

另外sosex.dll裡提供了一個特別有用的斷點設定函數,可以通過指定原始碼行號來設定斷點,命令格式為:

 !sosex.mbp <source file> <line number> [column number> [Options] "command" 

其中各欄位功能如下所示:

1:source file 原始碼名

2:line number 行號

3:column number 列號

4: Options 選擇性參數:

/1 設定一次斷點

/p:n 在跳過n次後設定斷點  /p:3表示在第3次執行到該處代碼時設定斷點

5:/t:n :在指定的線程斷點

6:"command"  斷點觸發時所執行的命令

 

 

 

 

2013-05-08cuiweican
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.