3

我正在开发一个 iPhone 应用程序,该应用程序使用我拥有源代码的外部库。在调试期间,一些对象在调试器中列为 0x0,但应用程序运行良好。此外,一些对象地址指向错误的东西。这些符号在外部库中。如果我实际上在外部库中跟踪文件,地址就可以了。

有没有人建议如何阻止这种行为?

4

3 回答 3

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;
}
于 2009-10-05T19:57:24.083 回答
0

正如 zPesk 所指出的,0x0 是 nil,这是尚未初始化的对象(尤其是实例变量)的常用值。我不确定你所说的“指向错误的东西”是什么意思。如果您尚未初始化本地(堆栈)变量,它可能会指向任何随机地址,直到它被初始化。你有什么行为有问题?

于 2009-08-17T03:20:33.077 回答
0

你曾经能够解决这个问题吗?在混合 Thumb 和 ARM 模式时,我也注意到 gdb 中的奇怪行为。例如,gdb 报告的变量地址似乎与使用 printf("%p\n") 语句报告的地址相差 64 个字节。也许 gdb 需要明确告知当前操作模式是 ARM 还是 Thumb...?

于 2010-06-08T17:08:16.767 回答