在日常开发调试 App 过程中,当我们写的代码有 Bug 导致崩溃时,此时我们通常会断点到崩溃的位置,然后查看 Xcode 控制台输出崩溃原因进行解决。

但有些时候我们手头可能有其它的活不能立即进行排查,或者崩溃的是其他同事的代码,需要先把控制台的崩溃日志复制粘贴到其他地方保存起来,过后再看或者告知同事进行解决。强大的 LLDB 调试工具提供了一个 bugreport 命令帮我们快速完成导出日志这件事。

例如,有一段数组越界崩溃的代码如下:

- (void)testBugReport {
    NSArray *testArray = @[@"1", @"2", @"3"];
    NSLog(@"%@", testArray[4]);
}

此时在控制台执行如下命令:

bugreport unwind --outfile /Users/kangzubin/Desktop/buglog.txt

它可以生成一份当前 App 运行状态的完整报告,包含崩溃的调用栈信息,大致如下:

另外,我们可以在上述命令后面加一个 --append-outfile 修饰符,用于在已有的日志文件中追加新的崩溃日志信息,而不是覆盖。

bugreport unwind --outfile <path to output file> --append-outfile

参考:Debugging Swift code with LLDB