前言:這是一個奇葩的問題,到現在自己還沒有搞明白問題出現在哪里,但是從問題總算是解決了,希望看到此文章的大牛,如果知道問題出在什么地方,可以告知一下。
【一個在XP系統下面應用程序崩潰問題】
資源: 在官網下載了cefSharp1包后,將需要的文件引入項目中項目開發使用的是VS2012,環境win7系統。在win7系統下面,系統很穩定,運行正常。在XP系統下我們也做過簡單測試,沒有發現太多問題。
一次演示匯報:前兩天因為客戶端現場需要演示匯報,演示的機器是一台XP系統。在部署完成后做簡單測試時,被嚇尿了。當程序中聽音控件播放兩次以上的語音時,系統直接崩潰,連提示信息都沒有。NND,為什么總是關鍵時刻掉鏈子。
沒有任何作用的異常信息:
使用VS在XP系統下對程序進行調試,可VS根本就不能捕獲到異常。這下坑大了。操作系統出現的異常如下,但對我們解決問題有用信息幾乎為0:

沒辦法只能對所有的異常出現可能的地方進行猜測。根據現象我們發現系統只要在XP系統下就會出現崩潰的可能。於是我把官網cefSharp的的代碼看了一下,發現本身編譯好的dll並沒有支持XP系統,於是我對工程中的cefSharp工程和cefSharp.winform工程的平台工具集設置成XP系統:

編譯好后,替換工程中的cefSharp.dll和cefSharp.winform.dll后並測試。發現崩潰頻率有所降低,但是只要我們的播放控件進行播音操作就有可能出現崩潰。於是我們猜測可能是我們的播放控件與cef可能在XP下發生沖突產生錯誤了。
【偶然機會將問題定位】
於是,我和這邊負責播放控件的JW哥一起來排查問題,佳偉哥負責排查播放器控件,我負責cefSharp控件。就這樣兩個人苦逼的折騰一天,最后我們得出結論,問題出在cefSharp控件這一塊。JW哥調試后發現出現異常時,播放控件執行到最后的每次位置不一樣,而且播放器代碼相對穩定。我這邊則主要做了如下操作:
1.使用webBrowser替換cefSharp,結果程序在XP下正常。
2.客戶端只加載播放器,不播放。結果程序在XP下正常。
3.客戶端不加載播放器,只加載網頁,結果程序XP下正常。
4.客戶端去除CEF.Initialize()方法,結果程序正常。
當測試一天后,我發現去除了CEF.Initialize()方法程序正常,心中那喜悅之情,仿佛中了彩票500萬一樣。(這一天,太痛苦,所有的測試只能根據猜測,不能通過工具捕獲,NND)。
【心中的疑惑】
既然問題已經將范圍縮小到CEF.Initialize()的方法中,那就看看該方法做了什么操作,其實該方法做了只是創建一個Settings對象,去設置CEF的環境,settings里面主要是對系統做了緩存路徑和和設置Flash插件。我開始做了如下嘗試:
1.去除設置Flash插件,結果程序在XP下崩潰。
2.去除設置緩存路徑,結果程序XP下崩潰。
3.Setting只創建一個對象,什么也不設置,結果程序還是崩潰。
看到這三條測試結果,我瞬間崩潰。這是什么奇葩問題,難道不能對CEF進行設置????
【定位到最后原因】
思考之前在XP下簡單測試並沒有發現這個現象。本來系統對CEF環境位置是這樣的:

該環境初始化的方法是參照官網給出的例子的位置進行的CEF環境的初始化。但是當我們將CEF環境的初始化,放到MainForm的構造函數中,系統竟然不再出現崩潰。(看到這樣的結果,真有點百思不得其解)。
【思考】
對於本次的問題,我也做了如下的思考:
1.現在網絡上的一些開源的東西,其開發者可能對有些問題存在不清楚的地方。
2.其實本次問題一開始出現,自己就應該與之前XP系統測試結果作比較,(因為該環境初始化的位置XP測試過后整理的部分)。
3.面對問題,方式方法很重要
雖然問題是解決了,但是還沒有真正搞明白為什么這個CEF環境的初始位置會對系統的穩定性產生影響,希望看到此文章的大牛,有知道的給出回復,我將灰常謝謝!O(∩_∩)O
