Analyser un “Crash Report” : utiliser atos

Lorsqu’une application crash de façon impromptue, le seul moyen d’analyser les raisons de ce crash est d’étudier le crash report enregistré sur le téléphone. Facile à dire…. Le crash report nous renvoie aux adresses et symboles du code compilé donc c’est pas vraiment simple….

Evidemment il y a des outils pour analyser ces crash report et pour retrouver la fonction ou la ligne de code à l’origine du crash.

Tout d’abord, il faut avoir à sa disposition 3 choses :

  • le crash report,
  • le binaire qui a causé le crash,
  • le fichier dSYM généré en même temps que le binaire.

Si c’est una application qui a été livrée sur l’App Store via l’archiver, on peut retrouver le binaire et le fichier dSYM dans le paquet créé pour la livraison.
Pour cela, dans XCode, cliquer sur Window > Organizer. Dans la fenêtre de l’Organizer, cliquer sur l’icône Archives.
En faisant un clique droit sur l’archive qui nous intéresse, on peut choisir “Show in Finder”. Dans le finder, clique droit sur le paquet puis “Afficher le contenu du paquet”. En développant les répertoires, on trouve le fichier dSYM et le binaire.

Pour la suite, copier ces 2 éléments et les placer dans le même répertoire que le fichier de crash log.

Dans le répertoire où sont rassemblés les fichiers, passer la commande :

atos -arch armv6 -o myAppName.app/myAppName <em>0xaddress</em>

Le paramètre 0xaddress correspond à l’adresse qui se trouve dans le crash log sur la ligne où apparait le nom de l’appli : voir l’exemple ci-dessous ligne 23. Dans l’exemple l’adresse est : 0x00017c56.

Le résultat de la commande donne :

-[Class method] (in MyApp) (monfichier.m:n°ligne de code)

Ca donne déjà une bonne piste pour commencer la recherche du bug !!!
Mon exemple de crash log :

Incident Identifier: D4E6186B-9BAE-467A-BDA4-2C69810E67FD
CrashReporter Key:   44b77d1e6bab9e08dcccee134fd53af042204d2f
Hardware Model:      iPhone3,1
Process:         MyApp [3436]
Path:            /var/mobile/Applications/9816ABAD-58D6-476A-B732-EDE5A82D562A/MyApp.app/MyApp
Identifier:      MyApp
Version:         ??? (???)
Code Type:       ARM (Native)
Parent Process:  launchd [1]

Date/Time:       2011-05-21 08:40:31.471 +0200
OS Version:      iPhone OS 4.3.1 (8G4)
Report Version:  104

Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x00000000, 0x00000000
Crashed Thread:  0

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libsystem_kernel.dylib        	0x351a5a1c 0x35194000 + 72220
1   libsystem_c.dylib             	0x32dfd3b4 0x32dca000 + 209844
2   libsystem_c.dylib             	0x32df5bf8 0x32dca000 + 179192
3   libstdc++.6.dylib             	0x34a2da64 0x349e9000 + 281188
4   libobjc.A.dylib               	0x3057e06c 0x30578000 + 24684
5   libstdc++.6.dylib             	0x34a2be36 0x349e9000 + 273974
6   libstdc++.6.dylib             	0x34a2be8a 0x349e9000 + 274058
7   libstdc++.6.dylib             	0x34a2bf5a 0x349e9000 + 274266
8   libobjc.A.dylib               	0x3057cc84 0x30578000 + 19588
9   CoreFoundation                	0x35ed548a 0x35e37000 + 648330
10  CoreFoundation                	0x35ed54c4 0x35e37000 + 648388
11  UIKit                         	0x35c81a4c 0x35a78000 + 2136652
12  UIKit                         	0x35c82e02 0x35a78000 + 2141698
13  UIKit                         	0x35bfc5e2 0x35a78000 + 1590754
14  UIKit                         	0x35bc9f9e 0x35a78000 + 1384350
15  UIKit                         	0x35aaeeb8 0x35a78000 + 224952
16  UIKit                         	0x35abd5e8 0x35a78000 + 284136
17  UIKit                         	0x35abd458 0x35a78000 + 283736
18  UIKit                         	0x35abd356 0x35a78000 + 283478
19  UIKit                         	0x35abce2e 0x35a78000 + 282158
20  UIKit                         	0x35abcc3c 0x35a78000 + 281660
21  UIKit                         	0x35aaed56 0x35a78000 + 224598
22  UIKit                         	0x35aaeacc 0x35a78000 + 223948
<span style="color: #ff0000;">23  MyApp                     	0x00017c56 0x1000 + 93270</span>
24  CoreFoundation                	0x35e4556a 0x35e37000 + 58730
25  UIKit                         	0x35a94ec2 0x35a78000 + 118466
26  UIKit                         	0x35b21c1a 0x35a78000 + 695322
27  CoreFoundation                	0x35e4556a 0x35e37000 + 58730
28  UIKit                         	0x35a94ec2 0x35a78000 + 118466
29  UIKit                         	0x35a94e62 0x35a78000 + 118370
30  UIKit                         	0x35a94e34 0x35a78000 + 118324
31  UIKit                         	0x35a94b86 0x35a78000 + 117638
32  UIKit                         	0x35a9541c 0x35a78000 + 119836
33  UIKit                         	0x35a93bee 0x35a78000 + 113646
34  UIKit                         	0x35a93568 0x35a78000 + 111976
35  UIKit                         	0x35a7c30c 0x35a78000 + 17164
36  UIKit                         	0x35a7bc4c 0x35a78000 + 15436
37  GraphicsServices              	0x3585fe70 0x3585b000 + 20080
38  CoreFoundation                	0x35eaca90 0x35e37000 + 481936
39  CoreFoundation                	0x35eae838 0x35e37000 + 489528
40  CoreFoundation                	0x35eaf606 0x35e37000 + 493062
41  CoreFoundation                	0x35e3febc 0x35e37000 + 36540
42  CoreFoundation                	0x35e3fdc4 0x35e37000 + 36292
43  GraphicsServices              	0x3585f418 0x3585b000 + 17432
44  GraphicsServices              	0x3585f4c4 0x3585b000 + 17604
45  UIKit                         	0x35aa6d62 0x35a78000 + 191842
46  UIKit                         	0x35aa4800 0x35a78000 + 182272
47  MyApp                     	0x00002a66 0x1000 + 6758
48  MyApp                     	0x000029fc 0x1000 + 6652

This entry was posted in iPhone, tutoriels. Bookmark the permalink.