我有一个相当简单的程序,作为一个库存跟踪程序。它是一个单线程,.net 4.0,并且完全是事件驱动的(不点击按钮就不会发生任何事情)。程序在没有按钮被点击的情况下崩溃。以下是我尝试获取有关此错误的任何信息所采取的措施:
首先:查找UNHANDELED异常或线程异常。为此错误创建一个消息框弹出窗口和一个数据库条目:
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException);
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
Application.Run(new archiveInventory_b());
}
static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
{
MessageBox.Show(e.Exception.Message, "Unhandled Thread Exception");
ErrorLogEntry(e.Exception.Message + " INNER EXCEPTION: " + e.Exception.InnerException.Message, "ThreadException");
}
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
MessageBox.Show((e.ExceptionObject as Exception).Message, "Unhandled UI Exception");
ErrorLogEntry((e.ExceptionObject as Exception).Message + " INNER EXCEPTION: " + (e.ExceptionObject as Exception).InnerException.Message, "UnhandledException");
}程序关闭,没有消息框或数据库条目。
第二:当程序关闭时,在ACT中抓住罪魁祸首:
private static void form_Closing(object sender, CancelEventArgs e)
{
const string message =
"Are you sure that you would like to close the program?";
const string caption = "Form Closing";
var result = MessageBox.Show(message, caption,
MessageBoxButtons.YesNo,
MessageBoxIcon.Question);
// If the no button was pressed ...
if (result == DialogResult.No)
{
// cancel the closure of the form.
e.Cancel = true;
}
}然而,从未出现过任何消息。还能做些什么来追踪这个人呢?
发布于 2014-09-11 22:43:25
有三个基本原因可以解释为什么.NET程序可以在不触发您编写的事件处理程序的情况下崩溃到桌面。我假设它在代码中不是很明显的东西,比如Environment.Exit():
这三个中的哪一个会使你的程序崩溃,你必须用很难的方法来找出。要发现下一步需要使用哪种方法,最基本的方法是关注进程退出代码。它的值将是非零值,表示失败,它被设置为匹配的基础SEH异常代码。当你在重现崩溃时遇到麻烦时,你可能不得不写一个小帮手程序,除了使用Process类来启动你的主程序之外,什么也不做。当它停止时,Process.ExitCode会为您提供该值。
也许不用说,这将需要一段时间来解决,所以分配您需要的资源来磨练这个问题。广泛的测试,以获得一个复制品是必需的。为一个简单的SOE祈祷吧,到目前为止最常见的原因是,其他两个非常丑陋,你可能需要微软的支持。
发布于 2014-09-11 22:17:26
在Windows x64中有一个known issue about swallowed Exceptions in the Load() event。
要消除此原因(或检查它...),请在您的加载事件(如果适用)中添加try/catch,以便验证此处是否发生任何异常?
https://stackoverflow.com/questions/25789438
复制相似问题