ios 崩溃日志 符号化
2016-05-12 13:27
585 查看
1.准备测试代码 在applicationDidFinishLaunching() 方法里 调用 setPosffffff(nullptr); 这样必定会出现崩溃,因为 node为空 去调用setPosition。
测试出现崩溃日志如下: 只切一部分
2.检查日志和 dsym文件uuid 是否一致
dwarfdump --uuid test.app.dSYM
UUID: 0D410C68-EE85-3A2E-9FA9-39A9A839F683 (armv7)
保证相等这样就可以符号化了
0xe3000 - 0x752fff CutFruit iOS armv7 <0d410c68ee853a2e9fa939a9a839f683>
3.第一种处理方法,把0xe3000替换成 自己崩溃的地址 下面红色部分
CutFruit iOS
0x0031a0d8 0xe3000 + 2322648
xcrun atos -o appName.app.dSYM/Contents/Resources/DWARF/appName -l 0xe3000 -arch armv7
如上图可以看出 找到了 setPosffffff崩溃位置 201行代码
4.第二种处理方法,
otool -l appName.app.dSYM/Contents/Resources/DWARF/appName
Load command 3
cmd LC_SEGMENT
cmdsize 736
segname __TEXT
vmaddr 0x00004000
vmsize 0x00670000
fileoff 0
filesize 0
maxprot 0x00000005
initprot 0x00000005
nsects 10
flags 0x0
上面代码处红色部分__TEXT Load command 3 0x00004000 地址 然后用
dwarfdump 来查看位置 下面 红色部分是要计算的位置
dwarfdump --lookup 地址 --arch armv7 appName.app.dSYM
以上这句崩溃信息为例:
1 CutFruit iOS 0x000ecad8 0xe3000 + 39640
地址 = 0x00004000 + 39640(0x9AD8) => 0xDAD8 计算结果为 0xdad8 可以看出AppDelegate.cpp 171行 也就是 setPosffffff(nullptr)那行
其实几个崩溃信息可以继续用这个处理。
5.第三种处理方法:
symbolicatecrash 来处理这个命令直接把文件全部符号化,推荐用这个
find /Applications/Xcode.app -name symbolicatecrash -type f 找到 symbolicatecrash的文件路径
我的是在/Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash
现实export一下
export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer
然后用 symbolicatecrash
symbolicatecrash appName.crash appName.app.dSYM > /Users/apple/Desktop/test.crash
符号化的崩溃日志就很清晰了
参考文章:http://www.jianshu.com/p/e428501ff278
http://www.cocoachina.com/industry/20140514/8418.html
测试出现崩溃日志如下: 只切一部分
Exception Type: EXC_BAD_ACCESS (SIGSEGV) Exception Subtype: KERN_INVALID_ADDRESS at 0x00000000 Triggered by Thread: 0 Thread 0 name: Dispatch queue: com.apple.main-thread Thread 0 Crashed: 0 CutFruit iOS 0x000ecc6e 0xe3000 + 40046 1 CutFruit iOS 0x000ecad8 0xe3000 + 39640 2 CutFruit iOS 0x0031a0d8 0xe3000 + 2322648 3 CutFruit iOS 0x000f14e2 0xe3000 + 58594 4 UIKit 0x26dbc4ec 0x26d43000 + 496876 5 UIKit 0x26fb143a 0x26d43000 + 2548794 6 UIKit 0x26fb3986 0x26d43000 + 2558342 7 UIKit 0x26fbe204 0x26d43000 + 2601476 8 UIKit 0x26fb2214 0x26d43000 + 2552340 9 FrontBoardServices 0x2a0200ce 0x2a00b000 + 86222 10 CoreFoundation 0x23855d7a 0x23789000 + 839034 11 CoreFoundation 0x2385503c 0x23789000 + 835644 12 CoreFoundation 0x23853b76 0x23789000 + 830326 13 CoreFoundation 0x237a13bc 0x23789000 + 99260 14 CoreFoundation 0x237a11ce 0x23789000 + 98766 15 UIKit 0x26db61ba 0x26d43000 + 471482 16 UIKit 0x26db0f9c 0x26d43000 + 450460 17 CutFruit iOS 0x000ef5fa 0xe3000 + 50682 18 libdyld.dylib 0x315c5aac 0x315c4000 + 6828
Binary Images: 0xe3000 - 0x752fff CutFruit iOS armv7 <0d410c68ee853a2e9fa939a9a839f683> /var/mobile/Containers/Bundle/Application/F8BB2C6B-7631-413B-94F9-D528644B1430/CutFruit iOS.app/CutFruit iOS
2.检查日志和 dsym文件uuid 是否一致
dwarfdump --uuid test.app.dSYM
MacBook-Pro:~ apple$ dwarfdump --uuid /Users/apple/Library/Developer/Xcode/Archives/2016-05-12/CutFruit\ iOS\ 16-5-12\ 上午11.00.xcarchive/dSYMs/CutFruit\ iOS.app.dSYM UUID: 0D410C68-EE85-3A2E-9FA9-39A9A839F683 (armv7) /Users/apple/Library/Developer/Xcode/Archives/2016-05-12/CutFruit iOS 16-5-12 上午11.00.xcarchive/dSYMs/CutFruit iOS.app.dSYM/Contents/Resources/DWARF/CutFruit iOS UUID: 46985376-3D08-38C0-A08D-690782820F4E (arm64) /Users/apple/Library/Developer/Xcode/Archives/2016-05-12/CutFruit iOS 16-5-12 上午11.00.xcarchive/dSYMs/CutFruit iOS.app.dSYM/Contents/Resources/DWARF/CutFruit iOS
UUID: 0D410C68-EE85-3A2E-9FA9-39A9A839F683 (armv7)
保证相等这样就可以符号化了
0xe3000 - 0x752fff CutFruit iOS armv7 <0d410c68ee853a2e9fa939a9a839f683>
3.第一种处理方法,把0xe3000替换成 自己崩溃的地址 下面红色部分
CutFruit iOS
0x0031a0d8 0xe3000 + 2322648
xcrun atos -o appName.app.dSYM/Contents/Resources/DWARF/appName -l 0xe3000 -arch armv7
MacBook-Pro:~ apple$ xcrun atos -o /Users/apple/Library/Developer/Xcode/Archives/2016-05-12/CutFruit\ iOS\ 16-5-12\ 上午11.00.xcarchive/dSYMs/CutFruit\ iOS.app.dSYM/Contents/Resources/DWARF/CutFruit\ iOS -l 0xe3000 -arch armv7 0x000f14e2 -[AppController application:didFinishLaunchingWithOptions:] (in CutFruit iOS) (AppController.mm:88) 0x0031a0d8 cocos2d::Application::run() (in CutFruit iOS) + 8 0x000ecad8 AppDelegate::applicationDidFinishLaunching() (in CutFruit iOS) (AppDelegate.cpp:171) 0x000ecc6e AppDelegate::setPosffffff(cocos2d::Node*) (in CutFruit iOS) (AppDelegate.cpp:201)
如上图可以看出 找到了 setPosffffff崩溃位置 201行代码
4.第二种处理方法,
otool -l appName.app.dSYM/Contents/Resources/DWARF/appName
MacBook-Pro:~ apple$ otool -l /Users/apple/Library/Developer/Xcode/Archives/2016-05-12/CutFruit\ iOS\ 16-5-12\ 上午11.00.xcarchive/dSYMs/CutFruit\ iOS.app.dSYM/Contents/Resources/DWARF/CutFruit\ iOS /Users/apple/Library/Developer/Xcode/Archives/2016-05-12/CutFruit iOS 16-5-12 上午11.00.xcarchive/dSYMs/CutFruit iOS.app.dSYM/Contents/Resources/DWARF/CutFruit iOS (architecture armv7): Load command 0 cmd LC_UUID cmdsize 24 uuid 0D410C68-EE85-3A2E-9FA9-39A9A839F683 Load command 1 cmd LC_SYMTAB cmdsize 24 symoff 4096 nsyms 41337 stroff 500140 strsize 2174455 Load command 2 cmd LC_SEGMENT cmdsize 56 segname __PAGEZERO vmaddr 0x00000000 vmsize 0x00004000 fileoff 0 filesize 0 maxprot 0x00000000 initprot 0x00000000 nsects 0 flags 0x0 Load command 3 cmd LC_SEGMENT cmdsize 736 segname __TEXT vmaddr 0x00004000 vmsize 0x00670000 fileoff 0 filesize 0 maxprot 0x00000005 initprot 0x00000005 nsects 10 flags 0x0
Load command 3
cmd LC_SEGMENT
cmdsize 736
segname __TEXT
vmaddr 0x00004000
vmsize 0x00670000
fileoff 0
filesize 0
maxprot 0x00000005
initprot 0x00000005
nsects 10
flags 0x0
上面代码处红色部分__TEXT Load command 3 0x00004000 地址 然后用
dwarfdump 来查看位置 下面 红色部分是要计算的位置
dwarfdump --lookup 地址 --arch armv7 appName.app.dSYM
以上这句崩溃信息为例:
1 CutFruit iOS 0x000ecad8 0xe3000 + 39640
地址 = 0x00004000 + 39640(0x9AD8) => 0xDAD8 计算结果为 0xdad8 可以看出AppDelegate.cpp 171行 也就是 setPosffffff(nullptr)那行
其实几个崩溃信息可以继续用这个处理。
MacBook-Pro:~ apple$ dwarfdump --lookup 0xdad8 --arch armv7 /Users/apple/Library/Developer/Xcode/Archives/2016-05-12/CutFruit\ iOS\ 16-5-12\ 上午11.00.xcarchive/dSYMs/CutFruit\ iOS.app.dSYM ---------------------------------------------------------------------- File: /Users/apple/Library/Developer/Xcode/Archives/2016-05-12/CutFruit iOS 16-5-12 上午11.00.xcarchive/dSYMs/CutFruit iOS.app.dSYM/Contents/Resources/DWARF/CutFruit iOS (armv7) ---------------------------------------------------------------------- Line table dir : '/Users/apple/newcocos2d/cocos2dproject/CutFruit/frameworks/runtime-src/Classes' Line table file: 'AppDelegate.cpp' line 171, column 5 with start address 0x000000000000dace Looking up address: 0x000000000000dad8 in .debug_frame... found! 0x00000710: FDE length: 0x0000000c CIE_pointer: 0x00000000 start_addr: 0x0000d9cc _ZN11AppDelegate29applicationDidFinishLaunchingEv range_size: 0x0000029c (end_addr = 0x0000dc68) Instructions: 0x0000d9cc: CFA=sp
5.第三种处理方法:
symbolicatecrash 来处理这个命令直接把文件全部符号化,推荐用这个
find /Applications/Xcode.app -name symbolicatecrash -type f 找到 symbolicatecrash的文件路径
我的是在/Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash
现实export一下
export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer
然后用 symbolicatecrash
symbolicatecrash appName.crash appName.app.dSYM > /Users/apple/Desktop/test.crash
MacBook-Pro:~ apple$ find /Applications/Xcode.app -name symbolicatecrash -type f /Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash MacBook-Pro:~ apple$ export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer MacBook-Pro:~ apple$ /Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash /Users/apple/Desktop/CutFruit\ iOS\ \ 16-5-12\ 上午11-42.crash /Users/apple/Library/Developer/Xcode/Archives/2016-05-12/CutFruit\ iOS\ 16-5-12\ 上午11.00.xcarchive/dSYMs/CutFruit\ iOS.app.dSYM > /Users/apple/Desktop/test.crash
符号化的崩溃日志就很清晰了
Exception Type: EXC_BAD_ACCESS (SIGSEGV) Exception Subtype: KERN_INVALID_ADDRESS at 0x00000000 Triggered by Thread: 0 Thread 0 name: Dispatch queue: com.apple.main-thread Thread 0 Crashed: 0 CutFruit iOS 0x000ecc6e AppDelegate::setPosffffff(cocos2d::Node*) (AppDelegate.cpp:201) 1 CutFruit iOS 0x000ecad8 AppDelegate::applicationDidFinishLaunching() (AppDelegate.cpp:171) 2 CutFruit iOS 0x0031a0d8 cocos2d::Application::run() + 8 3 CutFruit iOS 0x000f14e2 -[AppController application:didFinishLaunchingWithOptions:] (AppController.mm:88) 4 UIKit 0x26dbc4ec -[UIApplication _handleDelegateCallbacksWithOptions:isSuspended:restoreState:] + 280 5 UIKit 0x26fb143a -[UIApplication _callInitializationDelegatesForMainScene:transitionContext:] + 2354 6 UIKit 0x26fb3986 -[UIApplication _runWithMainScene:transitionContext:completion:] + 1370 7 UIKit 0x26fbe204 __84-[UIApplication _handleApplicationActivationWithScene:transitionContext:completion:]_block_invoke + 32 8 UIKit 0x26fb2214 -[UIApplication workspaceDidEndTransaction:] + 128 9 FrontBoardServices 0x2a0200ce __31-[FBSSerialQueue performAsync:]_block_invoke + 10 10 CoreFoundation 0x23855d7a __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 10 11 CoreFoundation 0x2385503c __CFRunLoopDoBlocks + 212 12 CoreFoundation 0x23853b76 __CFRunLoopRun + 1710 13 CoreFoundation 0x237a13bc CFRunLoopRunSpecific + 472 14 CoreFoundation 0x237a11ce CFRunLoopRunInMode + 102 15 UIKit 0x26db61ba -[UIApplication _run] + 554 16 UIKit 0x26db0f9c UIApplicationMain + 1436 17 CutFruit iOS 0x000ef5fa main (main.m:13) 18 libdyld.dylib 0x315c5aac start + 0
参考文章:http://www.jianshu.com/p/e428501ff278
http://www.cocoachina.com/industry/20140514/8418.html
相关文章推荐
- iOS简易蓝牙对战五子棋游戏设计思路之二——核心棋盘逻辑与胜负判定算法
- 如何设置ios tableView的section跟着tableView一起滚动
- iOS监听模式系列之IOS中的几中观察监听模式
- IOS中的几中观察监听模式
- iOS 获取手机的型号,系统版本,软件名称,软件版本
- iOS 获取手机的型号,系统版本,软件名称,软件版本
- ios开发-事件机制
- iOS CoreLocation框架第三章—— CLGeocoder(地理编码器)和CLPlacemark(获取位置信息)
- ios中关于view的tag值的问题
- ios本地通知
- ios url 编码和解码
- iOS - 类扩展与分类的区别
- [iOS]Auto Layout 代码约束
- iOS NSArray,结构体
- iOS开发-常用第三方开源框架介绍
- iOS表示图下拉刷新控件
- nagios 安装部署试验
- iOS EGORefreshTableHeaderView使用方法
- iOS textview排版
- iOS开发中常见的宏