针对调试环境,我们在代码中加入了一个条件语句Debugger.Launch,以允许开发人员调试Windows服务的启动代码。今天我们刚升级到.NET 4.0。自从升级后,如果我们退出JIT窗口(即选择不进行调试),Windows服务就会崩溃(进程终止)。以前它只是恢复正常。如果我们接受附加,应用程序就不会终止,并且可以正常工作。
编辑
另一个奇怪的事情是,抛出的异常不再是Launch for User异常。现在它是一个未处理的Microsoft .NET框架异常。我尝试使用try catch包装它以查看结果,但在进行调试时无法捕获异常,因为此时异常不会发生。如果我尝试将异常记录到文件中,则服务会崩溃并且没有任何结果。
有什么方法可以解决这个问题吗?有什么原因导致这种情况发生吗?
更多信息
我刚创建了一个空白的新Windows表单应用程序。
public Form1()
{
try
{
MessageBox.Show("hello");
System.Diagnostics.Debugger.Launch();
}
catch
{
MessageBox.Show("error");
}
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
InitializeComponent();
}
void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
MessageBox.Show(e.ToString());
}
我先收到了第一个“hello”。然后我得到了JIT窗口,上面显示出“发生了未处理的Microsoft .NET异常”。如果我不附加它,它就会崩溃,没有任何消息或者其他提示。
我尝试了WinDbg和其他工具。我对这些工具并不熟悉。以下是我得到的内容。看起来并没有什么用处。
这种情况在不止一台机器上发生了(尽管它们非常相似)。Microsoft (R) Windows Debugger Version 6.12.0002.633 AMD64 Copyright (c) Microsoft Corporation. All rights reserved.
Loading Dump File [C:\Users\moueis\TestDebugging_100927_104956.dmp] User Mini Dump File with Full Memory: Only application data is available Comment: ' *** C:\Users\moueis\Desktop\procdump.exe TestDebugging.exe -e -ma *** Unhandled exception' Symbol search path is: *** Invalid *** **************************************************************************** * Symbol loading may be unreliable without a symbol search path. * * Use .symfix to have the debugger choose a symbol path. * * After setting your symbol path, use .reload to refresh symbol locations. * **************************************************************************** Executable search path is: Windows 7 Version 7600 MP (8 procs) Free x64 Product: Server, suite: TerminalServer SingleUserTS Machine Name: Debug session time: Mon Sep 27 10:49:56.000 2010 (UTC - 4:00) System Uptime: 11 days 20:41:04.714 Process Uptime: 0 days 0:00:22.000 ......................................... *** ERROR: Symbol file could not be found. Defaulted to export symbols for ntdll.dll - *** ERROR: Symbol file could not be found. Defaulted to export symbols for KERNELBASE.dll - KERNELBASE!DebugBreak+0x2: 000007fe`fd432442 cc int 3
再次提供更多信息:
显然很容易重现。在使用.NET 4.0的.NET窗体中使用上述代码片段,该问题已在内部多个系统上发生,并且我已收到来自外部方面的确认,该问题可以简单地通过使用上述代码片段在.NET窗体中使用.NET 4.0来重现。