ios 崩溃日志 符号化

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值