在断点处停止导致EXC_BAD_ACCESS

13

我的应用程序运行良好,但是出现了问题,当我放置断点时,单步执行/跳过/恢复会导致程序崩溃,显示EXC_BAD_ACCESS错误。如果我去除/禁用断点,就不会发生这种情况。

有什么建议吗?


2
我没有使用线程。代码是无关紧要的,因为无论在哪里设置断点,它都会崩溃。而且正如我所说,如果没有断点,就不会崩溃?! - Dann
你可能想尝试清理和重新构建。偶尔Xcode会混淆并引用错误的表等。 - Hot Licks
尝试了很多次清理和重建,但都没有成功 :( - Dann
我在升级到Xcode 4.2.1后也开始遇到了这个问题。之前代码使用断点是完美的。(你不是唯一一个) - gak
7个回答

18

根据我所看到的,LLDB在Xcode 4.2和4.2.1中似乎存在问题。请在“编辑方案”设置中切换到GDB。

切换到GDB后,断点将正常工作。

编辑方案对话框


1
我一直在使用LLDB,只要我的表达式是有效的,所有断点都能正常工作。但是一旦我定义了一个无效的表达式(例如在CCLayer中使用super.position),xCode似乎会关闭或崩溃。它甚至不允许我删除无效的表达式,因为它无法在那里中断。当我切换到GDB时,我可以看到无效的表达式并将其删除。然后我又切换回LLDB,问题就解决了。感谢您的帮助。 - Matt Becker
正确的答案是升级到Xcode 5.0.2,正如下面另一位评论者所指出的。抱歉大声喊了出来。=) - RanLearns
这个选项在哪里? - vir us

12

针对可能遇到的使用Xcode 5.0.1和Mavericks操作系统的人员: 尝试删除所有方案并重新创建它们 - 这对我有用。


4
重建这些方案对我没用。我注意到这在我的iOS 6设备上发生(iPhone5,iPad2),但在我的iOS 7设备上(iPhone 4s)没有出现。 - Symmetric
现在它可以工作了,但我不确定为什么。我尝试了很多方法...从我的设备中删除应用程序,重新启动它,重新启动Mac等。然后我遇到了另一个无关的问题(据我所知),即Xcode永远无法完成构建。恐怕我不记得我是如何找到它的,但事实证明我的钥匙串被46000个证书和93000个名为com.apple.ubiquity.peer-uuid的密钥搞砸了。打开钥匙串花了将近一个小时!这是一个帮助我解决问题的页面链接:https://discussions.apple.com/thread/3396579?start=0&tstart=0 现在,两个问题都已经解决了。真是匪夷所思! - Symmetric
我也尝试过删除和添加所有的方案,但这并没有解决我的问题。唉! - Julian B.
目前看来最好的选择是回退到Xcode 5.0.0 - https://developer.apple.com/downloads/index.action?name=Xcode,您可以从这里下载。然后等待苹果发布5.0.2版本。 - Andrew
2
苹果发布了5.0.2版本,该漏洞已经修复。 - Andrew
显示剩余3条评论

1

这是XCode 5.0.1和Mavericks存在的一个bug。苹果发布了5.0.2版本,已经修复了这个bug!


1
你是在使用lldb而不是gdb吗?我在Xcode 4.2.1和lldb中经常遇到这个问题。切换回gdb(booooo)可以解决这个问题。

1

我正在使用Xcode 4.3.2,而且Xcode自动更新调试工具为LLDB(弹出对话框并确认)。这真的是一场噩梦,当我进入任何函数调用时,它会在8-9次中有7-8次崩溃。

回退到GDB似乎现在更好了!


0

EXC_BAD_ACCESS 表示您在某个地方存在内存问题 - 很可能是当您期望它仍然存在时释放了某些东西(可能是 autorelease 的结果)。运行 静态分析器 来查找它。我想您看到崩溃是因为调试器在加载断点时积极占用内存,从而标记了其他地方的问题。


0

说句实话,我也遇到了同样的问题。 我可以使用我知道正确的代码,并且如果我使用lldb进入它并达到断点后,它会崩溃。当我尝试打印任何本地变量时,我也会得到这样的输出。

(lldb) p self
error: use of undeclared identifier 'self'
error: 1 errors parsing expression

看起来 Xcode 4.2.1 中的 lldb 出了问题。我唯一的建议是暂时切换回 gdb。


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