Primeiro, você executa essa saída por meio de c++filt
, que organiza os símbolos C ++ em uma saída legível por código de origem e capaz de referência cruzada.
A partir disso, você vê que o construtor PROFILE chamou new[]
, o que causou uma exceção para a qual não há manipulador (std :: terminate é chamado), o que faz com que o programa seja abortado, gerando um dump de núcleo .
Você pode envolver a chamada em new[]
em um bloco try...catch
para ver qual é a exceção. Não consigo me lembrar de todas as exceções que new[]
pode levantar e sob quais circunstâncias, mas uma causa de new
falhas é um heap corrompido, geralmente sobrescrevendo os limites de uma alocação ou um duplo delete
.
Você pode diagnosticar esses erros de memória usando programas como valgrind
(livre) ou purify
(comercial, supondo que ele ainda exista - usei-o pela última vez há 15 anos). valgrind
seria um bom começo e mostrará seus erros de memória no formulário mencionado acima.
Você pode ir mais fundo com o dump principal usando gdb
para inspecionar a imagem da memória do seu programa no momento em que ele falhou, mas ninguém aqui pode realmente ajudar com isso - você precisa conhecer a estrutura do seu código e o layout de memória esperado para fazer muito com isso.