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

iOS crash log 文件解析

2015-12-23 23:19 489 查看

iOS crash log 解析

一 、crash log 文件解析前需要做的工作:

说明:crash log 文件一般是十六进制文件,所以需要我们去解析成我们能够看懂的
crash log 文件,解析之前一般我们需要获取以下四个文件:

1. 获取
.crash文件,既然都要解析 crash log 了,说明你已经拿到
crash log 文件了,所以在此不讲解通过何种渠道获取crash log文件

2.
获取符号文件:.dsymb文件( 获取途径:首先打开
Xcode,接着点击
Window 中的
Organizer ,选择
Archives 中的你自己需要的应用程序工程,此时双击选择
Show in Finder ,再次双击你需要的应用程序工程
.xcarchive 文件,选择显示包内容,然后选择
dSYMs 文件夹中的
.dsymb 文件,这就是你需要的
.dsymb 文件。)

3.
获取应用程序文件(把你打包的appName.ipa文件,后缀改为zip,然后解压,解压后的Payload目录下的appName.app文件就是你需要的应用程序文件。说明:appName就是你的应用程序的名称)

4. 获取 symbolicatecrash 文件(路径:/Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources )

然后将获取到的以上四个文件放到同一个文件目录下。

特别说明:需要找出在上传应用时所发送的 .app文件和.DSYM文件,切记每次发送新版本都要保留这两个文件,不然没有办法解析crash log。

解析前的crash log 文件打开查看都是十六进制的地址,如下:

Exception Type: EXC_CRASH (SIGABRT)

Exception Codes: 0x0000000000000000, 0x0000000000000000

Triggered by Thread: 0

Last Exception Backtrace:

(0x2dda0fce 0x38520cca 0x2dda0f10 0x2e70b310 0x2e70ae52 0x2e706b90 0x305bbcee 0x308542c6 0x305babdc 0x306826a0 0x305f4d72 0x305f3382 0x306741ca 0x30673ae6 0x3066b990 0x3066ae18 0x3066ab88 0x3066ab20 0x305bcd74 0x3023a626 0x30235e36 0x30235cc8 0x302356da 0x302354ea
0x305c03fc 0x2dd6c256 0x2dd6b726 0x2dd69f1a 0x2dcd4f4a 0x2dcd4d2e 0x32bd965e 0x30620168 0x2e5df6 0x38a2dab2)

Thread 0 Crashed:

0 libsystem_kernel.dylib 0x38ae31f0 0x38ad0000 + 78320

1 libsystem_pthread.dylib 0x38b4d792 0x38b4a000 + 14226

2 libsystem_c.dylib 0x38a93fd8 0x38a4b000 + 298968

3 libc++abi.dylib 0x37dc2cd2 0x37dc2000 + 3282

4 libc++abi.dylib 0x37ddb6e0 0x37dc2000 + 104160

5 libobjc.A.dylib 0x38520f62 0x3851d000 + 16226

6 libc++abi.dylib 0x37dd91c4 0x37dc2000 + 94660

7 libc++abi.dylib 0x37dd8d28 0x37dc2000 + 93480

8 libobjc.A.dylib 0x38520e12 0x3851d000 + 15890

9 CoreFoundation 0x2dcd4fc0 0x2dccd000 + 32704

10 CoreFoundation 0x2dcd4d2e 0x2dccd000 + 32046

11 GraphicsServices 0x32bd965e 0x32bd0000 + 38494

12 UIKit 0x30620168 0x305b2000 + 450920

13 USchoolCircle
0x002e5df6 0xcb000 + 2207222

14 libdyld.dylib 0x38a2dab4 0x38a2c000 + 6836

Thread 1:

0 libsystem_kernel.dylib 0x38ad0808 0x38ad0000 + 2056

1 libdispatch.dylib 0x38a1cde8 0x38a07000 + 89576

2 libdispatch.dylib 0x38a0bf6e 0x38a07000 + 20334

Thread 0 crashed with ARM Thread State (32-bit):

r0: 0x00000000 r1: 0x00000000 r2: 0x00000000 r3: 0x38a86aa9

r4: 0x00000006 r5: 0x3a83f18c r6: 0x00000000 r7: 0x27d38584

r8: 0x1693b470 r9: 0x00000001 r10: 0x00000000 r11: 0x38cf2500

ip: 0x00000148 sp: 0x27d38578 lr: 0x38b4d797 pc: 0x38ae31f0

cpsr: 0x00000010

Binary Images:

0xcb000 - 0x3b6fff USchoolCircle armv7 <4318259741bd3970916734d1da9f9417> /var/mobile/Applications/82667236-7A46-4E36-AB61-8D0D3C7B0E2A/USchoolCircle.app/USchoolCircle

0x435000 - 0x668fff libswiftCore.dylib armv7 <9cb2727f51e13415bafc92fe12f7e036> /var/mobile/Applications/82667236-7A46-4E36-AB61-8D0D3C7B0E2A/USchoolCircle.app/Frameworks/libswiftCore.dylib

I/TestinExternalLog(1): <<<<<<< StopTest ui Package com.uskytec.USchoolCircle >>>>>>>

二、crash log 文件解析:

第一种解析方式:使用 Symbolicatecrash 解析,步骤如下:

1. 在开始解析之前需要先进行一些关于UUID的校验;
(1)查看xx.app文件的uuid的方法,在命令行中输入:

$ dwarfdump --uuid xxx.app/xxx (xxx工程名)
(2)查看xx.app.dSYM文件的uuid的方法,在命令行输入:

$ dwarfdump --uuid xxx.app.dSYM (xxx工程名)
(3)查看.crash的uuid,位于crash日志中的Binary Images:中的第一行。如:armv7s <13760bde0d073f1eb4d596c3df753f4b>

只有三者的uuid相同才能解析.crash文件,

2. 输入命令进入到四个文件所在的文件目录下;

3. 然后在终端的命令行输入:

$ ./symbolicatecrash xxx.crash xxx.app.dSYM > test.log

这样可以将.crash日志转换成test.log,test.log即可读的函数文件。

特别说明:输入上述命令可能会出现Error: "DEVELOPER_DIR" is not defined at ./symbolicatecrash line 53.这个错误。

如果出现上述错误,输入命令:export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer,

然后继续执行./symbolicatecrash xxx.crash xxx.app.dSYM > test.log可以成功

解析后的 crash log 文件,如下:

Exception Type: EXC_CRASH (SIGABRT)

Exception Codes: 0x0000000000000000, 0x0000000000000000

Triggered by Thread: 0

Last Exception Backtrace:

0 CoreFoundation 0x2dda0fce 0x2dccd000 + 868302

1 libobjc.A.dylib 0x38520cca 0x3851d000 + 15562

2 CoreFoundation 0x2dda0f10 0x2dccd000 + 868112

3 Foundation 0x2e70b310 0x2e6bb000 + 328464

4 Foundation 0x2e70ae52 0x2e6bb000 + 327250

5 Foundation 0x2e706b90 0x2e6bb000 + 310160

6 UIKit 0x305bbcee 0x305b2000 + 40174

7 UIKit 0x308542c6 0x305b2000 + 2761414

8 UIKit 0x305babdc 0x305b2000 + 35804

9 UIKit 0x306826a0 0x305b2000 + 853664

10 UIKit 0x305f4d72 0x305b2000 + 273778

11 UIKit 0x305f3382 0x305b2000 + 267138

12 UIKit 0x306741ca 0x305b2000 + 795082

13 UIKit 0x30673ae6 0x305b2000 + 793318

14 UIKit 0x3066b990 0x305b2000 + 760208

15 UIKit 0x3066ae18 0x305b2000 + 757272

16 UIKit 0x3066ab88 0x305b2000 + 756616

17 UIKit 0x3066ab20 0x305b2000 + 756512

18 UIKit 0x305bcd74 0x305b2000 + 44404

19 QuartzCore 0x3023a626 0x3022e000 + 50726

20 QuartzCore 0x30235e36 0x3022e000 + 32310

21 QuartzCore 0x30235cc8 0x3022e000 + 31944

22 QuartzCore 0x302356da 0x3022e000 + 30426

23 QuartzCore 0x302354ea 0x3022e000 + 29930

24 UIKit 0x305c03fc 0x305b2000 + 58364

25 CoreFoundation 0x2dd6c256 0x2dccd000 + 651862

26 CoreFoundation 0x2dd6b726 0x2dccd000 + 648998

27 CoreFoundation 0x2dd69f1a 0x2dccd000 + 642842

28 CoreFoundation 0x2dcd4f4a 0x2dccd000 + 32586

29 CoreFoundation 0x2dcd4d2e 0x2dccd000 + 32046

30 GraphicsServices 0x32bd965e 0x32bd0000 + 38494

31 UIKit 0x30620168 0x305b2000 + 450920

32 USchoolCircle
0x002e5df6 main (main.m:14)

33 libdyld.dylib 0x38a2dab2 0x38a2c000 + 6834

Thread 0 Crashed:

0 libsystem_kernel.dylib 0x38ae31f0 0x38ad0000 + 78320

1 libsystem_pthread.dylib 0x38b4d792 0x38b4a000 + 14226

2 libsystem_c.dylib 0x38a93fd8 0x38a4b000 + 298968

3 libc++abi.dylib 0x37dc2cd2 0x37dc2000 + 3282

4 libc++abi.dylib 0x37ddb6e0 0x37dc2000 + 104160

5 libobjc.A.dylib 0x38520f62 0x3851d000 + 16226

6 libc++abi.dylib 0x37dd91c4 0x37dc2000 + 94660

7 libc++abi.dylib 0x37dd8d28 0x37dc2000 + 93480

8 libobjc.A.dylib 0x38520e12 0x3851d000 + 15890

9 CoreFoundation 0x2dcd4fc0 0x2dccd000 + 32704

10 CoreFoundation 0x2dcd4d2e 0x2dccd000 + 32046

11 GraphicsServices 0x32bd965e 0x32bd0000 + 38494

12 UIKit 0x30620168 0x305b2000 + 450920

13 USchoolCircle
0x002e5df6 main (main.m:14)

14 libdyld.dylib 0x38a2dab4 0x38a2c000 + 6836

Thread 1:

0 libsystem_kernel.dylib 0x38ad0808 0x38ad0000 + 2056

1 libdispatch.dylib 0x38a1cde8 0x38a07000 + 89576

2 libdispatch.dylib 0x38a0bf6e 0x38a07000 + 20334

Thread 0 crashed with ARM Thread State (32-bit):

r0: 0x00000000 r1: 0x00000000 r2: 0x00000000 r3: 0x38a86aa9

r4: 0x00000006 r5: 0x3a83f18c r6: 0x00000000 r7: 0x27d38584

r8: 0x1693b470 r9: 0x00000001 r10: 0x00000000 r11: 0x38cf2500

ip: 0x00000148 sp: 0x27d38578 lr: 0x38b4d797 pc: 0x38ae31f0

cpsr: 0x00000010

Binary Images:

0xcb000 - 0x3b6fff USchoolCircle armv7 <4318259741bd3970916734d1da9f9417> /var/mobile/Applications/82667236-7A46-4E36-AB61-8D0D3C7B0E2A/USchoolCircle.app/USchoolCircle

0x435000 - 0x668fff libswiftCore.dylib armv7 <9cb2727f51e13415bafc92fe12f7e036> /var/mobile/Applications/82667236-7A46-4E36-AB61-8D0D3C7B0E2A/USchoolCircle.app/Frameworks/libswiftCore.dylib

I/TestinExternalLog(1): <<<<<<< StopTest ui Package com.uskytec.USchoolCircle >>>>>>>

有时候解析出来的文件效果我们不满意,那么下面我们根据第二种方式解析。

第二种解析方式(根据地址解析内容):

此外,还可以在上面三个uuid对应的情况下解析某一个地址的内容

$ xcrun atos -o xxx.app/xxx -arch armv7
0x002e5df6 0xcb000(多个16进制地址,使用空格分开)

解析出的结果如下:

-[SecondShotViewController playVideo] (in USchoolCircle) (SecondShotViewController.m:473)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: