您的位置:首页 > 移动开发 > IOS开发

ios 崩溃日志 符号化

2016-05-12 13:27 585 查看
1.准备测试代码 在applicationDidFinishLaunching() 方法里 调用 setPosffffff(nullptr); 这样必定会出现崩溃,因为 node为空 去调用setPosition。







测试出现崩溃日志如下: 只切一部分

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: