我有一個爲.NET 4 Full Framework編寫的WPF應用程序。該應用程序使用SQL Anywhere作爲其數據庫。我的應用程序有一個未處理的異常處理程序,它總是將錯誤記錄到程序的自定義事件日誌中。然後它將錯誤消息顯示給用戶。該程序還會在事件日誌中發送消息,以便隨時進行調試。.NET程序在什麼情況下會終止?
該應用程序安裝在運行Windows 7並具有8 GB RAM的用戶筆記本電腦上。在本機上啓動時,將顯示啓動畫面,然後顯示程序的主窗口。在繪製完成後不到一秒鐘,程序就會消失。沒有顯示錯誤消息。
檢查事件日誌顯示程序寫的最後一條消息是它正在檢查數據庫中是否存在用戶。沒有錯誤消息。
下面顯示的最後一條消息的代碼是,做一些參數檢查方法的調用,然後執行以下EF查詢:
LPRCore.CarSystem.User user = null;
IQueryable<User> query = from u in context.Users
from m in context.Members.Where(m => m.UserId == u.UserId)
.DefaultIfEmpty()
where u.LoweredUserName == userName.ToLower() && m == null
select u;
try {
user = query.SingleOrDefault();
} catch (Exception ex) {
....
}
我不能告訴,如果在代碼catch塊被稱爲。我的懷疑是它被召喚了,並且在那裏發生了異常。
我的問題是,如果在catch塊中發生異常,那麼如果沒有其他異常處理程序來捕獲錯誤,上層的未處理異常處理程序是否會捕獲該異常?或者它會導致程序死亡而不報告任何內容?
運行連接(遠程)調試器時會發生什麼? – 2013-09-27 21:04:00
我們還通過添加Application.ThreadException + = OnApplicationThreadException和未處理的處理程序來捕獲更多。 –
即時通訊假設你也想深究這個問題的底部。首先您可以檢查客戶端PC上的事件查看器。如果沒有「好的」異常或消息,那麼當應用程序退出時,您將不得不拔出Windbg並獲取轉儲。 – wal