![]() |
1
84
对于任何exc_bad_访问错误,您通常尝试向已发布的对象发送消息。这个 最好的 找到这些的方法是使用 NSZombieEnabled . 这项工作从未真正释放过一个对象,而是将它包装成一个“僵尸”,并在其中设置一个标志,表示它通常会被释放。这样,如果您再次尝试访问它,它仍然知道在您犯错误之前是什么,并且有了这一点信息,您通常可以回溯查看问题是什么。 它在后台线程中尤其有用,因为调试器有时会把有用的信息放在外。 需要注意的是 但是,您需要100%确保这只存在于调试代码中,而不存在于分发代码中。因为从来没有发布过任何东西,你的应用程序会泄漏,泄漏和泄漏。为了提醒我执行此操作,我将此日志放在AppDelegate中:
如果需要帮助查找确切的行,请执行生成和调试( 命令-Y )而不是构建和运行( CMD—R )当应用程序崩溃时,调试器将精确地显示哪一行,并与nszombieEnabled结合使用,您应该能够找到确切的原因。 |
![]() |
2
17
关于你的阵列。线
实际上不会给您一个保留对象,而是一个自动释放对象。它可能会保留在下一行中,但是您不应该在第三行中释放它。见 this
|
![]() |
3
10
在Xcode4中,您可以通过单击“方案”下拉列表(左上角,停止按钮旁边的右上角)->编辑方案->诊断选项卡->启用僵尸对象来启用僵尸。 |
![]() |
4
7
xcode/gdb总是中断
请注意,这些类型的错误通常发生在
|
![]() |
5
5
一条旧线索的新答案…在Xcode4中,诊断Exc_Bad_访问异常的最有效方法是使用工具来分析应用程序(从Xcode单击产品/配置文件并选择僵尸)。这将帮助您识别发送到已释放对象的消息。 |
![]() |
6
2
来自斯坦福CS193P类:如果为符号添加断点(手动,通过编辑断点)
|
![]() |
7
2
另一种有用的方法是设置断点,该断点将在异常发生后直接触发:
来自: http://blog.emmerinc.be/index.php/2009/03/19/break-on-exception-in-xcode/ |
![]() |
8
1
只想为来自网络的其他人添加,搜索相同错误但有不同错误的解决方案。在我的例子中,当我试图用键名中的拼写错误来实例化nsdictionary时,我得到了相同的错误,我忘记在键前面添加“@”:
|
![]() |
9
1
我希望我没有错过相同的答案,但我发现有些项目可能会因为在旧的iOS版本的模拟器上运行而抛出此错误,因为旧版本的iOS版本可能与项目依赖项或框架不兼容。我花了很长时间才意识到它只是在老式的模拟器版本中发生的,比如iPhone4S,这个应用程序甚至不应该尝试支持。 如果能得到一条更详细的错误消息就好了,但是我想这是它起源的框架的责任……无论如何,这是一个相当常见的搜索登陆,也许这能帮助一些人像我自己一样严重地在网上偷懒。 |
![]() |
10
0
在启用僵尸之前,我建议首先清除所有警告(如果有)。简单的事情,比如一个没有
|
![]() |
SRobertJames · 使用printf的gdb显示 1 年前 |
|
Subin · 在vscode中运行c时出错 1 年前 |
![]() |
Community wiki · 如何调试Python内存故障? 2 年前 |
![]() |
Kai · 有什么方法可以轻松优化VSCode中的锈迹? 2 年前 |
![]() |
Chris Brandon · 如何使节点在堆栈溢出时中断? 2 年前 |