1、crash文件
34 AppKit 0x00007fff8f585374 __35-[NSApplication runModalForWindow:]_block_invoke + 6435 AppKit 0x00007fff8f3a2b98 -[NSApplication runModalForWindow:] + 13736 XXXX 0x00000001004c23aa 0x100262000 + 2491306。。。。。58 AppKit 0x00007fff8f1433db -[NSApplication run] + 92659 AppKit 0x00007fff8f10de0e NSApplicationMain + 123760 XXXX 0x00000001004c0ae9 0x100262000 + 248496961 libdyld.dylib 0x00007fffa6dd5235 start + 1复制代码
2、打开 app和符号文件所在目录,可通过 Xcode > window > Organizer > Archives 选择archive,右键 “Show in folder” ,右键 “显示包内容” ,进入 Products > Applications > XXXX > Contents > MacOS ,并将 dSYMs > XXXX.app.dSYM 也拷贝到此目录
3, 打开终端并定位到以上目录
> lldb XXXX #注1> (lldb) add-dsym XXXX.app.dSYM> (lldb) image lookup -n main复制代码
一般返回结果的第一个条目 即为主程序的main函数,复制其地址,如下标红处 ,此地址即对应了 1)中 主线程堆栈中倒数第2个函数
Address: XXXX[0x000000010025eaa0] (XXXX.__TEXT.__text + 2476784)Summary: XXXX`main at AppDelegate.swift复制代码
4,通过1)中的偏移值计算 crash函数在image中对应的地址
> (lldb) po 0x000000010025eaa0 - 2484969> 4294967223复制代码
这个 地址即为我们主程序函数地址的基址。
根据此地址加上偏移值计算 crash函数 在image中的地址。
> (lldb) po 4294967223 + 2491306> 4297458529复制代码
5,反查这个地址对应的符号名和所在文件
(lldb) image lookup -a 4297458529Address: XXXX[0x0000000100260361] (XXXX.__TEXT.__text + 2483121)Summary: XXXX`function signature specializationof XXXX.AppDelegate.onCallSettings (Swift.AnyObject) -> () + 411 [inlined] static XXXX.AppDelegate.showSettingsWindow (XXXX.SettingsTabID) -> () + 22 at AppDelegate.swift:46XXXX`function signature specialization of XXXX.AppDelegate.onCallSettings (Swift.AnyObject) -> () + 392 at AppDelegate.swift:46复制代码
至此,查到了crash的位置,AppDelegate.swift 第46行 出错了。
注1:
lldb XXXX 执行这个命令的时候可能会报错
xcrun: error: invalid active developer path复制代码
解决方法: 终端输入
xcode-select --install
回车后,系统弹出下载xcode,点击确认,下载完成后即可。(实际上不是下载xcode,可能下载xcode有关插件,下载时长约1分钟)
出现这个错误原因猜想可能是因为之前安装过xcode卸载后出现的。