這兩天在解一個只有release才會發生的bug,我的直覺解法先找當的地方。所以一開始就大量的插log,但所有想得到的地方都插log了。但是沒想到所有函式都正常執行到最後,完全不知道是哪裡掛了。而這個bug難解的另一個原因,他是移植的功能,也就是是從其地方的程式碼抄過來的,裡面的邏輯我大部分沒仔細看過,也完全不想動。我可不想解了一個又產生另外一個。
花了快一天的工作天,還是找不出來,最後只好猜猜看,一段一段mark,沒想到這招反而找到了,是postmassage的問題,因為延遲執行,所以相關函式其實都有執行到最後。我原本也有想到是postmessage的相關函式。但是相關函式也插了log,也都正常執行。最後是用註解法,猜到是註冊的地方出錯了。出錯的原因是函式的宣告。原本我將post呼叫的函式,直接引用已經存在的一般函式,不是特殊宣告的格式,改為正常格式就可以了。這種編譯器可以過,Debug模式也沒問題,而在release也要執行兩次才會發生,真的是很特別的bug,紀錄一下。
花了快一天的工作天,還是找不出來,最後只好猜猜看,一段一段mark,沒想到這招反而找到了,是postmassage的問題,因為延遲執行,所以相關函式其實都有執行到最後。我原本也有想到是postmessage的相關函式。但是相關函式也插了log,也都正常執行。最後是用註解法,猜到是註冊的地方出錯了。出錯的原因是函式的宣告。原本我將post呼叫的函式,直接引用已經存在的一般函式,不是特殊宣告的格式,改為正常格式就可以了。這種編譯器可以過,Debug模式也沒問題,而在release也要執行兩次才會發生,真的是很特別的bug,紀錄一下。
void OnImportFav(WPARAM wParam, LPARAM lParam); //參數就算沒用到,也需一致
DECLARE_MESSAGE_MAP() //必須加在message_map內
留言