2011-11-09 43 views
3

我正在使用windbg和psscor2.dll擴展名來調試.NET 3.5 CLR轉儲。 代碼中的例外發生是這樣的:使用windbg .NET轉儲分析

try 
{ 
... 
} 
catch 
{ 
... 
} 
catch 
{ 
... 
} 
finally 
{ 
... 
// exception I found in the dump happened here. 
... 
} 

好了,用!pe命令我有一個例外。它是一個空引用異常,但問題的真正原因是在上面某處,在try或catch中的一個地方,並且在finally塊中被這個異常所掩蓋。應用程序在壓力測試中崩潰,因此創建repro並不容易,所以轉儲就是我擁有的一切。

因此,所有windbg/.NET內部大師的問題都在那裏。你有什麼想法,我怎麼能夠在finally塊之前得到這個之前發生的異常。我沒有看到任何有用的堆棧(!dso命令),這或多或少是我的psscor2知識結束:)。

謝謝。

+3

不,信息掉進位桶。用附加的調試器運行壓力測試是一個非常簡單的解決方法。停止一次機會例外。 –

+1

不幸的是,在這裏運行壓力測試不是一種選擇。這是一種複雜的基礎設施,測試在實驗室中運行。我什麼都沒有,只有repro。我希望上面拋出的異常仍然在棧/堆的某個地方。我想它仍然在轉儲的某個地方,但我根本不知道在哪裏可以找到它。感謝您的評論。 – Klark

+0

如果還沒有完成,請對轉儲文件嘗試!dae(DumpAllExceptions)和「!Analysis」命令。最後!分析-v。也許你會在輸出中看到一些東西。 –

回答

1
  1. 將windbg attatch用於您的進程,執行「sxe clr」並等待任何空引用第一次機會異常並使用!pe命令檢查調用堆棧。
  2. 您可以使用「!dumpheap -type Exception」來查找包含單詞「Exception」的對象,然後查找NullReferenceException對象,使用.foreach(ex {!dumpheap -short -mt}){!pe ex }
  3. 您可以從!DSO找到參數或局部變量或!clrstack -a