我正在使用一个iPhone应用程序,它正在使用我拥有源代码的外部库。在调试期间,一些对象在调试器中列为0x0但应用程序运行正常。此外,一些对象地址指向错误的东西。 这些符号位于外部库中。如果我实际在外部库中跟踪文件,地址就可以了。
有没有人建议如何阻止这种行为?
答案 0 :(得分:1)
更新:目标设置>构建标签> GCC 4.2代码生成> “为Thumb编译”
我关闭了此目标设置,gdb问题消失了。
-
嗨约翰。
我理解你所指的是什么。我也看到一个问题,gdb和NSLog()在我的代码的某些部分给出了不同的指针结果。
在一个煮沸的示例中,当我在此函数的任何一行上设置断点时,gdb无法报告“指针”的正确值:
id testPointer( id pointer )
{
NSLog( @"pointer value: %p", pointer );
@try
{
NSLog( @"foo" );
}
@catch ( NSException *e )
{ }
@finally
{ }
return pointer;
}
答案 1 :(得分:0)
正如zPesk所说,0x0是nil,这是尚未初始化的对象的常见值(特别是实例变量)。我不确定你的意思是“指向错误的东西。”如果尚未初始化本地(堆栈)变量,则它可能指向任何随机地址,直到它被初始化。你遇到什么问题?
答案 2 :(得分:0)
您是否能够解决此问题?我也注意到在混合Thumb和ARM模式时gdb中的奇怪行为。例如,似乎gdb报告的变量地址与使用printf(“%p \ n”)语句报告的地址完全相差64个字节。也许gdb需要明确告知当前的操作模式是ARM还是Thumb ......?