2011-10-12 9 views
7

Sto eseguendo un'applicazione incorporata sulla scheda ARM9, dove la dimensione totale del flash è solo di 180 MB. Sono in grado di eseguire gdb, ma quando lo faccioCome limitare la dimensione del file core dump durante la generazione con GDB

(gdb) generate-core-dump

ottengo un errore

warning: Memory read failed for corefile section, 1048576 bytes at 0x4156c000. 
warning: Memory read failed for corefile section, 1048576 bytes at 0x50c00000. 
Saved corefile core.5546 
The program is running. Quit anyway (and detach it)? (y or n) [answered Y; input not from terminal] 
Tamper Detected 
**********OUTSIDE ifelse 0********* 
length validation is failed 

Ho anche impostare ulimit -c 50000 ma ancora il core dump supera questo limite. Quando eseguo il controllo ls -l per controllare la dimensione del file, è superiore a 300 MB. In questo caso, come devo limitare la dimensione del core dump?

risposta

8

GDB non rispetta 'ulimit -c', fa solo il kernel.

Non è chiaro se si esegue GDB sulla scheda di destinazione o su un host di sviluppo (e utilizzando gdbserver sulla destinazione). Probabilmente dovresti usare quest'ultimo, che ti permetterà di raccogliere il core dump completo.

I dump core troncati sono comunque un problema, poiché spesso non contengono esattamente le informazioni necessarie per eseguire il debug del problema.

+0

Sto eseguendo gdb sulla scheda di destinazione. Posso anche usare gdbserver, ma dal momento che il crash non è facilmente riproducibile, vado con la prima opzione. –

+1

Scusate ma non riesco a vedere come eseguire gdb o gdbserver come qualcosa a che fare con lo schianto essendo facilmente riproducibile o no? – shodanex

+0

@shodanex - utilizzando il modello client-server il core può essere raccolto sul file system "host", non sul sistema embedded, che qui ha solo 180MB di spazio disponibile per un file core. Presumibilmente il sistema host ha un HDD completo ed è in grado di salvare un file core molto più grande. – Peter

0

Quando hai usato ulimit -c? Deve essere utilizzato prima di avviare il programma per il quale si sta generando un core dump e all'interno della stessa sessione.

+0

Avevo impostato ulimit prima di eseguire GDB. Ho messo 'ulimit -c 50000' in /etc/rc.d/init.d/startup e ho controllato manualmente anche usando 'ulimit -a' ed è stato impostato correttamente. –

4

nella shell rc-file:

limit coredumpsize 50000    # or whatever limit size you like 

che dovrebbe impostare il limite per tutto, compreso GDB

Nota:

Se si imposta a 0, è possibile assicurarsi che il proprio la home directory non è ingombra di file di dump di base.