本篇探討支援案例中常被誤用的術語,尤其是「當機(crash)」這個詞。程式顯示錯誤對話框時,程序本身可能仍在運行中,這與真正的當機是完全不同的故障排除情境。精確使用術語有助於快速定位問題根源。
Genero 架構背景
Genero 解決方案涉及多個相互通訊的程序:應用程式伺服器上的 fglrun、GUI 客戶端 gdc.exe、透過 GAS 運作的 dispatcher 與 proxy 程序、資料庫,以及外部服務。要有效排除故障,必須先確認是哪個特定程序發生了問題。
例外(Exception)
例外是在解譯指令時發生的異常事件,可被程式捕捉並加以控制。開發者使用 WHENEVER 指令管理例外的處理方式。Genero BDL 提供了完整的錯誤清單,另有一類「無法捕捉的錯誤」——程式必須停止執行以確保安全,這類錯誤無法被攔截。
斷言(Assertion)
斷言是程式的內建檢查機制,用於在函式執行前驗證預期的條件是否成立。fglcomp 與 fglrun 等工具內含斷言,當斷言觸發時,程序會停止執行並將訊息寫入 stderr。這類情況不應出現在正式環境中,一旦發生就必須深入調查。
當機(Crash)
真正的當機是指程序在沒有任何錯誤對話框或有用的 stderr 訊息的情況下,突然停止執行。支援團隊通常會要求提供系統日誌,在 Windows 環境下還會需要使用者模式傾印檔(user mode dump)進行分析。
程序間的互動
了解各程序在通訊夥伴失敗時的反應至關重要。例如,若 gdc.exe 當機,fglrun 可能會產生 -6301 或 -6302 這類無法捕捉的錯誤。
常見的誤判情況
支援案例中,許多被描述為「當機」的情況,實際上只是例外。典型案例:使用者回報「GDC 當機」,但實際上 gdc.exe 只是顯示了一個錯誤對話框,該錯誤是由 fglrun 在特定檔案與行號產生的例外所引發。
重點摘要
精確使用術語有助於快速分類問題:
- 例外(Exception):異常事件,可被
WHENEVER捕捉;程序仍在運行,顯示錯誤對話框。 - 斷言(Assertion):工具內部的預期條件檢查失敗,程序停止並寫入 stderr;正式環境不應出現。
- 當機(Crash):程序無預警停止,無錯誤對話框,無有用的 stderr 訊息;需要系統日誌甚至傾印檔分析。
區分這三種情況,可以避免排除故障時走錯方向,大幅縮短問題解決的時間。