Detecção de Malloc

Malloc Detectar fornece um relatório de erro opcional e extensão de detecção para o subsistema malloc . Informações sobre erros que ocorreram no ambiente malloc serão reportados e ações podem ser executadas, se especificado.

Malloc Detectar pode ser dividido em três capacidades distintas:
  • Detectando um erro
  • Reportando o erro usando stderr
  • Reportando o erro usando uma função definida pelo aplicativo

Detectando um erro

Alguns erros no subsistema malloc são fáceis de detectar. Erros como libertar um ponteiro que não é um endereço de heap válido são detectados de forma sincronizada no codecaminho de graça. No entanto, erros causados por eventos assíncronos, como a corrupção de heap, são muito mais difíceis de apontar. A opção check_arena do Malloc Detect foi projetada para verificar esse tipo de corrupção em uma base síncrona. Em cada chamada para uma API de subsistema malloc , uma verificação das estruturas de dados internas é realizada. Se a corrupção for encontrada, ela é então relatada ao aplicativo. Isso proporciona outro ponto no tempo com o qual depurar esses problemas difíceis. A opção check_arena pode ser ativada configurando-se a variável de ambiente MALLOCDEBUG da seguinte forma:
MALLOCDEBUG=checkarena

Reportagem um erro usando stderr

A maneira normal de relatar erros no subsistema malloc é através do valor de retorno e da variável de ambiente errno. A opção verbose do Malloc Detect permite que esses erros sejam impressos para o fluxo de erro padrão do programa de aplicação. Isso fornece uma maneira mais visível, mais detalhada de relatar erros em malloc. A opção verbose pode ser ativada configurando-se a variável de ambiente MALLOCDEBUG da seguinte forma:
MALLOCDEBUG=verbose

|Reportagem de um erro usando uma função definida pelo aplicativo

Malloc Detectar também permite que o usuário forneça uma função que o subsistema malloc chamará sempre que encontrar um erro. O Malloc Report chamará a função fornecida pelo aplicativo, aguarde um retorno e, em seguida, retornará como de costume. Esta instalação permite que o aplicativo execute quaisquer que sejam necessárias tarefas de debug antes de permitir que o programa continue. Para ativar esta facilidade, o aplicativo deve configurar o valor de um ponteiro de função global malloc_err_function igual ao valor da rotina de erro do aplicativo. Por exemplo:
extern void (*malloc_err_function)(int, ...)
malloc_err_function = &application_malloc_err_hdl

Limitações

O Recurso de depuração do Detecta Malloc é compatível com as seguintes políticas de malloc e opções: