1、gdb
调试终端窗口是一种与gdb进行交流的途径。当程序是终止或者是停在断点处时,你可以发送命令给gdb。当出现gdb提示符(prompt)的时候你可以与gdb进行交互。
gdb command:http://developer.apple.com/library/mac/#documentation/DeveloperTools/gdb/gdb/gdb_4.html
xcode自动的处理你的命令,并在Debugger Console中显示相应的值。
2、"po" print object
po :输出objective-c对象的文本表现形式。
po stringDictionary在这种情况下,gdb调用description方法,这个description方法被始终用来从对象产生字符串在cocoa中,你可以覆盖它并提供一个字符串用来表示你的对象。
{ firstKey = firstObject; secondKey = secondObject; thirdKey = thirdObject;}3、xcode 数据格式化
如果调试器仍人停留在同一行,这时候你在xcode中打开Debugger window,参数变量列表将包括全部d额字符串字典。对于字典对象来说,xcode将会显示key/value pairs在摘要栏位中。
这信息来自于“Data Formatter”, 它默认的建立字典,你可以学习它们在Xcode Debugging Guide: Using Data Formatters。尤其值得一提的是,一个数据格式告诉xcode怎样取得需要的数据并展示在栏位中。
如果我们右击鼠标右键在字符串字典行,将会显示一个不同的数据格式在Debugger window中,如果你选择“Print Description to Console"在上下文菜单中。
Printing description of stringDictionary:<CFDictionary 0x35edd0 [0xa0b06174]>{type = immutable, count = 3, capacity = 3, pairs = ( 0 : <CFString 0x2090 [0xa0b06174]>{contents = "secondKey"} = <CFString 0x2080 [0xa0b06174]>{contents = "secondObject"} 1 : <CFString 0x20b0 [0xa0b06174]>{contents = "thirdKey"} = <CFString 0x20a0 [0xa0b06174]>{contents = "thirdObject"} 3 : <CFString 0x2070 [0xa0b06174]>{contents = "firstKey"} = <CFString 0x2060 [0xa0b06174]>{contents = "firstObject"})}除了数据格式化,“Print Description to Console”将会输出同样的信息在使用“po”命令的时候。在这种情况下,它清楚的输出字典更多更详细的描述。包括信息的类型,尤其是使用CFDictionary数据格式化(它并不是标准定制的Xcode数据格式化方式)。
4、"print"命令
"po"命令在gdb中只是显示对象调用description的结果。然而使用更加通用的“print”命令,我将可以做更多的事情。
我可以使用如下命令:
print (char*)[[stringDictionary description] cString]上面的命令将会输出:
$1 = 0x360031 "{\n firstKey = firstObject;\n secondKey = secondObject;\n thirdKey = thirdObject;\n}"它显示了同样的数据表示和"po",仅仅是没有很好的数据格式。
我同样可以使用如下命令:
print (int)[stringDictionary retainCount]用来解决保留字典的引用计数,帮助我们解决内存疑问或者没有被释放的对象。
在xcode中"po"命令和"Print Description to Console"是等价的,“print”命令也是差不多的。你可以打开窗口描述从 Run->Show->Expressions menu。