【发布时间】:2010-09-24 19:30:44
【问题描述】:
对于调试环境,我们在代码中有条件的Debugger.Launch语句,让开发者可以调试到windows服务的启动代码中。我们今天刚刚升级到 .NET 4.0。自升级以来,如果我们退出 JIT 窗口(即我们选择不调试),Windows 服务将崩溃(进程正在终止)。它过去只是简单地恢复。如果我们接受附加,应用程序不会终止并且可以正常工作。
编辑
另一个奇怪的事情是,抛出的异常不再是 Launch for User 异常。它现在是未处理的 Microsoft .NET 框架异常。我试图在它周围包裹一个try catch,看看我得到了什么。调试时我无法捕获异常,因为此时异常不会发生。如果我尝试将异常记录到文件中,服务会崩溃,我什么也得不到。
有什么办法可以解决这个问题吗?有什么原因吗?
更多信息
我刚刚创建了一个空白的新窗体应用程序。
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());
}
我得到了第一个“你好”。然后我得到一个 JIT 窗口,上面写着“发生了未处理的 Microsoft .NET 异常”。如果我不附加,它会在没有消息或任何内容的情况下崩溃。
我尝试过 WinDbg,但没有。我对这些工具一点也不熟悉。这就是我得到的。它看起来一点用处都没有
Microsoft (R) Windows 调试器版本 6.12.0002.633 AMD64 版权所有 (c) 微软公司。版权所有。 加载转储文件 [C:\Users\moueis\TestDebugging_100927_104956.dmp] 具有完整内存的用户迷你转储文件:只有应用程序数据可用 评论: ' *** C:\Users\moueis\Desktop\procdump.exe TestDebugging.exe -e -ma *** 未处理的异常' 符号搜索路径为:***无效*** ****************************************************** ****************************** * 如果没有符号搜索路径,符号加载可能不可靠。 * * 使用 .symfix 让调试器选择符号路径。 * * 设置符号路径后,使用 .reload 刷新符号位置。 * ****************************************************** ****************************** 可执行搜索路径为: Windows 7 版本 7600 MP(8 个过程)免费 x64 产品:服务器,套件:TerminalServer SingleUserTS 机器名称: 调试会话时间:2010 年 9 月 27 日星期一 10:49:56.000 (UTC - 4:00) 系统正常运行时间:11 天 20:41:04.714 处理正常运行时间:0 天 0:00:22.000 ......................................................... *** 错误:找不到符号文件。默认为 ntdll.dll 导出符号 - *** 错误:找不到符号文件。默认为 KERNELBASE.dll 导出符号 - 内核基础!DebugBreak+0x2: 000007fe`fd432442 cc int 3
这发生在不止一台机器上(但是,它们非常相似)。
再次了解更多信息
这显然很容易重现。它发生在内部的多个系统上,我已收到来自外部方的确认,只需在使用 .NET 4.0 的 .NET windows 窗体中使用上面的代码 sn-p 即可重现该问题
【问题讨论】:
-
发布异常的堆栈跟踪以及异常消息。
-
事件日志告诉你什么?
-
您可以在服务崩溃时使用 Sysinternal 的 ProcDump 实用程序(使用 -e 选项)对服务进行内存转储。获得转储后,您可以将其加载到 WinDbg 并使用 SOS 调试器扩展调查它崩溃的原因。
-
你能把你的转储发布到某个地方吗?
-
我没有一个方便的地方来发布转储(我不相信你可以把它贴在这里吗?)。但是,问题很容易重现。
标签: c# .net debugging visual-studio-2010 .net-4.0