OSX app (Mac app) crash 文件分析与定位
来源:互联网 发布:ubuntu内核 编辑:程序博客网 时间:2024/06/06 01:25
0. 假设我们的程序名叫 XXXX, 内置了第三方crash报告的工具(或通过apple的 crash report机制),上架后的程序crash了能及时拿到crash report ,且app上架时通过xcode生成的archive包没有被删掉。
1. 拿到crash report, 查看crash线程的调用堆栈,找出直接跟我们程序相关的函数地址,如下图 标红部分,其他地址皆为系统库中的函数。则第 36个函数是我们需要定位出函数名称的crash函数,其基址为0x100262000,偏移值为2491306.
......
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
(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 4297458529
Address: XXXX[0x0000000100260361] (XXXX.__TEXT.__text + 2483121)
Summary: XXXX`function signature specialization <Arg[0] = Dead and Owned To Guaranteed, Arg[1] = Dead> of XXXX.AppDelegate.onCallSettings (Swift.AnyObject) -> () + 417 [inlined] static XXXX.AppDelegate.showSettingsWindow (XXXX.SettingsTabID) -> () + 22 at AppDelegate.swift:108
XXXX`function signature specialization <Arg[0] = Dead and Owned To Guaranteed, Arg[1] = Dead> of XXXX.AppDelegate.onCallSettings (Swift.AnyObject) -> () + 395 at AppDelegate.swift:108
至此,真相大白,AppDelegate.swift 第108行 出错了。
- OSX app (Mac app) crash 文件分析与定位
- 通过dSYM和app文件分析Crash
- iOS友盟崩溃地址解析 通过dSYM文件分析定位线上 APP crash问题
- IOS app crash: 如何定位Crash 堆栈
- 利用.dSYM和.app文件准确定位Crash位置
- 利用.dSYM跟.app文件准确定位Crash位置
- 利用.dSYM和.app文件准确定位Crash位置
- 利用.dSYM跟.app文件准确定位Crash位置
- 利用.dSYM和.app文件准确定位Crash位置
- 利用.dSYM和.app文件准确定位Crash位置
- 利用.dSYM和.app文件准确定位Crash位置
- 利用.dSYM跟.app文件准确定位Crash位置
- 利用.dSYM和.app文件准确定位Crash位置
- 利用.dSYM和.app文件准确定位Crash位置
- 利用.dSYM和.app文件准确定位Crash位置
- 利用.dSYM和.app文件准确定位Crash位置
- 利用.dSYM和.app文件准确定位Crash位置
- 利用.dSYM和.app文件准确定位Crash位置
- <% %>,<%= %>与<%! %>的用途
- android 记录笔记
- Java注释、常用分隔符以及标识符命名规则
- Mac OS 安装Qt 编译时提示 running /usr/bin/xcodebuild
- ssh (安全外壳协议)
- OSX app (Mac app) crash 文件分析与定位
- NGUI_的Panel学习_003
- jdbc链接数据库进行简单的操作学习笔记
- Python学习day01
- 拆解"学生信息管理系统"
- 词向量源码解析:(3.4)GloVe源码解析之shuffle
- 调用Native Plugin
- jsp个人家庭财务系统
- MYIR-ZYNQ7000系列-zturn教程(8)-PS给PL时钟点亮LED