2011-05-15 38 views
0

我想調試一些.NET可執行文件(我沒有源代碼),這很奇怪。在WinDBG中調試IndexOutOfRangeException

當使用WinDBG附加到它時,我注意到它拋出了IndexOutOfRangeException。

我想知道哪一行實際上是拋出這個異常 - 我怎麼看到導致這個索引訪問?

我可以看到使用!CLRStack的堆棧,但它並沒有引導我輸入它的確切代碼行。

這是我在CLRStack看到:

0015ec9c 6f1459d8 System.Management.Instrumentation.InstrumentedAssembly+TypeInfo.Fire(System.Object) 
0015eccc 6f144bdc System.Management.Instrumentation.InstrumentedAssembly.Fire(System.Type, System.Object) 
0015ecd8 6f145164 System.Management.Instrumentation.InstrumentedAssembly.Fire(System.Object) 
0015ecec 6f142268 System.Management.Instrumentation.Instrumentation.Fire(System.Object) 
0015ecf8 034ce47b InstallerLibrary.InstallerInterface.WMIEventGenerator.FireEvent(System.Object) 
0015ed2c 0393970c InstallerLibrary.InstallerInterface.WMIEventGenerator.GenerateServerAlive(UInt32) 
0015ed54 039396b7 InstallerLibrary.InstallerInterface.InstallerInterface.NotifyServerAlive(UInt32) 
0015ed60 03939655 InstallerLibrary.InstallaterManager.NotifyServerAlive(UInt32) 
0015ed88 00580f13 InstallerInit.Class1.Main(System.String[]) 
+0

如果你沒有代碼,你會怎麼做? – Mat 2011-05-15 12:04:28

+0

我會聯繫負責它的團隊,告訴他們究竟在哪裏失敗,因爲他們沒有在真實系統上進行測試。 – 2011-05-15 12:08:17

+0

只是發送堆棧跟蹤。他們會告訴你需要進一步的信息。 – Mat 2011-05-15 12:10:01

回答

1

的行號信息被存儲在PDBS。如果你沒有私人符號,!clrstack將不能提供

即使沒有pdbs,使用!mk時,sosex擴展可以提供IL偏移。

一看就知道是造成這一點,你必須瞭解如何使用當地人的索引訪問!clrstack -a或使用sosex!MDV

+0

謝謝,我會檢查出來。 – 2011-05-15 12:38:09

+0

如果我能得到這些符號,那麼發現失敗線所需的命令是什麼?或者它在運行時會自動出現!PrintException?由於堆棧跟蹤列出堆棧的頂部是System.Management.Instrumentation方法,而不是我們公司編寫的代碼。 – 2011-05-15 12:52:06

0

使用!DSO在異常時轉儲棧對象。您將在堆棧中以整數形式獲取索引。這將有助於縮小代碼範圍。

另外使用!dumpheap -type IndexOutOfRangeException。並注意對象地址(如xxx)。現在使用!pe xxx查看IndexOutOfRangeException的異常堆棧。