2015-08-23 57 views
12

我在商店裏有一個應用程序,一直讓我頭疼。我的客戶報告,並且我覈實,該應用程序崩潰/在以下情況下關閉:Windows 10崩潰Whodunit

  • 啓動應用程序
  • 關閉應用
  • 等待至少〜15分鐘
  • 打開應用

當啓動畫面結束並且啓動擴展啓動畫面時,應用程序將關閉。目前尚不清楚導致問題的原因。該應用程序將繼續關閉/崩潰。應用程序必須完全卸載並重新安裝,然後再次開始工作。我只能用應用商店版本重現此問題。我沒有在事件查看器程序中找到任何崩潰報告。

我已經從開發者門戶網站下載了一些崩潰報告,但我不認爲我看到基於時間戳和崩潰頻率顯示崩潰。

額外信息:我沒有運行任何後臺任務或磁貼更新。

我有三個子問題:

  1. 什麼是好地方尋找在系統中找到更多關於爲什麼應用程序被關閉?
  2. 我可以在我的系統上運行商店構建,以便我可以運行一些測試,而無需每次將應用程序提交到商店?
  3. 基於以下事實:1)應用程序第一次運行2)在約15分鐘內啓動任何後續時間或上次啓動3)在上次啓動大於15分鐘前運行時自動關閉4 )它只發生在商店構建中,有沒有人有任何想法可能導致這種情況?

UPDATE:

我試圖調試使用Visual Studio中的應用程序商店的版本和所有我能看到的是以下內容:

Exception thrown at 0x00007FFF54D7A1C8 (KernelBase.dll) in App.exe: 0x40080201: WinRT originate error (parameters: 0x000000008000000E, 0x000000000000002C, 0x0000006E46EAE9B0). 
Exception thrown at 0x00007FFF54D7A1C8 (KernelBase.dll) in App.exe: 0x40080201: WinRT originate error (parameters: 0x000000008000000E, 0x0000000000000046, 0x0000006E46EAE630). 
The thread 0x1be8 has exited with code 1 (0x1). 
The thread 0xfa8 has exited with code 1 (0x1). 
The thread 0x115c has exited with code 1 (0x1). 
The thread 0x730 has exited with code 1 (0x1). 
The thread 0xed4 has exited with code 1 (0x1). 
The thread 0x1894 has exited with code 1 (0x1). 
The thread 0x18a0 has exited with code 1 (0x1). 
The thread 0x194c has exited with code 1 (0x1). 
The thread 0x1a3c has exited with code 1 (0x1). 
The thread 0x1988 has exited with code 1 (0x1). 
The thread 0x16ec has exited with code 1 (0x1). 
The thread 0x1584 has exited with code 1 (0x1). 
The thread 0xfd0 has exited with code 1 (0x1). 
The thread 0xd8c has exited with code 1 (0x1). 
The thread 0xcec has exited with code 1 (0x1). 
The thread 0x16b4 has exited with code 1 (0x1). 
The thread 0x12f8 has exited with code 1 (0x1). 
The thread 0x146c has exited with code 1 (0x1). 
The thread 0x36c has exited with code 1 (0x1). 
The thread 0x1854 has exited with code 1 (0x1). 
The thread 0x1ae4 has exited with code 1 (0x1). 
The thread 0xa38 has exited with code 1 (0x1). 
The thread 0x230 has exited with code 1 (0x1). 
The program '[3840] App.exe' has exited with code 1 (0x1). 

我猜程序通常與代碼0退出,所以一定是錯的很難看到拋出的異常是什麼。

我試圖在異常打破和步驟過來看看是什麼原因造成,但我得到的是另一個例外:

Exception thrown at 0x00007FFF54D7A1C8 in App.exe: Microsoft C++ exception: _com_error at memory location 0x000000EE2788E9D0. 

我上傳了一個版本的應用程序商店有一個內置的復活節雞蛋允許我禁用擴展閃屏中的所有代碼。即使所有的代碼禁用它仍然崩潰/關閉。

更新2: 應用程序在啓動時關閉的時間範圍似乎與系統休眠/睡眠所花費的時間有關。

+1

如果您還沒有這樣做,我會嘗試使用Visual Studio調試商店構建。在VS的菜單中,選擇Debug - > Other Debug Targets - > Debug Installed Package –

+0

很好的建議。我不知道這是可能的。我會盡快嘗試,並讓你知道它是否有效。如果是這樣,你應該把它作爲一個答案,我會把它標記爲正確的! –

+0

查看更新後的問題 –

回答

11

我想這可能與應用程序的生命週期有關。

在用戶暫停您的應用程序後,由於資源限制,操作系統可能會終止,因此可能爲。發生這種情況時,應用中的以前會話數據將會丟失。因此,如果您沒有任何檢查來恢復數據,並且您的應用程序啓動取決於此數據,則該應用程序將崩潰並給出例如NullReferenceException s。

調試此方法的一種方法是使用Visual Studio的生命週期事件調試器。要激活它,您需要運行您的應用程序,然後在任務欄中打開生命週期事件(請參見下圖)並選擇暫停和關閉。注意這會導致應用程序關閉。現在使用Visual Studio重新啓動應用程序,這次它從Terminally模式啓動。

enter image description here

通常你會看到下面一段代碼在你App.xaml.cs。這是恢復您以前的應用程序狀態的好地方。可以找到一個很好的參考文獻here(注意它適用於Windows 8商店應用程序,但它與UWP中的概念相同)。

if (e.PreviousExecutionState == ApplicationExecutionState.Terminated) 
{ 
    //TODO: Load state from previously suspended application 
} 

而且,我會強烈建議您將異常寫入日誌文件,要麼將其存儲到服務器或禮貌地要求用戶通過電子郵件發送給您。由於崩潰發生在應用程序的前景,你將能夠趕上它 -

public App() 
{ 
    this.UnhandledException += (s, e) => { }; 

希望這會有所幫助,祝你好運!

+1

感謝您的留言。我只是通過查看代碼並在我的腦海中進行調試才找到了解決方案(請參閱發佈的答案) –

+0

很高興您明白了。但是你有沒有想過爲什麼它的第一個加載的n在被終止後崩潰了? –

+0

即使你沒有真正解決問題,我仍然決定給你賞金,但是如果不發佈整個源代碼,這是不可能的。謝謝! –

1

這是一個Windows8.1商店應用程序重定向到Windows 10嗎?

  1. 您可以使用事件查看器來檢查應用程序崩潰或任何其他系統事件日誌的詳細信息。只需在W10中搜索事件查看器即可。

  2. 使用嚮導生成存儲應用程序包。由於Windows 10允許側載應用程序,因此您可以使用側載來安裝和測試應用程序。開發者模式也支持側裝應用程序。你只需要安裝帶有證書的.appx文件進行sideloading。 https://msdn.microsoft.com/en-us/library/windows/apps/dn706236.aspx

  3. 你可以分享更多的細節,你擺脫記錄?什麼是使用的功能?同時建議您使用Application Insights遙測技術進行簡單的調試/錯誤報告。

+0

,但它創建的包是a。appxupload包。這也適用於側裝?我確實使用了事件查看器,但應用程序關閉時沒有任何顯示。我正在尋找Windows - >應用程序。 –

6

原來是時間問題。代碼在簡歷代碼中做了一些不好的事情(在類型中輸入一個變量)。它在調試版本中沒有出現的原因是因爲它到達恢復代碼的速度較慢。當它到達該代碼時,這種類型的轉換錯誤不會發生。它確實發生在商店構建中,但非法轉換異常並未被HockeyApp或Windows事件查看器以某種方式拾取。