2010-02-23 7 views
6

J'essaye de déboguer un segfault sur une application sur laquelle je travaille (fonctionne sur linux bien sûr, donc je ne peux pas l'utiliser comme moyen de repli pour le débogage des core dumps). Quoi qu'il en soit, j'ai mis "ulimit -c unlimited" et Snow Leopard signale "Segmentation fault (core dumped)" mais hélas il n'y a pas de fichier core à trouver. Est-ce que Snow Leopard les met quelque part de spécial ou est-ce qu'il y a une autre option que je dois activer? Étonnamment peu retourné quand je google ce ...Est-ce que Snow Leopard met des décharges spéciales quelque part?

+0

Pouvez-vous exécuter votre application sous le débogueur (XCode ou plain gdb)? –

+0

Je peux, mais c'est souvent une douleur, surtout si mon code est lié en python ou quelque chose de similaire. D'autres fois, les erreurs de segmentation ne sont pas reproductibles, donc j'aimerais pouvoir faire des post-mortem correctement –

Répondre

6

Vous devez configurer launchd afin qu'il écrase réellement les vidages de mémoire. Vous pouvez trouver des instructions pour le faire dans ce Apple TechNote.

Fondamentalement, vous devez activer coredumps, en ajoutant la ligne:

limit core unlimited 

à votre fichier /etc/launchd.conf, créant si nécessaire, puis redémarrer.

Vous pouvez également activer la décharge de base pour une seule session de terminal en appelant:

ulimit -c unlimited 

avant de lancer votre application en ligne de commande.

Vous pouvez trouver les décharges de base dans /cores. Soyez prudent, car les vidages de mémoire peuvent être volumineux et peuvent facilement remplir votre lecteur si vous ne nettoyez pas régulièrement le répertoire /cores.

+0

Aha! Exactement ce que je voulais! Je me demande pourquoi ils ont décidé de les stocker là-bas au lieu de dans le répertoire de travail ... –

+0

Je suppose qu'il est plus facile de les nettoyer. Si les vidages centraux sont activés à l'échelle du système, vous pourriez vous retrouver avec beaucoup de gros fichiers dispersés dans le système s'ils étaient placés dans le répertoire de travail. –

1

Ceci est juste une conjecture sauvage, mais avez-vous vérifié /Library/Logs/DiagnosticReports/?

+0

On dirait que j'en ai un Je ne sais pas comment utiliser un ordinateur, je suppose. = ( –

+1

Essayez aussi ~/Library/Logs/DiagnosticReports/pour les rapports d'erreur sur les applications Sous OS X, l'arborescence/Library est mise en miroir pour chaque utilisateur sous ~/Library Si votre application s'exécute dans l'espace utilisateur, OS X mettra le rapport d'accident sous ~/Bibliothèque –