印象最深的一個bug——排查修復問題事件BEX引發的谷歌瀏覽器閃退崩潰異常


前言

  • 最近,我們部門負責項目運維的小王頻頻接到甲方的反饋,運行的項目使用谷歌瀏覽器登錄后,每次點擊處理2秒后,瀏覽器自動閃退崩潰.小王同學折騰了一個星期,還沒找到問題的原因.甲方客戶都把問題反饋給項目經理了.項目經理給小王撂下狠話,“明天客戶再給我打電話,你以后再也沒機會穿拖鞋上班了..”
  • 小王擾了擾頭上剩在中間的頭發,一臉委屈的看向我,無奈中透着一點深情
  • “Chova大哥哥,你來幫我看看嘛~以后晚上陪你一起健身!”
  • 看着他期待的目光,我心目不免一緊,哆哆嗦嗦地打開了他電腦上的谷歌瀏覽器...

問題一:問題事件BEX瀏覽器停止工作

  • 點擊項目中問題處置頁面跳轉后,光標出現轉圈 ,2秒后彈框提示Google Chrome已停止工作
    在這里插入圖片描述

原因

  • 軟件中dll文件和瀏覽器發生沖突

解決

刪除造成沖突的dll文件

  • 點擊查看問題詳細信息,查看瀏覽器崩潰的問題簽名
問題簽名:
  問題事件名稱:  BEX
  應用程序名:  chrome.exe
  應用程序版本:  69.0.3497.100
  應用程序時間戳:  5b9cbd4f
  故障模塊名稱:  BrowserUrl.dll
  故障模塊版本:  0.0.0.0
  故障模塊時間戳:  5f4b9830
  異常偏移:  00004138
  異常代碼:  c0000409
  異常數據:  00000000
  OS 版本:  6.1.7601.2.1.0.256.48
  區域設置 ID:  2052
  其他信息 1:  031a
  其他信息 2:  031ac9a5aca2c7bab1c2347d68169e05
  其他信息 3:  e951
  其他信息 4:  e951aede12191034f862a087b85a801a
  • 問題簽名中的故障模塊名稱就是造成瀏覽器崩潰的dll文件
  • 通過在瀏覽器導航欄中輸入以下路徑查看加載的dll文件位置:
chrome://conflicts/
  • 將原來的dll備份到其余文件夾,用於后續恢復
  • 在軟件文件夾中刪除軟件中造成沖突的dll文件

修復造成沖突的軟件

  • 刪除造成沖突的dll文件只是暫時解決瀏覽器停止工作的問題
  • 因為dll文件時軟件的運行依賴,如果隨便刪除會導致軟件本身運行異常
  • 如果想要徹底解決BEX問題事件,需要修復造成沖突的軟件,大部分是軟件本身存在問題,建議下載官方軟件

問題二:谷歌瀏覽器閃退

  • 點擊項目中問題處置頁面跳轉后,光標出現轉圈 ,2秒后瀏覽器閃退消失
  • 項目部署在同一個服務器上,使用不同的計算機進行測試,問題只是在部分計算機中出現

原因

  • 由於問題僅在部分電腦上出現,初步判定不是項目的問題,從系統方向排查問題
  • 對無問題計算機和問題計算機,初步判定為問題計算機中的安全策略配置導致瀏覽器訪問發生閃退崩潰的問題

解決

刪除安全策略

  • 進入控制面板點擊用戶賬戶查看當前用戶為是否為管理員賬戶
  • 進入C盤修改策略文件彈出框提示需要管理員權限
  • 打開運行輸入gpedit.msc打開本地策略組
  • 進入到本地策略組中的用戶賬戶控制以管理員批准模式控制其余賬戶
  • 禁用用戶賬戶控制, 重啟計算機
  • 開機后進入C盤直接刪除操作文件

增加用戶權限

  • 在系統中的賬戶中查看當前用戶賬戶
  • 點擊此電腦,選擇屬性中的安全選項卡,選中高級
  • 更改當前用戶賬戶所有者並替換子容器對象的所有者
  • 權限中添加當前用戶賬戶完全控制權限繼承

問題三:錯誤碼STATUS_INVALID_IMAGE_HASH瀏覽器崩潰

  • 谷歌瀏覽器崩潰,錯誤碼為STATUS_INVALID_IMAGE_HASH
  • 谷歌瀏覽器插件報錯,並彈出錯誤提示框

原因

  • Google Chrome79版本中重新啟用了渲染器代碼完整性保護Renderer Code Integrity Protection. 這個會導致簽名不是谷歌或者微軟的模塊被阻止加載

解決

禁用渲染器代碼完整性保護功能

  • 通過文件禁用渲染器代碼完整性保護功能 (推薦) :
      - 打開運行輸入regedit進入注冊表編輯器
      - 進入文件夾 HKEY_LOCAL_MACHINE \ SOFTWARE \ Policies \ Google \ Chrome
      - 在右側的窗口中,右鍵單擊新建, 選擇DWORD(32位)值創建新的密鑰
      - 雙擊新建的密鑰,將值名稱修改為RendererCodeIntegrityEnabled, 並將值數據輸入為0
      - 重啟谷歌瀏覽器
  • 使用命令禁用渲染器代碼完整性保護功能:
      - 打開運行,輸入以下命令可以禁用渲染器代碼完整性保護功能,其余功能禁用方式類似
      shell   chrome.exe --disable-features=RendererCodeIntegrity  

總結

Windows檢查事件日志

  • 右鍵開始圖標,打開事件查看器
  • 點擊應用程序和服務, 進入Microsoft => Windows => CodeIntegrity => 可操作
  • 查找問題事件ID為3033的事件
  • 點擊問題事件的詳細信息,會顯示導致瀏覽器崩潰的dll文件的名稱和位置

Google Chrome顯示模塊加載列表

  • 在導航欄輸入以下路徑,可以顯示加載的各個模塊的信息:
chrome://conflicts/

在這里插入圖片描述

一點思考

  • 這個BUG是我目前修復的千千萬萬個項目的BUG中印象最深的一次BUG,由於問題事件BEX引發的谷歌瀏覽器閃退崩潰的異常問題.這個BUG因為其不可復現性導致特別難以發現和解決,正是由於這一次的BUG解決過程,讓我了解到了一位攻城獅在項目開發維護過程中實際經驗的重要性,多思考,多實踐,多多積累經驗,才是一位攻城獅的成長之路.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM