Dans une application de production avec les informations de débogage dépouillé, comment convertir la sortie:iOS: convertir l'entrée StackTrace au nom de la méthode avec le numéro de ligne
NSLog(@"Stack Trace: %@", [exception callStackSymbols]);
à une classe lisible et nom de la méthode? Un numéro de ligne serait une bénédiction.
est ici la sortie que je reçois:
0 CoreFoundation 0x23d82f23 <redacted> + 154
1 libobjc.A.dylib 0x23519ce7 objc_exception_throw + 38
2 CoreFoundation 0x23cb92f1 <redacted> + 176
3 MyApp 0x23234815 MyApp + 440341
La dernière ligne est le pain et le beurre ligne, mais quand je l'utilise nain pour trouver l'adresse, rien n'existe.
dwarfdump --arch armv7 MyApp.dSYM --lookup 0x00234815 | grep 'Line table'
J'ai lu ici que vous avez besoin de convertir l'adresse de la pile à quelque chose d'autre nain ou atos:
https://stackoverflow.com/a/12464678/2317728
Comment puis-je trouver l'adresse de chargement ou l'adresse de diapositives pour effectuer la calcul? N'y a-t-il pas un moyen de calculer tout cela avant d'envoyer la pile dans le journal à partir de l'application? Si non, comment puis-je déterminer et calculer ces valeurs après avoir reçu la trace de la pile? Mieux encore, y a-t-il une solution plus facile qui me manque?
Remarque Je ne peux pas attendre les rapports de blocage car l'application est petite et ne viendra jamais. Je prévois d'envoyer les traces de la pile à notre serveur pour qu'elles soient corrigées dès qu'elles apparaissent.
EDITORIAL
Les outils de reporting crash dans iOS sont très rugueux, en particulier par rapport à Android. Dans Android, les lignes buggy sont envoyés à Google Analytics, vous utilisez la carte pour déboguer la ligne - simple (comparativement). Pour iOS, vous devez: a) attendre les rapports de bogues de l'utilisateur (pas raisonnable pour une petite application), b) envoyer des traces de pile à un serveur où il y a peu d'outils ou d'informations sur la façon de symboliser les traces de pile, c) sur de grandes bibliothèques tierces quasi commerciales. Cela rend définitivement plus difficile la construction et la mise à l'échelle - en espérant qu'Apple finira par s'en rendre compte. Encore plus d'espoir quelqu'un a repéré une solution plus facile que je pourrais avoir manqué;)
Merci pour votre aide!
Avez-vous regardé https://www.plcrashreporter.org/ qui alimente un grand nombre de ceux qui ont signalé l'accident commercial prestations de service? Il semble que vous soyez sur le point d'essayer de réinventer une grande partie de cet outil. – Jonah
Merci pour la suggestion - ils semblent être une bonne offre, mais la taille de ce projet est plusieurs fois la taille de mon application. Si je pouvais juste comprendre comment transposer la sortie en quelque chose d'intelligible, les choses du serveur prendraient juste 30 minutes et je pourrais éviter d'ajouter une grande base de code tierce partie au projet. –
Quelques remarques: 1. vous n'obtiendrez des rapports qu'avec des exceptions via ce mécanisme, pas de plantage causé par le gestionnaire de signal. 2. Pour symboliser les données de 'callStackSymbols', vous devez écrire votre propre analyseur et logique et utiliser' atos' avec les paramètres corrects. 3. La taille de PLCrashReporter est exactement quoi? Le code, le binaire de la bibliothèque statique? Les deux ne donnent pas un indice sur la taille de votre application, sauf si vous la liez et que vous vérifiez. 4. Envoyer des rapports d'erreur lorsque l'exception se produit est une mauvaise mauvaise idée. 5. Les accidents/exceptions sont très différents de ce que vous savez d'Android. N'utilisez pas la même approche! – Kerni