po 为 print object 的缩写,显示对象的文本描述(显示从对象的 description 消息获得的字符串信息)。
(gdb)po dic
{
fruit=Apple;
car=BMW;
pc=IBM;
}
有点类似于格式化输出,可以输出对象的不同信息。
(gdb) print (int)[str retainCount]
$1 = 2
当你忘记某条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
............
有时候我们的程序不知道跑到哪个地方就 crash 了,而 crash 又很难重现。保守的做法是在系统抛出异常之前设置断点,具体来说是在 objc_exception_throw处设置断点。设置步骤为:首先在 XCode 按 CMD + 6,进入断点管理窗口;然后点击右下方的 +,增加新的 Symbolic Breakpoint,在 Symbol 一栏输入:objc_exception_throw,然后点击 done,完成。 这样在 Debug 模式下,如果程序即将抛出异常,就能在抛出异常处中断了。比如在前面的代码中,我让 [firstObjctcrashTest]; 抛出异常。在 objc_exception_throw 处设置断点之后,程序就能在该代码处中断了,我们从而知道代码在什么地方出问题了。