【问题标题】:"no symbol XXX in current context" for specific classes in debugging of XCode ip* projectXCode ip* 项目调试中特定类的“当前上下文中没有符号 XXX”
【发布时间】:2011-04-08 21:22:17
【问题描述】:

我随机收到此错误,但无法找到解决方法:变量窗格(右上角)为空白,gdb "po" 命令无法打印任何变量。

“po”命令甚至不知道“self”:

该问题专门针对MGMinimap 类中的所有 方法。无处。我可以从 A 调试并查看 self 和其他人,然后只要 A 进入 MGMinimap,变量窗格就会像上图一样变为空白,并且 gdb 根本不起作用。

这个问题的临时解决方案是在 XCode 中创建一个新类,名为 e.g. MGMinimapNew,将真实类的 .h 和 .m 中的所有内容复制粘贴到新类中,将旧类文件重命名为例如MGMinimapOld.m|h,然后将新类重命名为 MGMinimap.m|h。这样做,事情又开始工作了。不过,仍在寻找真正的答案。

更新回应Rob Napier:

  • 运行>与调试器同步。我一直对此寄予厚望。有时它甚至可以工作。
    • 很遗憾,这不是那些场合之一 :)
  • 选择不同的堆栈帧,然后再次选择此堆栈帧。
    • 没有变化
  • 切换线程并切换回来。
    • 没有变化
  • 跨步。通常转到下一行会同步备份。
    • 没有变化

【问题讨论】:

    标签: iphone xcode debugging ipad variables


    【解决方案1】:

    这通常意味着您引用的对象以某种方式超出了范围。我会检查变量或对象实例是否仍在范围内。

    【讨论】:

    • 不确定为什么会发生这种情况。甚至不确定我明白你在说什么。为什么/如何“自我”超出范围?
    • self 可以超出范围(对于“范围”的足够广泛的含义),如果您在另一个线程上被释放,但其症状是崩溃,而不是 gdb 的上述问题。
    • 啊...是的,对象肯定没有被释放。
    【解决方案2】:

    为什么?因为 Xcode/gdb 集成是...... flakey.... 有时它只是不知道你在哪里。您可以尝试一些事情以增加破坏性:

    • 运行>与调试器同步。我一直对此寄予厚望。有时它甚至会起作用。
    • 选择不同的堆栈帧,然后再次选择此堆栈帧。
    • 切换线程并切换回来。
    • 跨步。通常转到下一行会同步备份。

    我希望有一颗永远有效的灵丹妙药。有时 gdb 会迷路。

    【讨论】:

    • 我用你的提示更新了这个问题——不过,长话短说,没有一个有用。
    • 抱歉没有帮助。如果您经常在同一行上得到它,我有时会将断点放在不同的行上。可以肯定的是,您使用的是标准调试设置(特别是优化设置为 -O0),对吗?通过优化,有时您放置断点的代码不存在(但您往往会在那里得到不同的症状)。而且即使进入更高的堆栈帧,您仍然没有变量,对吗? (这表明 gdb 完全丢失了。)再试一次:在 gdb 中键入“where”。至少你可以看到 gdb 认为它在哪里。
    • 嗯,是的,我没有改变任何类似的东西(浏览了所有用户定义的设置,没有看到任何远程接近调试设置的东西)。我做的一件事是在“预处理器宏”中,放入一个 IAM_DEBUGGING=1,我用它来使用 #ifdefs 将调试构建与发布构建分开。
    • 最终找到了该设置,是的,它是无 [-O0]
    【解决方案3】:

    这是一个 Xcode 错误/怪异。尝试删除所有断点并进行全面清理。

    如果这不起作用,请确保您的编译器没有脱离 LLVM。

    在安装 XCode4 然后又回到 XCode3 后,我遇到了各种各样的问题

    【讨论】:

    • 我确实安装了 XCode4,但安装在一个单独的位置。我后来删除了它,但是是的,我认为我在某个时候在 XCode4 中打开了该项目。人力资源管理系统。将立即尝试断点。
    • 不行,不行。我确实留下了 [NSException raise] 和 objc_exception_throw 符号断点(实际上不知道如何删除它们),但删除了所有其他断点。不用找了。 ://
    • 如果您在 XCode4 中打开项目,请务必检查您的编译器是否设置为应有的状态。我遇到了这个确切的问题,当需要 LLVM(第三个编译器??)时,XCode 已将编译器切换到 gcc4。在工作窗口框,所以无法检查。
    • 嗯...哇!我从“GCC 4.2”切换到“LLVM GCC 4.2”,我现在确实得到了变量信息 BUT 堆栈帧现在已经消失了!我得到 -[MGMinimap installTiles:] 作为顶部,然后是带有“??”的单行在它下面。疯狂。尝试更多...
    • 切换到“LLVM 编译器 1.5”与“LLVM GCC 4.2”的结果相同。你确定它应该是 LLVM 吗?我以为那是新的“测试版”编译器……不确定我是否想那么冒险:O
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-06
    • 1970-01-01
    • 2011-03-05
    • 1970-01-01
    • 2014-10-01
    相关资源
    最近更新 更多