我有一个相当简单的C#程序(没有UI,只是命令行),它使用第三方库(Abbyy的Finereader 8.1)做一些工作然后退出。
足够简单,效果很好。最近我们开始从程序中得到以下错误:
应用程序错误:指令位于 “0x2c0de46b”引用了内存 “0x0732aa84”。
一点点挖掘表明这是在C#代码结束时发生的。基本上最后两行是:
Console.WriteLine(message);
return statusCode;
写入最终的控制台消息,程序的输出正常。实际上,如果不是因为这个错误导致程序无法完全终止,我可以解决它。
我们正在运行两个脚本,每个脚本在两台机器上调用此程序。这是随机发生的(据我所知)但通常至少有一个(4个脚本)每天都会出现这种情况。我认为也许某些奇怪的事情发生在并发运行中,但测试消除了这一点。
任何关于可能原因的想法都会受到欢迎,因为我的想法已经用完了。
此外,如果有人知道在发生这种情况时让程序终止的方法,那将非常有用。
答案 0 :(得分:1)
“应用程序错误:”0x2c0de46b“处的指令引用”0x0732aa84“处的内存。”
此错误意味着您的代码中某处存在内存损坏,而没有完整的代码,我不能说更多。 在这种错误情况下,异常上升的位置并不重要。尝试查看您的代码,尤其是调用库的代码。
答案 1 :(得分:1)
嗯......故障排除决定了我问的是什么改变了,但我想你自己也想过这个。您使用的是什么版本的.NET框架?什么操作系统会出现此问题?
我相信这个例外来自第三方库所做的一些清理。你有没有联系他们的支持?您是否可以尝试显式卸载库并查看错误是否仍然存在?
或者......您是否尝试为未处理的异常添加处理程序?可能值得一试......
public static void Main()
{
AppDomain.CurrentDomain.UnhandledException +=
new UnhandledExceptionEventHandler(
OnUnhandledException);
//some code here....
}
/// <summary>
/// Occurs when you have an unhandled exception
/// </summary>
public static void OnUnhandledException(object sender, UnhandledExceptionEventArgs e)
{
//here's how you get the exception
Exception exception = (Exception)e.ExceptionObject;
//bail out in a tidy way and perform your logging
}
(DoctaJonez示例代码)
只是抛出一些东西,因为似乎没有明确的答案(<)。