Xcode,某些子类没有调试符号

7
我正在使用Xcode 3.2.3和iPhone SDK。所以我试图调试一个UIView子类,在重写的方法中设置断点,但是我无法在GUI或gdb中看到任何符号,只能看到全局变量和寄存器。以下是我看到的内容:
(gdb) po self
No symbol "self" in current context.

然而,当我在一个UIViewController子类中设置断点时,所有的符号都在那里:

(gdb) po self
<MyViewController: 0x5c18ae0>
Current language:  auto; currently objective-c

我尝试过以下一些方法:

  • 清理所有内容/重建
  • 重新启动Xcode
  • 在项目设置中更改调试和发布之间的切换
  • 在项目设置中配置以下选项:
    • GCC_DEBUGGING_SYMBOLS = All
    • Symbols DEBUG_INFORMATION_FORMAT = DWARF, DWARF w/ dSYM File
    • BUILD_VARIANTS = normal, debug
  • 威胁Xcode,诅咒它并在根bash提示符下输入rm -rf /Developer

请帮忙,我因为使用NSLog进行调试而手指流血。

6个回答

4
我经常遇到这个bug。我的解决办法是在gdb控制台上输入bt命令,它会自动解决问题并开始识别当前环境中的符号。

这个答案在我的XCode 8中立即生效。太棒了! - Evan Moran

3

所以从Debug切换到Release就行了,我获得了所有的调试符号。

我认为这只是4.0 SDK中的一个bug。


这对我也起作用了。 不直观。 更改为发布版本,以便您可以访问符号... - Jeremy Mullin

0

在gdb中输入bt

如果你在任何地方看到self=<value temporarily unavailable, due to optimizations>,那是因为xcode已经被设置为优化模式。

进入构建设置并输入optimization

如果调试或发布的优化级别设置为Fastest,那就会导致你的问题。

发布应该保持最快,这样当构建分发时你的代码才能运行良好。最好更改你的Scheme中的构建配置。

按住opt键单击“Run”按钮。在左侧单击“Run YourAppsName.app”,然后选择“Info”并选择debug


0

嗯,我在3.2.3和SDK4 Final中尝试重新创建此问题,但没有成功 - 如预期般能够调试UIView子类。您是在使用其中一个beta版本时出现的吗?


0
发生在我身上,是在非测试版发布时。我刚刚注意到它只会在调用类定义的方法时发生,即(+)而不是(-)。
我不介意没有"self"指针,但它似乎也会清除调试器中所有本地变量的显示,这就是错误的。

0

MTS的方法对我有用。将调试模式改为发布模式可以解决此问题。多么奇怪。我可以反驳软件进化的理论,因为我在实例方法中遇到了这个错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接