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

Ios 如何知道哪一行导致异常?,ios,objective-c,xcode,debugging,lldb,Ios,Objective C,Xcode,Debugging,Lldb,我不熟悉XCode和Objective C。我故意给NSString*分配编号时出错 NSString* s = @1; [s uppercaseString]; 虽然XCode给了我警告,但这段代码将被编译。但在运行时,我得到一个异常。现在我在日志中看到了(很抱歉,由于格式问题,我无法正确粘贴is as文本) 在这个日志中,我如何找到错误的确切位置。此日志如何告诉我要更改哪些代码。第5行Sam:[BIDViewController viewDidLoad]+143,如果这是发布版本,则需要

我不熟悉XCode和Objective C。我故意给NSString*分配编号时出错

NSString* s = @1;
[s uppercaseString];
虽然XCode给了我警告,但这段代码将被编译。但在运行时,我得到一个异常。现在我在日志中看到了(很抱歉,由于格式问题,我无法正确粘贴is as文本)


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

第5行Sam:[BIDViewController viewDidLoad]+143,如果这是发布版本,则需要使用符号解析函数的内存地址,这称为“符号化”崩溃转储…

第5行Sam:[BIDViewController viewDidLoad]+143,如果这是发布版本,您需要用符号来解析函数的内存地址,这称为“符号化”崩溃转储…

要了解是哪一行导致了问题,您通常需要向项目中添加异常断点,如中所述

  • 在断点导航器的左下角,单击 添加按钮
  • 选择添加异常断点
  • 在异常弹出菜单中,选择所基于的异常类型 您希望停止执行:
    • 全部。在所有例外情况下停止
    • Objective-C。在Objective-C异常时停止
    • C++。在C++异常上停止。若要停止特定的C++异常,请指定异常名称。< /LI>
  • 选择异常处理过程中希望程序执行停止的阶段
  • 单击完成

  • 要了解是哪一行导致了问题,通常需要向项目中添加异常断点,如中所述

  • 在断点导航器的左下角,单击 添加按钮
  • 选择添加异常断点
  • 在异常弹出菜单中,选择所基于的异常类型 您希望停止执行:
    • 全部。在所有例外情况下停止
    • Objective-C。在Objective-C异常时停止
    • C++。在C++异常上停止。若要停止特定的C++异常,请指定异常名称。< /LI>
  • 选择异常处理过程中希望程序执行停止的阶段
  • 单击完成

  • 因此,看起来您正在运行发布版本(删除调试符号),如果您在生产环境中获得了该崩溃日志,则需要对其进行符号化以找到该行

    这给出了一些符号的细节


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

    因此,看起来您正在运行发布版本(调试符号被剥离),如果您在生产环境中获得该崩溃日志,则需要对其进行符号化以找到该行

    这给出了一些符号的细节


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

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

    e、 g

    如果您想在没有警告的情况下产生真正的崩溃,请尝试以下代码:它将产生索引越界异常并崩溃

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

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

    e、 g

    如果您想在没有警告的情况下产生真正的崩溃,请尝试以下代码:它将产生索引越界异常并崩溃

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

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

    僵尸

    从菜单栏中,选择项目>方案>编辑方案


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

    僵尸

    从菜单栏中,选择项目>方案>编辑方案


    您不能用像这样的对象C文本创建字符串。它创建NSNumber,但upperCaseString是NSString方法。您最好创建类似NSString*s=@“1”的字符串。您应该会收到“不兼容的指针类型初始化”NSString*“以及类型为“NSNumber*”的表达式的警告,这是您的第一条语句。@INASE-36我提到过,我是故意这样做的。我想了解XCode是如何给我异常日志的。在异常中,它清楚地说,[\u NSCFNumber uppercaseString]传递给实例的无法识别的选择器,\u NSCFNumber是NSNumber的运行时类。请看,您不能创建像这样带有对象C文本的字符串。它创建NSNumber,但upperCaseString是NSString方法。您最好创建类似NSString*s=@“1”的字符串。您应该会收到“不兼容的指针类型初始化”NSString*“以及类型为“NSNumber*”的表达式的警告,这是您的第一条语句。@INASE-36我提到过,我是故意这样做的。我想了解XCode是如何为我提供异常日志的。请参阅异常中明确指出,[\u NSCFNumber UPPERCAESSTRING]传递给实例的未识别选择器,\u NSCFNumber是NSNumber的运行时类。请参阅