2010-02-23 10 views
6

Ich versuche, ein segfault auf einer Anwendung zu debuggen, an der ich arbeite (arbeitet natürlich unter Linux, also kann ich das nicht als mein Fallback zum Debuggen von Core Dumps verwenden). Wie auch immer, ich habe "ulimit -c unlimited" eingestellt und Snow leopard meldet "Segmentation fault (core dumped)", aber leider kann keine Kerndatei gefunden werden. Hat Snow Leopard sie irgendwo anders platziert oder gibt es noch eine andere Option, die ich aktivieren muss? Überraschenderweise wenig zurückgegeben, wenn ich diese google ...Macht Snow Leopard Core Dumps etwas Besonderes?

+0

Können Sie Ihre Anwendung unter dem Debugger (XCode oder plain gdb) ausführen? –

+0

Ich kann, aber es ist oft ein Schmerz, vor allem, wenn mein Code in Python oder etwas Ähnliches verknüpft ist. Andere Male sind segfaults nicht reproduzierbar, also würde ich gerne in der Lage sein, post mortem richtig zu machen. –

Antwort

6

Sie müssen launchd so konfigurieren, dass es tatsächlich die Core-Dumps schreibt. Sie können Anweisungen finden Grundsätzlich in diesem Apple TechNote.

so tun, müssen Sie Core-Dumps ermöglichen, indem Sie die Zeile:

limit core unlimited 

auf Ihre /etc/launchd.conf Datei, wenn nötig zu schaffen und einen Neustart dann.

Sie können auch das Core-Dump für eine einzelne Terminalsitzung ermöglichen durch den Aufruf:

ulimit -c unlimited 

, bevor Sie Ihre Befehlszeilen app starten.

Sie können die Core-Dumps in /cores finden. Seien Sie vorsichtig, da Core Dumps groß sein können und Ihr Laufwerk leicht füllen kann, wenn Sie das Verzeichnis /cores nicht regelmäßig löschen.

+0

Aha! Genau das, was ich wollte! Ich frage mich, warum sie sich entschieden haben, sie dort zu speichern statt im Arbeitsverzeichnis ... –

+0

Ich vermute nur, so dass es einfacher ist, sie zu beseitigen. Wenn Core Dumps systemweit aktiviert sind, können viele große Dateien über das System verteilt werden, wenn sie im Arbeitsverzeichnis abgelegt werden. –

1

Dies ist nur eine wilde Vermutung, aber haben Sie überprüft /Library/Logs/DiagnosticReports/?

+0

Sieht so aus als ob ich _do_ habe. Ich weiß einfach nicht, wie man einen Computer benutzt, denke ich. Es sind jedoch keine Kerndateien drin = ( –

+1

) Versuche auch ~/Library/Logs/DiagnosticReports/für Absturzberichte von Anwendungen. Unter OS X wird die/Library-Struktur für jeden Benutzer unter ~/Library gespiegelt. Wenn deine App im Userspace läuft, OS X wird den Absturzbericht unter ~/Library speichern –