移至主內容
DarkRanger's Secret Area

主導覽

  • 首頁
  • 關於本站
  • Linux
  • 程式開發
  • N900
  • 譯文
  • 資訊技術辭典

文章分類

  • 影劇
  • 遊戲
  • 筆記
  • 雜文
  • 資訊技術
  • 站務訊息

最新內容

  • How-To:Linux 安裝 DevilutionX
  • 於 2012 年建立的一份音樂播放清單
  • How-To:Linux 安裝 Medal of Honor: Allied Assault
  • Fallout 4 (2015)
  • How-To:Linux 安裝 Blood
  • 《終極動員令》系列早期作品原始碼釋出
  • How-To:Linux 安裝 Doom 3
  • Nausicaä of the Valley of the Wind (1984)
  • Intel 內顯與 Linux 桌面死當問題排解
  • 《哥吉拉 -1.0》心得補遺

Bug 回報的奇特經驗

發表日期:星期四, 02/06/2025 - 22:30

前一陣子試著對 ScummVM 回報一項問題,雖然 DR 僅是回報問題而已,並非是最終找出問題肇因、並且修正問題的貢獻者。然而在過程中則發掘到一些似乎是前所未聞之事,相當罕見,好像是應該稍微記錄下來。

 

首先是不知何故,除了首頁以外,DR 始終沒有辦法檢視 ScummVM Issue Tracker 網站上任何進一步的功能頁面,也就無法查看問題清單,以及提交 Bug 報告。因為一律都會出現以下的純文字輸出訊息(時間日期則會異動):

HTTP/1.1 NoneServer: gunicorn
Date: Sun, 29 Dec 2024 13:47:20 GMT
Connection: close

 

試過不同的網頁瀏覽器、私隱模式、不同作業系統、以及不同地區的 IP 位址(透過 VPN),都狀況依舊。唯獨發覺若是使用 curl 而非網頁瀏覽器,則能夠正常回傳頁面,並且也確認問題跟客戶端輸出的使用者代理字串無關,但實務上也很難真的僅僅用 curl 去操作網站。

 

由於這情形實在離奇,搞不清楚問題出在哪裡,DR 只能試著在 ScummVM 的 Discord 上反映自己遇到這樣的狀況。於是接著就是一連串的線上對話,不同人提出了不同的見解,而自己也必須說明已經做過了哪些嘗試。其中有人注意到瀏覽器擷圖中所顯示的中文介面(自己一直以來都習慣於將 Mozilla Firefox 後來預設停用的選單列恢復啟用),也引起了一些詢問:

「你是在牆內嗎?」

「不,台灣沒有牆。」

 

……不過有留意到中文環境這點,也許是一定程度有助於釐清問題的方向。網站的維護者在查詢系統的錯誤日誌後,終於找到了罕見的真相──這恐怕是只有台灣繁中語系(zh_TW)的使用者才會遇到的錯誤,與上游套件錯誤地進行日期格式的轉換有關:

https://trac.edgewall.org/ticket/13482

 

對此情形,維護者先是在線上對話中提供了規避此錯誤的方法,再找時間徹底修正了問題。於是 DR 就終於可以真正地回報 ScummVM 的 Bug,而不是 ScummVM 網站的 Bug……那麼在終於提交 Bug 報告後,也順利地有開發者分析出問題點並提出修正。不過若檢視修正的差異細節(#6385),則出現了另一件奇事:可以看到在原先還未修改前的實作中,有一段程式碼結構使用了相當多階層的 if else 條件式。

 

雖然不敢說自己的程式設計經驗符合產業標準,不過倘若姑且就按照 DR 個人的認知,則 if else 最為常見通常是最多兩層,達到三層應該就會讓人很想要動手重構了──然而這裡的 if else 數算下來卻有八層之多,真的是徹底的金字塔結構,令人瞠目結舌。於是粗略地翻了一下歷史記錄,發現這段程式碼也大概存在有十年以上了。而最起初的項目貢獻者完全可以接受程式碼長這個模樣,似乎都未曾想要出手整理它,讓人覺得也是相當奇特。

 

雜文