0

奇妙な動作をしている.NET実行可能ファイル(ソースコードがない)をデバッグしようとしています。

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[])
4

2 に答える 2

1

行番号情報は pdbs に格納されます。プライベート シンボルがない場合、!clrstack はそれを提供できません。

sosex 拡張機能は、pdb がない場合でも !mk を使用すると IL オフセットを提供できます。

これを引き起こしているインデックス アクセスを確認するには、!clrstack -a または sosex !mdv を使用してローカルを確認します。

于 2011-05-15T12:15:49.450 に答える
0

!dso を使用して、例外時にスタック オブジェクトをダンプします。スタック内の整数としてもインデックスを取得します。これは、コードを絞り込むのに役立ちます。

!dumpheap -type IndexOutOfRangeException も使用します。オブジェクトのアドレス (xxx など) に注意してください。!pe xxx を使用して、IndexOutOfRangeException の例外スタックを確認します。

于 2012-03-27T06:45:51.500 に答える