Just My Life & My Work

[iOS] 判斷 NaN

進公司兩年,還是有一些 Bug/Crash 未解,不是我不想解,只是不知道如何「重現」。偶然間我終於可以持續重現狀況,趕緊放下手邊工作,接上手機編譯 App,在 Xcode 設中斷點,便能知道前後變數當前的值,推敲源頭是什麼~😗

當我重複進出某頁,就會 Crash🤪

關鍵就在這個變數,如輸出:

(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 元上下損失,相比之下,小巫見大巫了~🤓

參考:How to check for NaN value in Objective-C (iOS)

Comments on: "[iOS] 判斷 NaN" (2)

  1. 隨口一說
    要小心 如果 preview_width 有機會是 null 的話
    bug 會重現的

隨意留個言吧:)~

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

標籤雲

%d 位部落客按了讚: