2015-12-21 38 views
3

我們有一個使用Compact Framework 3.5的C#應用​​程序,運行在運行Windows CE 5.0和Windows Mobile的「移動計算機」上。Compact Framework 3.5應用程序在CE7/Motorola上間歇性崩潰MC32N0

該應用程序在這些設備上運行良好,包括運行Windows CE 5.0的Motorola/Symbol MC3190。

現在,這款MC3190已經成爲了生命的終結,並且被Motorola/Symbol MC3200(也是MC32N0)所取代。該設備運行Windows CE 7.0並預先安裝了Compact Framework 3.5。

我們的應用程序在這個設備上間歇性地和神祕地崩潰。

我可以通過在我們的應用程序中打開和關閉很多表單來一致地重現問題。這些操作不會導致任何網絡流量。有時我會在30秒內發生崩潰,有時需要10分鐘的隨機操作。

在某些時候,應用程序將完全凍結。按下Windows CE開始按鈕將在凍結的應用程序上繪製開始菜單,但再次按下它不會隱藏開始菜單。

它看起來好像在工具包內有某種無限循環,但我找不到它是什麼。這裏是我試過的事情的清單:

  • 我已經向源基站許多變化(主要是改變如何形式顯示和設置)

  • 我試圖崩潰的應用程序,同時附加到VS調試器,然後「打破所有」,但這將只是拖延,直到我硬重啓設備。

  • 我試過使用.NET Compact Framework遠程性能監視器,它顯示了我關於垃圾收集等的有趣數字,但沒有內存泄漏,也沒有任何信息幫助我查明凍結。

  • 我試過使用「CLR Profiler」,但是這個錯誤出現在我的設備上,並顯示消息「連接時出現未知錯誤:RemoteInstall:不受支持的指令集」。

  • 我一直試圖聯繫摩托羅拉的支持,甚至送他們我的源代碼,但他們只是要求知道「哪些API導致崩潰」(我希望他們能告訴我)

問題:

  • 有沒有人見過這樣的上MC32N0運行CF應用程序崩潰?

  • 有沒有人有在MC32N0上工作的CLR Profiler?

  • 有沒有人有一個想法如何獲得一種凍結CF應用程序上的線程轉儲? (有點像JVM的jstack)

  • 有沒有人有任何其他的想法如何去調試呢?

任何幫助非常感謝!

更新

設備已幾次與視覺碰撞神器墜毀在我身上,就像這樣:

http://i.stack.imgur.com/HAxt8.jpg

崩潰症狀一般是這樣的:

  • 高興地使用應用程序,在世界上不需要照顧的訂單
  • 突然,應用不再處理鍵盤輸入
  • 有趣的是,在這一點上,我常常能夠集中不同的文本框光標將完全眨眼次數會在那裏一小會兒
  • 幾個互動後,系統鎖定了,和Windows開始按鈕變得沒有反應以及
  • 幾次 - 設備將圖像中產生的碰撞模型像上面

- 這些崩潰我見過的約100 3注意:我們的供應商交付了兩臺產生崩潰的MC3200設備,所以我覺得很難相信這是一個硬件問題。

有沒有人認識到這些「症狀」?有什麼想法嗎?

+0

不幸的是(對我來說),我不得不在炸彈包裝框架工作了幾年,不幸的是(對你而言),來自公主新娘的引用在這裏適用:「習慣失望。」 –

回答

1

符號/摩托羅拉/斑馬(SMZ)的答案是'壞'。他們應該有工具在後臺運行調試監視器以進行交互錯誤分析。

你可以做的是enbale錯誤報告,然後看看問題顯示時是否創建了內核轉儲文件。但是之後SMZ需要再次提供幫助,因爲kdmp文件必須與操作系統映像/固件版本的調試符號一起使用。內核轉儲中的地址和寄存器值將導致Build中存在問題的函數/ API。

如果沒有內核轉儲,那麼沒有導致應用程序死鎖的「本機」異常。如果可用,我會在設備上現有的CF35上安裝CF35。還有PowerTools支持擴展調試:https://www.microsoft.com/en-us/download/details.aspx?id=47266

還有一些Windows Embedded Compact 7的更新(它似乎不再簡稱爲Windows CE7)。這些更新必須由OEM(這裏是Zebra Motorola Solutions)採用。 https://www.microsoft.com/en-us/download/details.aspx?id=50356是一個名爲「Windows Embedded Compact 7每月更新2015年11月」的已知isssues的html。可能你可以避免使用已知的問題。

錯誤報告看https://msdn.microsoft.com/en-us/library/jj584896%28v=winembedded.70%29.aspx

摘要:

  • 嘗試通過OEM獲得一個內核日誌記錄工具

  • 嘗試錯誤報告上

  • 嘗試PowerTools的切換爲WEC7

  • 嘗試更新設備的固件

  • 嘗試更新的CF35(如果可用)在WEC7更新列表中列出

  • 避免已知錯誤的功能。除OEM外,還包括該設備的操作系統版本的所有更新(他們可以隨時做或不做)。

  • 切換到另一個供應商/設備

+0

感謝您的評論Josef。不幸的是,我沒有得到任何異常或內核轉儲,操作系統完全凍結,沒有給我任何東西繼續。我已經爲原始問題添加了一些崩潰症狀。我試過使用不同版本的CF35,但仍然存在崩潰。我確定它不是一個特定函數的問題,因爲崩潰會隨機發生。 –

+0

這似乎是一個糟糕的操作系統映像。您是否更新到最新的操作系統映像(https://portal.motorolaso​​lutions.com/Support/US-EN/Resolution?solutionId = 97921&productDetailGUID = 35e9e6d089b86410VgnVCM10000001c7b00aRCRD&detailChannelGUID = 2202caf8fb16e310VgnVCM1000000389bd0aRCRD)? - 再次聯繫Zebra支持尋求幫助,並在那裏調試選項。如果支持再次沒有幫助,請忘記設備並更換爲其他供應商。 – josef

2

我們正在與我們在MC32N0應用遇到了同樣的「鎖定」的問題。

Zebra確實有工具可以讓您更好地瞭解正在發生的事情。 eMscript是一個您可以使用的工具,可以在後臺運行,並執行一些流程和資源監控。 RTLog(位於設備上)可以爲您提供一些信息,但僅對未捕獲的異常等嚴重故障有用。在我們的設備上,我們可以使用FUNC-F9啓動RTLog轉儲,如果成功,設備將發出嘟嘟聲,並且轉儲文件將位於設備的根目錄中。

好吧,經過許多小時的調試/測試/重寫代碼後,我們最終在一個不起眼的帖子中發現,鎖定問題是由垃圾收集引起的。我們似乎鎖定了表單轉換,所以我們在導航之前做的是在我們的基本表單的Uninitialize()方法中添加兩行代碼。

 GC.Collect(); 
     GC.WaitForPendingFinalizers(); 

幸運的是,我們所有的表格都是從一個基本表格派生出來的,因此我們只需將它包含在一個位置。

我再也找不到帖子了,或者我會在這裏引用它。這是一個微軟公司的帖子,當終結者運行時將這個問題描述爲隨機鎖定,但他們也表示它已被糾正。

自從我們一直運行時沒有鎖定問題。

希望這可以幫助別人......