CLR线程阻塞异常

时间:2014-07-21 20:45:00

标签: c#-4.0 clr windbg

我正在尝试调试一个非常奇怪的问题。我的C#应用​​程序死锁,我正在使用WinDbg来弄清楚发生了什么。

似乎在异常中阻止了一个线程:

0:042> !mk  
Thread 42:
    SP       IP
00:U 0abeda7c 76eb015d ntdll!NtWaitForMultipleObjects+0x15  
01:U 0abeda84 754f15e9 KERNELBASE!WaitForMultipleObjectsEx+0x100  
02:U 0abedb20 750e19fc kernel32!WaitForMultipleObjectsExImplementation+0xe0  
03:U 0abedb68 750e41d8 kernel32!WaitForMultipleObjects+0x18  
04:U 0abedb84 75108074 kernel32!WerpReportFaultInternal+0x186  
05:U 0abedbf0 75107f33 kernel32!WerpReportFault+0x70  
06:U 0abedc04 75107828 kernel32!BasepReportFault+0x20  
07:U 0abedc14 751077a7 kernel32!UnhandledExceptionFilter+0x1af  
08:U 0abedca0 76f074ff ntdll!__RtlUserThreadStart+0x62  
09:U 0abedca8 76f073dc ntdll!_EH4_CallFilterFunc+0x12  
0a:U 0abedcbc 76f07281 ntdll!_except_handler4+0x8e  
0b:U 0abedce4 76eeb499 ntdll!ExecuteHandler2+0x26  
0c:U 0abedd08 76eeb46b ntdll!ExecuteHandler+0x24  
0d:U 0abedd2c 76eeb40e ntdll!RtlDispatchException+0x127  
0e:U 0abeddb8 76ea0133 ntdll!KiUserExceptionDispatcher+0xf  
0f:M 0abee104 0654c0bb MyApp.Raster`1[[System.UInt64,mscorlib]].RemoveSubset(System.Nullable`1<UInt64>, System.Nullable`1<UInt64>)(+0x5b IL,+0x103 Native)  

...

我不确定为什么线程阻塞而不是仅仅抛出异常 我加载了SOS.dll和SOSex.dll并使用了!PrintException命令:

Exception object: 3f8c328c  
Exception type:   System.NullReferenceException  
Message:          Object reference not set to an instance of an object.  
InnerException:   <none>  
StackTrace (generated):  
SP       IP       Function  
0ABEE104 0654C0BB UNKNOWN!MyApp.Raster`1[[System.UInt64, mscorlib]].RemoveSubset(System.Nullable`1<UInt64>, System.Nullable`1<UInt64>)+0x103  

你有过这样的经历吗?可能是什么原因?

谢谢。

1 个答案:

答案 0 :(得分:2)

正在尝试终止您的应用,显示Windows错误报告崩溃对话框。很难猜到为什么你没有看到它。当然,客户看到它的非零赔率,创建了一个小型转储并将其发送给您以找出导致它的原因。好吧,你的MyApp.Raster.RemoveSubset()方法确实。

只是不要永远让它走得这么远。当WER对话框显示时,您丢失了许多有关异常的有价值信息。像异常消息和圣堆迹线。只需为AppDomain.CurrentDomain.UnhandledException事件编写事件处理程序,并记录或显示e.UnhandledException.ToString()的值。并且在Windows必须执行之前自己终止应用程序,Environment.Exit()。