簡體   English   中英

與崩潰轉儲相比,WinDbg在附加到進程時顯示不同的調用堆棧

[英]WinDbg showing different call stacks when attached to process when compared to crash dump

我正在分析在使用本機庫和托管代碼時發生的死鎖。 我正在使用WinDbg來調試問題,目的是保存轉儲,以便供應商可以在他們的場所觀察問題。

當附加到有問題的進程時,我在任何調用堆棧之前看到以下消息:

警告:堆棧展開信息不可用。 以下框架可能是錯誤的。

直接連接到流程時,框架看起來確實正確。 但是,當我轉儲此文件,然后在另一台機器上打開WinDbg中的轉儲時,其中一個堆棧幀不同(上面的錯誤也顯示出來。)這原本讓供應商難倒,因為代碼路徑似乎不可能。

我使用以下轉儲:

.dump /ma filename.dmp

什么會導致這種差異,我有什么辦法可以可靠地分析轉儲文件的調用堆棧? 可能還有其他任何我應該注意的誤傳數據嗎?

這聽起來像你可能有不匹配的pdbs。 你試過過!chksym!itoldyouso命令嗎? 例如,請參閱Bugslayer文章

另一件要嘗試的是!sym noisy ,它應該顯示正在加載哪些pdb文件。

另請參閱MSDN博客

警告告訴您調試器無法將堆棧上的一個或多個地址與現有模塊信息相關聯。 由於托管代碼是由CLR動態編譯的,因此代碼沒有相應的模塊,因此沒有警告。

SOS命令!clrstack具有來自CLR的必要信息以顯示有意義的堆棧(或至少沒有警告)。 如果使用任何本機堆棧轉儲命令,您將看到托管代碼的此警告。

即將出版的書籍Advanced .NET Debugging還有其他詳細信息。 http://advanceddotnetdebugging.com/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM