2010-02-23 4 views
6

Sto provando a eseguire il debug di un segfault su un'applicazione a cui sto lavorando (funziona su Linux ovviamente, quindi non posso utilizzarlo come soluzione per il debug di core dump). Ad ogni modo, ho impostato "ulimit -c unlimited" e snow leopard reports "Errore di segmentazione (core dumped)" ma purtroppo non è stato trovato alcun file core. Snow Leopard li ha messi da qualche parte speciali o c'è qualche altra opzione che devo abilitare? Sorprendentemente piccolo restituito quando google questo ...Snow Leopard mette le discariche essenziali in un posto speciale?

+0

È possibile eseguire l'applicazione con il debugger (XCode o semplice gdb)? –

+0

Posso, ma spesso è un problema, specialmente se il mio codice è collegato a Python o qualcosa di simile. Altre volte i segfault non sono riproducibili, quindi mi piacerebbe essere in grado di fare post-mortem correttamente –

risposta

6

È necessario configurare launchd in modo che scriva effettivamente i core dump. È possibile trovare le istruzioni per farlo in questo Apple TechNote.

Fondamentalmente, è necessario attivare core dump aggiungendo la riga:

limit core unlimited 

al file /etc/launchd.conf, creando, se necessario, e quindi riavviare.

È inoltre possibile abilitare il core dump per una singola sessione di terminale chiamando:

ulimit -c unlimited 

prima di lanciare la vostra applicazione a riga di comando.

È possibile trovare i core dump in /cores. Fare attenzione, poiché i dump di nucleo possono essere di grandi dimensioni e possono facilmente riempire l'unità se non si pulisce regolarmente la directory /cores.

+0

Aha! Esattamente quello che volevo! Mi chiedo perché hanno deciso di memorizzarli lì invece che nella directory di lavoro ... –

+0

Sospetto solo che sia più facile pulirli. Se i dump del core sono abilitati a livello di sistema, si potrebbe finire con un sacco di file di grandi dimensioni sparsi per il sistema se sono stati inseriti nella directory di lavoro. –

1

Questa è solo una supposizione selvaggia, ma hai controllato /Library/Logs/DiagnosticReports/?

+0

Sembra che ne abbia uno solo io non so come usare un computer, immagino. Nessun file core in là però = ( –

+1

Prova anche ~/Library/Logs/DiagnosticReports/per i rapporti di arresto anomalo dell'applicazione. Su OS X, l'albero/Library viene eseguito il mirroring per ogni utente in ~/Library. Se l'app viene eseguita nello spazio utente, OS X metterà il rapporto crash sotto ~/Library. –