代码改变世界

xcode 调试技巧

2013-03-22 10:49  三戒1993  阅读(124)  评论(0编辑  收藏  举报

IOS 调试技巧一:po 命令


po print object 的缩写,显示对象的文本描述(显示从对象的 description 消息获得的字符串信息)。

 

(gdb)po dic

{

  fruit=Apple;

  car=BMW;

  pc=IBM;

}

IOS 调试技巧二:print 命令


有点类似于格式化输出,可以输出对象的不同信息。

 

(gdb) print (int)[str retainCount]  

$1 = 2  



IOS 调试技巧三:help 命令


当你忘记某条gdb命令的语法时,可以使用 help 命令名 来获取帮助信息。如:help show 显示 show 命令的用法。

 

(gdb) help show

Generic command for showing things about the debugger.

 

List of show subcommands:

 

show annotate -- Show annotation_level

show architecture -- Show architecture of target

show args -- Show argument list to give program being debugged when it is started

show arm -- Various ARM-specific commands

show auto-raise-load-levels -- Show if GDB should raise the symbol loading level on all frames found in backtraces

show auto-solib-add -- Show autoloading of shared library symbols

show backtrace -- Show backtrace specific variables

show breakpoint -- Breakpoint specific settings

show can-use-hw-watchpoints -- Show debugger's willingness to use watchpoint hardware

show case-sensitive -- Show case sensitivity in name search

............

IOS 调试技巧四:在系统抛出异常处设置断点


有时候我们的程序不知道跑到哪个地方就 crash 了,而 crash 又很难重现。保守的做法是在系统抛出异常之前设置断点,具体来说是在 objc_exception_throw处设置断点。设置步骤为:首先在 XCode CMD + 6,进入断点管理窗口;然后点击右下方的 +,增加新的 Symbolic Breakpoint,在 Symbol 一栏输入:objc_exception_throw,然后点击 done,完成。 这样在 Debug 模式下,如果程序即将抛出异常,就能在抛出异常处中断了。比如在前面的代码中,我让 [firstObjctcrashTest]; 抛出异常。在 objc_exception_throw 处设置断点之后,程序就能在该代码处中断了,我们从而知道代码在什么地方出问题了。