我有一个多线程的c#项目。我已经删除了一个锁,它锁定了不必要的共享对象,并试图使这些共享对象成为单线程。 事情是现在这个过程崩溃了,没有任何错误 - 不是在事件查看器中或在调试中运行时。 任何人都可以建议我诊断错误的方法吗?因为视觉工作室只是让过程停止而没有让我使用的事实让我陷入困境。我的最后一招是WinDbg,我想避免这种情况。
答案 0 :(得分:1)
您可以尝试挂钩未处理的应用域异常 - http://msdn.microsoft.com/en-GB/library/system.appdomain.unhandledexception.aspx
并检查未处理的线程异常: https://msdn.microsoft.com/en-GB/library/system.windows.forms.application.threadexception.aspx
(appdomain链接中的示例代码)
using System;
using System.Security.Permissions;
public class Example
{
[SecurityPermission(SecurityAction.Demand, Flags=SecurityPermissionFlag.ControlAppDomain)]
public static void Main()
{
AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.UnhandledException += new UnhandledExceptionEventHandler(MyHandler);
try {
throw new Exception("1");
} catch (Exception e) {
Console.WriteLine("Catch clause caught : {0} \n", e.Message);
}
throw new Exception("2");
}
static void MyHandler(object sender, UnhandledExceptionEventArgs args)
{
Exception e = (Exception) args.ExceptionObject;
Console.WriteLine("MyHandler caught : " + e.Message);
Console.WriteLine("Runtime terminating: {0}", args.IsTerminating);
}
}
// The example displays the following output:
// Catch clause caught : 1
//
// MyHandler caught : 2
// Runtime terminating: True
//
// Unhandled Exception: System.Exception: 2
// at Example.Main()
答案 1 :(得分:0)
在Visual Studio中检查导致调试器中断的异常也是个好主意。
您可以找到此Debug->Exceptions...
或Crtl+D, E
也许visual studio只是跳过导致崩溃的异常