【问题标题】:Debugging app crashes with iOS Simulator & XCode 4 halts in main() function, not crash source [duplicate]使用 iOS 模拟器和 XCode 4 调试应用程序崩溃在 main() 函数中停止,而不是崩溃源 [重复]
【发布时间】:2011-11-03 18:35:16
【问题描述】:

可能重复:
Xcode 4.2 showing the wrong line of code on error

Xcode 4 的调试器似乎不会在 iOS 模拟器崩溃原因附近的任何地方停止执行。假设我在代码中引入了一个错误,可能是这样的数组越界错误:

NSMutableArray * test = [[NSMutableArray alloc] initWithCapacity:5];
[test insertObject:@"Hello" atIndex:10];

当应用程序不可避免地崩溃时,我会转到 main.m 中的 main 函数,调用堆栈(“按线程”视图)中没有任何内容来帮助我找出问题所在。

也许我在构建属性中缺少调试设置?如果有帮助,这是 Snow Leopard 上的 Xcode 4.2。

谢谢

【问题讨论】:

  • 乔希,确实是复制品。谢谢。我已投票结束我自己的问题。

标签: objective-c xcode ios-simulator


【解决方案1】:

转到断点面板,并添加左下角,单击+号并添加“异常断点”。

例外:全部
Break : 在投掷中。

这在大多数情况下应该可以解决问题。

【讨论】:

  • 没用。在所有的情况下,如何让这个 Apple IDE 和其他 IDE 一样工作?我的意思是,调试所有代码非常重要,而不仅仅是一些。 ://
  • @HenrikErlandsson:再试一次,那行得通。我一直用这个。
  • 它不会在 [localvariable autorelease] EXC_BAD_ACCESS 错误的正确行处停止。 '再试一次'?添加这样的断点非常容易,事实上我认为没有人会失败。但是,断点可能无法在正确的行处停止,这种类型的错误肯定是这种情况。
  • @HenrikErlandsson:是的,当然。 Autorelease 在被调用时不会执行释放。它标记要发布的数据,稍后会做什么。所以崩溃不是因为自动释放而发生的,而是因为系统在事件循环结束时对数据调用的释放。在单个事件循环中运行的不同方法的相同数据上放置 3 个自动释放,您将无法知道哪个是导致崩溃的原因。所以你不能要求调试器比你更了解它。如果你调用 release,那就是另一回事了,因为它会立即行动。
【解决方案2】:

根据这个问题的已接受答案 - Xcode 4.2 debug doesn't symbolicate stack call 在断点导航器中添加一个异常断点 - 解决了这个问题。

【讨论】:

    猜你喜欢
    • 2018-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-04
    • 2012-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多