我们需要得到当前进程的函数调用栈的情况,以此回溯找到我们自己的方法。这时我们需要用到backtrace命令,一般简写为bt:
们还可以使用list(简写为l)命令,打印出更多信息:
一个很重要的调试方法是输出表达式和变量的值。在gdb中,这是通过print命令完成的。
在print命令后追加/format可以格式化输出。/format是一个gdb的格式化字符串,比较有用的格式化字符有 x:十进制数; c:字符; a:地址等。
print-object方法(简写为po)用来输出obj-c中的对象。它的工作原理是,向被调用的对象发送名为debugDescription的消息。它和常见的description消息很像。
举例来说,让我们输出一下autorelease
pool:
这个命令不仅仅可以输出显式定义的对象,也可以输出表达式的结果。这次我们测试一下nsobject中debugDescription的方法签名:
是不是很方便。但是要注意,gdb也许会不能识别NSObject这样的类名。这时我们就要使用一些小技巧,比如说用NSClassFromString来获得类名:
返回值是对象的表达式可以用po命令输出结果,那么返回值是基本类型的方法又怎样呢?显然,它们是可以用p命令输出的。但是要小心,因为gdb并不能自动识别出返回值的类型。所以我们在输出前要显式地转换一下:
有时,查看数值程度的能力还是稍弱了一点,我们还想能够修改变量。这也很简单,只需要使用set命令:
我们可以用任意表达式给一个变量赋值。比如说新创建一个对象然后赋值:
Xcode的调试器为用户提供了一个GDB的界面,GDB是GNU组织的开放源代码调试器。您可以在Xcode的图形界面里做任何事情;但是,如果您需要
您可以在命令行里使用GDB的命令。
要在一个调试的任务里输入GDB命令行命令:
在工具栏里点击Console Drawer (控制台抽屉窗口)按钮打开控制台。
您可以在控制台里查看Xcode调试器发送给GDB的命令,或者您可以直接在控制台里输入GDB命令。在控制台窗口里点击然后在gdb提示符后面 输入命令。
- 命 令 解释
- break NUM 在指定的行上设置断点。
- bt 显 示所有的调用栈帧。该命令可用来显示函数的调用顺序。
- clear 删 除设置在特定源文件、特定行上的断点。其用法为:clear FILENAME:NUM。
- continue 继续执行正在调试的程序。该命令用在程序 由于处理信号或断点而
- 导致停止运行 时。
- display EXPR 每次程序停止后显示表达式的值。表达式由程序定 义的变量组成。
- file FILE 装载指定的可执行文件进行调试。
- help NAME 显 示指定命令的帮助信息。
- info break 显 示当前断点清单,包括到达断点处的次数等。
- info files 显 示被调试文件的详细信息。
- info func 显示所有的函数名称。
- info local 显 示当函数中的局部变量信息。
- info prog 显示被调试程序的执行状 态。
- info var 显示所有的全局和静态变量名称。
- kill 终 止正被调试的程序。
- list 显示源代码段。
- make 在 不退出 gdb 的情况下运行 make 工具。
- next 在 不单步执行进入其他函数的情况下,向前执行一行源代码。
- print EXPR 显 示表达式 EXPR 的值。
- print- object 打印一个对象
- print (int) name 打印一个类型
- print- object [artist description] 调用一个函数
- set artist = @"test" 设置变量值
- whatis 查 看变理的数据类型