2011-10-12 29 views
7

Estoy ejecutando una aplicación incorporada en la placa ARM9, donde el tamaño total del flash es de 180 MB solamente. Soy capaz de ejecutar gdb, pero cuando lo hagoCómo limitar el tamaño del archivo de volcado del núcleo al generarlo usando GDB

(gdb) generate-core-dump

consigo un error

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 

Asimismo, establecer ulimit -c 50000 pero aún así el vaciado de memoria excede este límite. Cuando hago ls -l para verificar el tamaño del archivo, es más de 300 MB. En este caso, ¿cómo debo limitar el tamaño del volcado del núcleo?

Respuesta

8

GDB no respeta 'ulimit -c', solo el kernel sí.

No está claro si ejecuta GDB en la placa de destino, o en un host de desarrollo (y usa gdbserver en el destino). Probablemente deberías usar este último, lo que te permitirá recolectar un volcado de núcleo completo.

Los volcados de núcleo truncado son un dolor de todos modos, ya que a menudo no contendrán exactamente la información que necesita para solucionar el problema.

+0

Estoy ejecutando gdb en el tablero de destino. También puedo usar gdbserver, pero como el bloqueo no es fácilmente reproducible, voy con la primera opción. –

+1

Lo siento, pero no veo cómo ejecutar gdb o gdbserver como algo relacionado con el bloqueo que se puede reproducir fácilmente o no. – shodanex

+0

@shodanex: utilizando el modelo cliente-servidor, el núcleo se puede recopilar en el sistema de archivos "host", no en el sistema integrado, que aquí solo tiene 180 MB de espacio disponible para un archivo central. Presumiblemente, el sistema host tiene una unidad de disco duro completa y puede guardar un archivo de núcleo mucho más grande. – Peter

0

¿Cuándo usó ulimit -c? Debe usarse antes de iniciar el programa para el que está generando un volcado de núcleo, y dentro de la misma sesión.

+0

Había establecido ulimit antes de ejecutar GDB. Puse 'ulimit -c 50000' en /etc/rc.d/init.d/startup y lo revisé manualmente también usando 'ulimit -a' y se configuró correctamente. –

4

en la shell rc-archivo:

limit coredumpsize 50000    # or whatever limit size you like 

que debe establecer el límite para todo, incluyendo el BGF

Nota:

Si se establece a 0, puede asegurarse de que su el directorio de inicio no está repleto de archivos de volcado de núcleo.

Cuestiones relacionadas