[英]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.