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
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)
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
其实几个崩溃信息可以继续用这个处理。
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