我正在尝试从转储中查找 NullReferenceException。 NullReferenceException 不是崩溃异常,而是崩溃异常是一个带有 InnerException(即 NullReferenceException)的 TargetInitationException。
我将 Windbg 与 SOS 一起使用,我使用命令analyze -v
这给了我 NullReferenceException 的调用堆栈:
EXCEPTION_OBJECT: !pe f6cb150
Exception object: 000000000f6cb150
Exception type: System.NullReferenceException
Message: Object reference not set to an instance of an object.
InnerException: <none>
StackTrace (generated):
SP IP Function
000000002CD9D8C0 000007FF01E7C639 MyDll!DoSomething2()+0xe99
000000002CD9DBE0 000007FF01E7B11D MyDll!DoSomething1()+0x43d
000000002CD9DD20 000007FF01E7AB11 MyDll!WorkerDoWork(System.Object, System.ComponentModel.DoWorkEventArgs)+0x51
000000002CD9DD80 000007FEEA68A0F2 System_ni!System.ComponentModel.BackgroundWorker.WorkerThreadStart(System.Object)+0x62
请注意,我得到的方法名称带有字节偏移量,但没有行号。DoSomething2
是一个很大的函数,所以 NullReferenceException 发生在哪里并不明显。
我尝试按照 Tess Ferrandez 博客中的说明进行操作:
.Net 异常 - 追踪代码中发生异常的位置 http://blogs.msdn.com/b/tess/archive/2006/05/18/601002.aspx
但我很早就陷入了尝试确定该方法的方法描述符的位置DoSomething2
将 !ip2md 与 DoSomething2: 7FF01E7C639 的 IP 结合使用:
> !ip2md 7FF01E7C639
Failed to request MethodData, not in JIT code range
请注意,!ip2md 命令在发生 TargetInitationException 的方法的 IP 上成功。
Question