gpt4 book ai didi

c# - 将应用程序带到前台时崩溃并显示 "... stopped working"

转载 作者:行者123 更新时间:2023-11-30 20:22:29 27 4
gpt4 key购买 nike

我最近收到了修复一个工具中的错误的请求,该错误是由一位已离开公司的同事创建的。

这个工具基本上是一个基于 .NET-Framework 4 的 WinForms 应用程序。它通常可以正常工作,但以下情况会导致随机崩溃:

如果程序在后台(没有焦点)并在一段时间后被用户带到前台(焦点/激活),它会崩溃并显示消息“ToolName has stopped working” .

如果在调试器下执行,ToolName 将替换为“vshost.exe”。 没有显示其他错误消息。我不知道是哪一行代码导致了错误。

一些附加信息:

  • 如果我尝试通过激活窗口来强制出现此错误,激活另一个窗口(例如 Outlook),然后再次激活我的工具的窗口,这很少会导致工具崩溃(必须有一些其他的影响)。<
  • MainForm 没有分配事件处理程序,除了 Form_LoadForm_SizeChanged
  • 该应用程序使用 WeifenLuo-Docking-Library 和 ZedGraph-Library。
  • 我的印象是只有在应用程序运行一段时间后才会出现此错误。
  • 崩溃至少出现在两台运行 Windows 7 x64 的计算机上。 (到目前为止我还没有尝试过任何其他的)
  • 我无法将调试器附加到崩溃进程(Visual Studio 2010 和 2013 都不起作用!)。我收到消息了

“当前调试器配置为调试使用 Microsoft .NET Framework v 1.0、1.1 或 2.0 的代码。未处理的异常从 .NET Framework v4.0 代码中抛出。”

我试图通过添加全局异常处理程序来获取有关崩溃的更多信息,这些处理程序应该创建一个带有堆栈跟踪的 MessageBox 但它们不会触发:

[STAThread]
static void Main()
{
AppDomain currentDomain = default(AppDomain);
currentDomain = AppDomain.CurrentDomain;

currentDomain.UnhandledException += GlobalUnhandledExceptionHandler;
System.Windows.Forms.Application.ThreadException += GlobalThreadExceptionHandler;

// ...
}

private static void GlobalUnhandledExceptionHandler(object sender, UnhandledExceptionEventArgs e)
{
Exception ex = default(Exception);
ex = (Exception)e.ExceptionObject;

MessageBox.Show(ex.Message + "\n" + ex.StackTrace);
}

private static void GlobalThreadExceptionHandler(object sender, System.Threading.ThreadExceptionEventArgs e)
{
Exception ex = default(Exception);
ex = e.Exception;

MessageBox.Show(ex.Message + "\n" + ex.StackTrace);
}

无奈之下,我在 Application.Run 周围添加了一个 try-catch-Block,它也不会触发:

try
{
Application.Run(new MainForm());
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}

最佳答案

当我遇到这样的问题时,我通常会从事件查看器着手。 Windows 会将应用程序崩溃记录到事件查看器,即使它们是无声的。有时,它能够吐出一个堆栈跟踪,这可以使事情变得更容易。根据我的经验,应用程序正在无声地崩溃,因为它正在尝试加载一些缺少的依赖项并且它正在获取 TypeInitializationException。

如果没有关于该应用程序的更多信息,我很难告诉您根本原因是什么。应用程序是否加载任何第 3 方库?应用程序中发生了任何自定义控制图吗?我相信 .NET 延迟加载类型。如果在应用程序尝试绘制自身之前不需要某个类型,那么在应用程序首次显示之前可能不会加载它。那时,如果缺少类型,应用程序将崩溃。应用程序启动时最小化了吗?崩溃是随机的还是一致的?意思是,如果您在启动时显示应用程序,它是否有效?还是当您第一次显示应用程序时它总是崩溃?

您使用的是哪个版本的 Visual Studio?您的项目文件是否设置为 .NET 4?附加到流程时,您可以选择要附加的代码类型。在 Attach to Process 对话框中,按 Attach to 右侧的“Select”(默认应为 Automatic:Native code)。然后选择所需的代码类型。此选项在 VS 2010 和 2013 中位于同一位置。

关于c# - 将应用程序带到前台时崩溃并显示 "... stopped working",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31454271/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com