[英]C# Application Crashes on XP
最近3个月,我正在VS2010中在Windows 7上开发C#应用程序。 现在它几乎完成了,我发现它不能在XP上运行。 它立即崩溃,并显示消息“程序遇到问题,需要关闭...”。 Standart Windows“发送/不发送”错误没有对问题进行具体说明。
我可以在这里发布代码,但实际上有成千上万行,而且我不知道哪个部分很重要,哪些不重要。 有人可以告诉我导致此问题的“通常的嫌疑犯”吗?
谢谢(顺便说一句,我在两台计算机上都安装了Framework4。我的其他.NET应用程序运行正常。)
[解决方案]问题是我在VS10中作为GUI的一部分创建的LineShape。 这些行导致崩溃,我不知道为什么。 事实证明,这不是操作系统问题,W7和Vista上也存在类似问题。 基本上每个PC都不是VS安装的:)
在应用程序中某个位置的静态虚拟初始化器属性中注册Appdomain.UnhandledException事件,然后在将其扔回到环境之前在处理程序中处理/输出该事件。 如果这没有帮助,则可能是在您的处理程序被订阅之前调用某个地方的另一个静态成员,或者..“其他地方有问题”。
static bool dummy = RegisterUnhandledExceptionHandler();
private static bool RegisterUnhandledExceptionHandler()
{
AppDomain.CurrentDomain.UnhandledException += (sender, e) =>
{
Exception ex = (e.ExceptionObject as Exception);
// quick dump to file because environment will exit soon
File.WriteAllText("unhandled.txt", ex.StackTrace);
throw ex;
}
return true;
}
在您的应用程序的main
,处理代码中的应用程序域异常和应用程序线程异常,然后像下面进行诊断:
AppDomain.CurrentDomain.UnhandledException += OnCurrentDomain_UnhandledException;
//in windows forms you need also to add these two lines
Application.ThreadException += OnApplication_ThreadException;
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
我打赌您正在使用P / Invoke或混合模式程序集(使用不安全或本机代码)。
可能存在平台差异(请考虑32/64位之间的差异,但API调用也会丢失/更改)。
为了找出您的代码中最可能出现的位置,我提出了一个不合常规的建议: 通过MoMa分析器 ( 链接 ) 运行它 。
MoMa分析器旨在检测在跨平台Mono框架(在Unix,MAC,Windows甚至iOS和Android平台上可用)运行针对MS.NET Framework开发的应用程序时可能出现的可移植性问题。
它将为您提供有关可能引起问题的详细报告。 您当然可以忽略报告为“未在Mono上实现”的项目-因为这不是问题。 但是,它将发现P / Invoke的所有有趣用法,以及可能会引起您问题的东西。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.