標籤:
閱讀源碼一個比較快的手段就是在調試器裡閱讀,這樣可以在實際運行SSCLI的過程中,通過堆疊追蹤的方式查看完整的程式執行路徑。
當在SSCLI環境裡執行一個託管程式的時候,堆棧上通常有託管和Unmanaged 程式碼同時在執行。因此在SSCLI裡也支援下面幾種調試情境:
- 調試託管程式:在SSCLI裡內建了一個託管偵錯工具,cordbg.exe。跟調試普通.net程式不同,目前還無法在Visual Studio裡調試SSCLI環境下的託管程式,在後面有時間的時候,我們會看一下如何在Visual Studio裡添加調試SSCLI託管程式的支援。
- 調試非託管程式:即調試SSCLI虛擬機器本身的Unmanaged 程式碼,可以使用Visual Studio、WinDbg等普通Windows調試工具進行調試。在非Windows平台下,也可以用gdb這些工具進行調試。
- 託管非託管程式混合調試:可以Visual Studio和Windbg這些Windows調試工具下通過載入sos調試外掛程式來實現混合調試的功能。另外,sscli也提供了sos調試外掛程式的源碼。
SSCLI裡的符號檔案
在SSCLI裡,會產生兩種符號檔案,一種是編譯非託管程式產生的.pdb檔案,一種是編譯託管程式產生的.ildb檔案。關於符號檔案的作用,請參看我之前的文章:Visual Studio調試之符號檔案。
Windows調試工具調試都支援.pdb檔案,而cordbg.exe可以識別.ildb格式,而sos外掛程式不需要任何符號檔案即可調試。
SSCLI提供了工具ildbconv程式可以在.pdb檔案和.ildb檔案格式之間相互轉換,因此如果要在Visual Studio裡調試SSCLI裡編譯的託管程式,可以用這個工具將對應的.ildb檔案轉換成Visual Studio支援的pdb格式,並在.NET環境下運行託管程式即可調試。ildbconv命令的格式如下:
ildbconv [選項] 符號檔案路徑
其中ildbconv支援下面這些選項:
- /toildb:將.pdb檔案轉換成.ildb格式;
- /topdb:將.ildb檔案轉換成.pdb格式。
SSCLI也提供了ildbconv程式的源碼,其路徑位於:\tools\ildbconv\ildbconv.cpp
.NET架構源碼解讀之SSCLI的調試支援