IOSXcode調(diào)試攻略
來源:易賢網(wǎng) 閱讀:1158 次 日期:2014-11-04 11:26:43
溫馨提示:易賢網(wǎng)小編為您整理了“IOSXcode調(diào)試攻略”,方便廣大網(wǎng)友查閱!

1. Xcode內(nèi)置GDB,可以使用GDB調(diào)試,調(diào)試命令:

1.1 po 命令:為 print object 的縮寫,顯示對象的文本描述

(lldb) po [$eax class]:輸出異常對象的地址


(lldb) po [$eax name]:輸出這個異常的名字


(lldb) po [$eax reason]:這個將會輸出錯誤消息:


(lldb) “po $eax”:對這個對象調(diào)用“description”方法和打印出來

“$eax”是cup的一個寄存器。在一個異常的情況下,這個寄存器將會包含一個異常對象的指針。注意:$eax只會在模擬器里面工作,假如你在設備上調(diào)試,你將需要使用”$r0″寄存器

1.2 print 命令:有點類似于格式化輸出,可以輸出對象的不同信息

比如:print (char*)[[dic description] cString]、(lldb) print (int)[label retainCount]

1.3 info 命令:我們可以查看內(nèi)存地址所在信息

1.4 info line *內(nèi)存地址:可以獲取內(nèi)存地址所在的代碼行相關信息

1.5 show 命令:顯示 GDB 相關的信息。如:show version 顯示GDB版本信息

1.6 bt: 顯示當前進程的函數(shù)調(diào)用棧的情況;"up num":查看調(diào)用的詳細信息;down:返回棧列表;l:顯示詳細代碼信息;p:輸出數(shù)值。

2. 添加全局斷點(Add Exception BreakPoint):

2.1 添加步驟:

1. In the bottom-left corner of the breakpoints navigator, click the Add button.

2. Choose Add Exception Breakpoint.

3. Choose the type of exception from the Exception pop-up menu.

4. Choose the phase of the exception handling process at which you want program execution to stop.

5. Click Done.

2.2 使用場景:

程序因為SIGABRT而crash,想要定位到導致crash的行。

3. 添加符號斷點(Add Symbolic BreakPoint):

3.1 斷點執(zhí)行的時機:Symbolic breakpoints stop program execution when a specific function or method starts executing

3.2 添加步驟:

1. Steps In the bottom-left corner of the breakpoint navigator, click the Add button.

2. Choose Add Symbolic Breakpoint.

3. Enter the symbol name in the Symbol field.

4. Click Done.

3.3 使用場景:

當想讓系統(tǒng)在某個指定條件處中斷時,設置相應的斷點。

比如:

objc_exception_throw:在系統(tǒng)拋出異常處設置斷點。

-[NSException raise]:

4. 設置NSZombieEnabled、MallocStackLogging、NSAutoreleaseFreedObjectCheckEnabled、NSDebugEnabled:

4.1 設置方法:

1. Product->Edit Scheme...->Run...->EnvironmentVariables.

2. add NSZombieEnabled,set the value with YES

3. add MallocStackLogging, set the value with YES.

4. add NSAutoreleaseFreedObjectCheckEnabled, set the value with YES.

5. add NSDebugEnabled, set the value with YES.

4.2 使用場景:

主要為了解決EXC_BAD_ACCESS問題,MallocStackLogging用來啟用malloc記錄(使用方式 malloc_history ${App_PID} ${Object_instance_addr})。

4.3 需要注意的問題

NSZombieEnabled只能在調(diào)試的時候使用,千萬不要忘記在產(chǎn)品發(fā)布的時候去掉,因為NSZombieEnabled不會真正去釋放dealloc對象的內(nèi)存。

5. 重寫respondsToSelector方法

5.1 實現(xiàn)方式

#ifdef _FOR_DEBUG_

-(BOOL) respondsToSelector:(SEL)aSelector {

printf("SELECTOR: %sn", [NSStringFromSelector(aSelector) UTF8String]);

return [super respondsToSelector:aSelector];

}

#endif

5.2 使用方法:

需要在每個object的.m或者.mm文件中加入上面代碼(應該可以使用類屬實現(xiàn)),并且在other c flags中加入-D _FOR_DEBUG_(記住請只在Debug Configuration下加入此標記)。這樣當你程序崩潰時,Xcode的console上就會準確地記錄了最后運行的object的方法。

更多信息請查看IT技術專欄

更多信息請查看技術文章
易賢網(wǎng)手機網(wǎng)站地址:IOSXcode調(diào)試攻略

2025國考·省考課程試聽報名

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 加入群交流 | 手機站點 | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:526150442(9:00—18:00)版權所有:易賢網(wǎng)