2013-01-14 1 views
0

J'ai le problème qu'une application Mac que j'ai écrite souvent se termine soudainement avec un code de sortie inconnu pour moi 33 et sans autre indication de ce qui s'est mal passé. J'ai déjà cherché l'ensemble du code source pour le numéro 33, mais je n'ai rien trouvé (j'espérais une ligne de code comme exit(33)).Comment identifier un code de sortie inconnu?

Pouvez-vous me donner un indice sur la façon dont je pourrais localiser ce problème? Existe-t-il un moyen par exemple de définir un point d'arrêt dans la fonction de sortie ou quelque chose comme ça?

+0

Vous devrez ajouter plus de journalisation à votre application pour voir ce qu'elle faisait au moment où 'exit()' a été appelée. – trojanfoe

+0

... ou vous pouvez l'exécuter dans 'dtrace'. – trojanfoe

+0

Est-ce un code d'erreur standard, peut-être? En recherchant google, j'ai obtenu -33 pour le répertoire complet, ou 33 pour l'argument invalide à la fonction de virgule flottante. Mais l'exécuter dans xcode sous le débogueur devrait vous donner un message plus bavard. – Chris

Répondre

0

Il n'existe aucune signification prédéfinie pour un code de sortie de processus. La norme C définit EXIT_SUCCESS et EXIT_FAILURE sans valeurs numériques. Sur les systèmes de type Unix, ils sont définis sur 0 et 1. Unix limite ceux qui sortent à un entier non signé de 8 bits, ils vont donc de 0 à 255, mais la signification de chaque code de sortie (sauf 0 pour le succès) développeur.

FreeBSD définit quelques valeurs comme indiqué sur la sysexits(3) manpage. Mais le nombre 33 n'est pas parmi eux. Votre meilleur moyen de déboguer ce problème serait de définir un point d'arrêt aux diverses fonctions exit (exit, _exit) et de voir quand et où ils sont appelés.

+0

J'ai déjà vérifié l'ensemble de mon code source pour les appels de sortie et aucun d'entre eux n'a pu créer le code 33. Il doit être créé par une fonction système. –

0

Le problème était qu'il y avait un appel de sortie exit(12321) dans mon code, qui est signalé dans la console comme 33. Il semble que le paramètre de statut de exit(int) ne peut pas être une valeur int arbitraire.

+1

(12321 & 0x7f) == 33. De quelle manière, ou quelle partie de, l'argument de exit() est communiqué à l'environnement est fortement dépendant du système. De nombreuses coques ne conservent que les 7 bits inférieurs, comme dans votre cas. – Chris

Questions connexes