至於紅色方框中的內容是三種特殊符號相對應的定義。
符號標記 定義 @expression@ LLDB表達式 %B 斷點的名稱 %H 遇到該斷點的次數
參數通過空格表示分割,也可以在兩個@字符之間包含LLDB表達式。
一般情況下,Xcode會異步執行Shell Command,也就是說,Shell Command 和調試器將會同步執行。如果希望調試器在Shell Command命令完成後運行,則可以勾選下面的Wait until done選項。
在斷點導航面板中,可以看到所有的斷點。
這個斷點的作用和異常斷點類似,只不過這個斷點只有在openGL ES錯誤發生的時候纔會觸發。
Local Variables。查看本地變量。
Variables, Registers, Globals and Statics。查看全部變量,包括寄存器和全局變量等,如圖15-25所示,
宏。注意,NSAssert並不是函數,它的定義如下:
#define NSAssert(condition, desc, ...)
其中第一個參數condition是布爾表達式,第二個參數desc是描述信息,參數後面的...是格式化desc描述信息
的。如果condition爲NO,則輸出desc描述信息,並拋出異常NSInternalInconsistencyException;如果
#define NAME @"測試版本"
#else
#define NAME @"上線版本"
我們在ios開發中會碰到的很多crash問題,如果Debug調試模式的話,我們可以往往很容易的根據log的輸出定位到導致crash的原因,但對於已經上線的應用,或者是release環境包導致的crash,我們就需要一些特殊的手段來通過crash log進行分析定位了。
通過參考網上的一些資料,總結了一下,下面介紹一下通過dSYM文件以及crash log分析定位的方法。
1.導出crash log
通過Xcode的Organizer查看某臺iphone設備的DeviceLog,選擇需要的crash log,導出XXX.crash文件。
2.找到對應的app文件
3.找到對應build版本的dSYM文件
每一個xx.app, xxx.app.dSYM文件都擁有相應的uuid,crash文件也有uuid,只有三者uuid一至才表明之三者可以解析出正確的日誌文件。
查看xx.app文件的uuid的方法,在terminal中輸入命令:
查看xx.app.dSYM文件的uuid的方法,在terminal中輸入命令:
而.crash的uuid位於,crash日誌中的Binary Images:中的第一行尖括號內。如:
armv7 <8bdeaf1a0b233ac199728c2a0ebb4165>
5.通過symbolicatecrash分析crash文件