如何知道导致异常的哪一行?

时间:2014-05-09 10:04:37

标签: ios objective-c xcode debugging lldb

我是XCode和Objective C的新手。我有 故意 错误地为NSString *分配号​​码。

NSString* s = @1;
[s uppercaseString];

虽然XCode给了我警告,但这段代码会编译。但在运行时我得到例外。现在我在日志中看到(对不起图片,由于格式化,我无法正确粘贴文本)

enter image description here

在此日志中,我如何找到确切的错误位置。该日志如何告诉我要更改的代码。

5 个答案:

答案 0 :(得分:7)

所以看起来你正在运行Release版本(剥离调试符号),如果你在生产环境中得到崩溃日志,你需要对其进行符号化以便找到该行。

Apple TN提供了符号化的一些细节。

在开发环境中,您只需添加一个异常断点并从Xcode运行它,因为调试符号不会被剥离。

答案 1 :(得分:4)

要了解导致问题的行,通常需要按照this document中的说明向项目添加异常断点;

  1. 在断点导航器的左下角,单击 添加按钮。
  2. 选择添加例外断点。
  3. 在“例外”弹出菜单中,选择要在其上排除的例外类型 你想要执行停止:
    • 全部。停止所有例外情况。
    • Objective-C的。停止Objective-C异常。
    • C ++。停止C ++异常。要停止特定的C ++异常,请指定异常名称。
  4. 选择您希望程序执行停止的异常处理过程的阶段。
  5. 点击完成。

答案 2 :(得分:2)

第5行Sam:[BIDViewController viewDidLoad] + 143,如果这是一个发布版本,你需要用符号解析函数的内存地址,这叫做" symbolize"崩溃转储...

答案 3 :(得分:2)

在日志中查找您的项目名称,您就会知道。

e.g。

line 5 Sam : [BIDViewController viewDidLoad] + 143 

如果你想在没有警告的情况下产生真正的崩溃,请尝试使用以下代码,它将产生索引超出范围的异常并将崩溃

NSArray *array = @[@"1",@"2"];
NSLog(@"Item not accessible->%@",(NSString*)array[2]);

答案 4 :(得分:2)

设置异常断点或启用NSZombie对象

enter image description here

NSZombie

从菜单栏中选择Project>方案>编辑方案

enter image description here