Pode algo útil ser feito com um núcleo truncado?

5

Temos processos escritos em uma mistura de Python, Java e C ++ que são despejos principais de tempos em tempos. Eles alocam mais memória em partes, conforme necessário, durante o tempo de execução, e são conhecidos por travar quando suas dicas de alocação excedem 4G (eu acho que o valor de retorno do malloc() não está marcado).

No entanto, os core dumps produzidos são truncados, de acordo com o GDB - eles são ilimitados em tamanho no sistema operacional, e no disco eles variam entre o tamanho de 2-3.8G.

O GDB observa que o tamanho não corresponde ao que ele espera (presumivelmente incluindo a alocação falhada?) e desiste - mas em 3.8G de dados certamente deve haver alguma coisa de interesse? Possivelmente, até mesmo a pilha inteira que eu preciso para um backtrace!

Como posso persuadir o GDB a tentar pelo menos, ou existe uma ferramenta alternativa que pode extrair algo de um núcleo truncado?

    
por Gaius 13.09.2014 / 10:19

1 resposta

3

Esta sinopse no site do Sun Studio 12 parece implicar que eles são basicamente inúteis.

excerto - link

If Your Core File Is Truncated

If you have problems loading a core file, check whether you have a truncated core file. If you have the maximum allowable size of core files set too low when the core file is created, then dbx cannot read the resulting truncated core file. In the C shell, you can set the maximum allowable core file size using the limit command (see the limit(1) man page). In the Bourne shell and Korn shell, use the ulimit command (see the limit(1) man page). You can change the limit on core file size in your shell start-up file, re-source the start-up file, and then rerun the program that produced the core file to produce a complete core file.

If the core file is incomplete, and the stack segment is missing, then stack trace information is not available. If the runtime linker information is missing, then the list of loadobjects is not available. In this case, you get an error message about librtld_db.so not being initialized. If the list of LWPs is missing, then no thread information, lwp information, or stack trace information is available.If you run the where command, you get an error saying the program was not “active.”

    
por 14.09.2014 / 05:08