4 votes

Existe-t-il un moyen d'obtenir un rapport de panne (et non un vidage du noyau) pour un programme en ligne de commande ?

Si une application MacOS se plante, CrashReporter fait apparaître (facultativement) une fenêtre contenant un ensemble de traces de pile lisibles par l'homme et le bouton "Envoyer à Apple".

Existe-t-il un moyen direct d'obtenir les mêmes résultats pour un produit qui n'est pas de la famille de l'entreprise ? .app qui se bloque lorsqu'il est lancé depuis la ligne de commande ? En d'autres termes, la situation dans laquelle je souhaite obtenir plus d'informations est la suivante

$ some-program
Segmentation fault: 11
$ 

Je n'ai trouvé que des instructions sur la façon d'activer les vidages de noyau, mais pas sur la façon d'en tirer quelque chose de lisible. Je sais que le moniteur d'activité peut "échantillonner" les programmes en cours d'exécution, mais je recherche l'événement de crash, pas le profilage.

J'ai pensé à créer un mannequin. .app qui exécute réellement la commande qui se bloque, mais cela représente un peu de travail et va probablement poser des problèmes avec Gatekeeper, bien que je n'aie pas essayé de le faire depuis quelques versions majeures. Je suis actuellement sur Catalina 10.15.7.

1voto

Oskar Points 1242

En ce qui concerne le passé, les crashs passés sont enregistrés dans le système d'enregistrement, et les fichiers de vidage individuels sont également sauvegardés pendant environ un mois dans le système d'enregistrement. /Bibliothèque/Logs/DiagnosticReports

Pour l'avenir, il est un peu plus difficile et risqué de les provoquer. Vous pouvez essayer d'émettre un signal SIGABRT ou SIGQUIT si vous connaissez le processus :

Quelque chose de plus générique serait le diagnostic général du système qui capturera beaucoup plus. La principale différence entre ces deux options est qu'un crash a un point final, le diagnostic du système saisit un instantané arbitraire, il n'est donc pas nécessairement aussi définitif qu'un crash. Je ne recommande pas forcer une application à se planter et Je ne recommande certainement pas de forcer une panique du noyau. mais vous pouvez essayer les deux. Pourquoi ne pas commencer par une vidange de diagnostic général :

sudo sysdiagnose

Vous pouvez passer un ID ou un nom de processus à sysdiagnose ou le déclencher à partir de l'application Activity Monitor.

Si vous devez arrêter le programme ou le processus, essayez Instruments depuis Xcode.

0 votes

Avec le recul, je n'ai pas été assez clair : je n'essaie pas d'obtenir des informations d'une en cours d'exécution mais un programme qui s'est écrasé Donc, "comment se planter", le moniteur d'activité et les instruments ne sont pas pertinents. J'ai modifié ma question pour qu'elle soit plus claire. - Cependant, je vois que sysdiagnose a en fait produit .crash pour les commandes que je voulais dépanner. Savez-vous s'il existe un moyen d'obtenir ces fichiers plus rapidement qu'en exécutant la commande assez lente sysdiagnose et de désarchiver sa sortie ?

0 votes

@KevinReid Merveilleuses modifications et clarifications. Toutes les collisions sont déposées dans /Library/Logs/DiagnosticReports et le. purgé à peu près après un mois.

0 votes

Ah, c'est parfait ! Si vous pouviez modifier votre réponse pour mettre l'accent sur ce point, je vous en serais reconnaissant.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X