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?
risposta
È 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
.
Aha! Esattamente quello che volevo! Mi chiedo perché hanno deciso di memorizzarli lì invece che nella directory di lavoro ... –
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. –
Questa è solo una supposizione selvaggia, ma hai controllato /Library/Logs/DiagnosticReports/
?
Sembra che ne abbia uno solo io non so come usare un computer, immagino. Nessun file core in là però = ( –
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. –
È possibile eseguire l'applicazione con il debugger (XCode o semplice gdb)? –
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 –