我正在开发一个 iPhone 应用程序,该应用程序使用我拥有源代码的外部库。在调试期间,一些对象在调试器中列为 0x0,但应用程序运行良好。此外,一些对象地址指向错误的东西。这些符号在外部库中。如果我实际上在外部库中跟踪文件,地址就可以了。
有没有人建议如何阻止这种行为?
我正在开发一个 iPhone 应用程序,该应用程序使用我拥有源代码的外部库。在调试期间,一些对象在调试器中列为 0x0,但应用程序运行良好。此外,一些对象地址指向错误的东西。这些符号在外部库中。如果我实际上在外部库中跟踪文件,地址就可以了。
有没有人建议如何阻止这种行为?
更新:目标设置 > 构建选项卡 > 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;
}
正如 zPesk 所指出的,0x0 是 nil,这是尚未初始化的对象(尤其是实例变量)的常用值。我不确定你所说的“指向错误的东西”是什么意思。如果您尚未初始化本地(堆栈)变量,它可能会指向任何随机地址,直到它被初始化。你有什么行为有问题?
你曾经能够解决这个问题吗?在混合 Thumb 和 ARM 模式时,我也注意到 gdb 中的奇怪行为。例如,gdb 报告的变量地址似乎与使用 printf("%p\n") 语句报告的地址相差 64 个字节。也许 gdb 需要明确告知当前操作模式是 ARM 还是 Thumb...?