XCode Debug 模式斷言擒 bug 記

2021-06-09 16:11:44 字數 2700 閱讀 9474

認識到debug模式和斷言帶來的方便,我迫不及待地便將專案的schema重新設定回了debug模式

以前不懂,認為程式在發布的時候用的是release模式,為了降低發布時出現bug的機率,

便很早前就將程式設定為debug模式。

現在看來真是愚蠢之極。

不知道有多少次,我在除錯bug的時候,判斷空指標用了如下的**

if(var == nil)

浪費了多少書寫時間,bug除錯完畢我又得注釋或者刪除之。

這都是我流過的汗水,花過我的時間,證明過我曾為程式的健壯性而努力過。

刪除過後,別人對我的辛勞付出一無所知。

這自然是由我不知道使用「好用的工具」所致,是一種愚蠢的行為,但這畢竟。。。

是有菜鳥進步為老鳥所必須經歷的路程,不能一棒子將我打死吧?

拉回!用了debug模式,我知道下面的方法來暴力除錯更加有效率

nsasser(var!=nil, nslog(@"var==nil,****!"));

**量不見得少了多少,或許還多了,但使用完畢之後不用再回頭來擦屁股,

而且燕過有痕。。。這便是效率的提公升。

而且讓別人知曉,我不僅僅只是做出了功能,而且,我的功能還很健壯~

拉回,again!

ok,已經認識到debug模式和nsassert帶來的好處。

話說我已將release模式改為debug模式,原本能夠正常執行的程式便卡住。

看控制台輸出:

2012-03-14 14:14:11.600 gamesceneex[26517:707] *** assertion failure in -[cclayer addchild:z:tag:], /users/user/documents/gamescene/libs/cocos2d/ccnode.m:383

意思很明了,有乙個斷言失敗了。

find selected text in workspace,發現斷言的相關**為ccnode 的

-(void) addchild: (ccnode*) child z:(nsinteger)z tag:(nsinteger) atag

} 也就是說,有乙個節點在被新增的時候,他的parent成員變數已經不為 nil 了(說明他已經被新增過一次了)~

開始我沒有暴力調,在上述方法裡面下了個斷點。

我的想法是在爆出錯誤的時候,在 by thread 裡面走回錯誤報出的上一級方法。

我如願以償,找到了錯誤丟擲的上一級方法。

但是,很不幸的是xcode所提示的**行數總會有一些出入,我被暗算好幾次了~

這次我有了經驗,沒有在讓我想不通的地方多做停留

(實際上有時候xcode所定位到出的bug拋出行數非常的不準確,稍作檢查發現並無問題之後千萬不要再多浪費時間)

很果斷的便在bug可能出現的方法裡面加了10數句 nslog,直接便進入 暴力除錯的環節了

暴力調雖然有點機械,顯得蠢,但目前對我來說還是相當有效的。。

2012-03-14 14:14:11.322 gamesceneex[26517:707] cocos2d: su***ce size: 960x640

2012-03-14 14:14:11.362 gamesceneex[26517:707] 11

2012-03-14 14:14:11.366 gamesceneex[26517:707] 22

2012-03-14 14:14:11.369 gamesceneex[26517:707] 33

2012-03-14 14:14:11.378 gamesceneex[26517:707] 44

2012-03-14 14:14:11.399 gamesceneex[26517:707] 55

2012-03-14 14:14:11.414 gamesceneex[26517:707] 66

2012-03-14 14:14:11.453 gamesceneex[26517:707] 77

2012-03-14 14:14:11.456 gamesceneex[26517:707] 88

2012-03-14 14:14:11.473 gamesceneex[26517:707] 99

2012-03-14 14:14:11.476 gamesceneex[26517:707] 10

2012-03-14 14:14:11.573 gamesceneex[26517:707] 11

2012-03-14 14:14:11.595 gamesceneex[26517:707] 12

2012-03-14 14:14:11.600 gamesceneex[26517:707] *** assertion failure in -[cclayer addchild:z:tag:], /users/user/documents/gamescene/libs/cocos2d/ccnode.m:383

果不其然,很快我便定位到 bug 丟擲的準確位置了,以下貼出 bug出現的那個方法:

ok,收工!

XCode Debug 模式斷言擒 bug 記

認識到debug模式和斷言帶來的方便,我迫不及待地便將專案的schema重新設定回了debug模式 以前不懂,認為程式在發布的時候用的是release模式,為了降低發布時出現bug的機率,便很早前就將程式設定為debug模式。現在看來真是愚蠢之極。不知道有多少次,我在除錯bug的時候,判斷空指標用了...

eager模式造成的bug

在 tensorflow1.x 版本中,可以通過命令 tf.enable eager execution 開啟eager模式,但是在該模式下,使用 tf.keras.layers.input 會遇到問題 import tensorflow as tf tf.enable eager executio...

網遊運營中的外掛程式與bug處理模式

基本上此類問題依靠兩個主要渠道 1.玩家舉報,走客服路徑,客服扮演事件與問題管理的角色,問題一旦轉入研發則進入公司內部流程,在客服 運維 研發 產品等職能前顯示流程狀態和全程監控 在實際的環境中客服的事件,問題管理平台與後面的工作流平台,以及bi等可能是公司內部的一套資訊管理平台,畫圖時分開便於理解...