進公司兩年,還是有一些 Bug/Crash 未解,不是我不想解,只是不知道如何「重現」。偶然間我終於可以持續重現狀況,趕緊放下手邊工作,接上手機編譯 App,在 Xcode 設中斷點,便能知道前後變數當前的值,推敲源頭是什麼~😗
關鍵就在這個變數,如輸出:
(CGRect) previewFrame = (origin = (x = 37.5, y = NaN), size = (width = 300, height = NaN))
(CGRect) previewFrame = (origin = (x = 37.5, y = 124.19619750976563), size = (width = 300, height = 288.60760498046875))
可以看到第一行有 NaN,就是 Crash 的主因,讓後面拿到此值的變數,無法正常運作導致崩潰。正常的數值如第二行~

終於追到,是因為某個值「除以 0」導致後面運用此值的物件無法初始化而 Crash。
我先判斷 NaN 暫時攔下並在 Firebase Event 作次數紀錄,之後再追為何預覽圖會是 nil。😏
preview_width = t_width;
preview_height = preview_width/size.width*size.height;
// 211019 Jason: 先攔下 NaN,做紀錄
if (isnan(preview_height)) {
preview_height = preview_width;
}
把前人留下的問題解決掉,是不是很有成就感呢?😌
—
順便聊一下,昨天 10/18,跟大學同學在台大公館吃便當,遇到國泰大當機,我同學去 ATM 兩次被吃 6000 元,後來得知是國泰出包⋯⋯我們倆的薪轉戶都是國泰,只是我今天不缺錢,所以沒去用 ATM,不然我的錢也會被吃掉⋯⋯🤑
身為軟體工程師的我,有追根究底的精神,到底是怎樣的更新系統,會導致用戶的錢被吃掉呢?在銀行類公司上班總是要膽戰心驚開發、測試、除錯,因為一不小心,就會讓客戶損失幾百萬上下呢!
反觀我在小印刷廠寫 iOS App,一個 bug 頂多造成 100 人操作問題而無法或不想下單,只是讓公司損失 10000 元上下損失,相比之下,小巫見大巫了~🤓
Comments on: "[iOS] 判斷 NaN" (2)
隨口一說
要小心 如果 preview_width 有機會是 null 的話
bug 會重現的
讚讚
或許有可能,到時候再看看若還有 crash 的話。目前是發現除以 0,導致 crash 問題😬
讚讚