我是XCode和Objective C的新手。我有 故意 错误地为NSString *分配号码。
NSString* s = @1;
[s uppercaseString];
虽然XCode给了我警告,但这段代码会编译。但在运行时我得到例外。现在我在日志中看到(对不起图片,由于格式化,我无法正确粘贴文本)
在此日志中,我如何找到确切的错误位置。该日志如何告诉我要更改的代码。
答案 0 :(得分:7)
所以看起来你正在运行Release版本(剥离调试符号),如果你在生产环境中得到崩溃日志,你需要对其进行符号化以便找到该行。
此Apple TN提供了符号化的一些细节。
在开发环境中,您只需添加一个异常断点并从Xcode运行它,因为调试符号不会被剥离。
答案 1 :(得分:4)
要了解导致问题的行,通常需要按照this document中的说明向项目添加异常断点;
答案 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对象
或
NSZombie
从菜单栏中选择Project>方案>编辑方案