Recentemente, tenho visto uma grande variedade de falhas relacionadas à memória no trabalho (aplicativos C ++ no Ubuntu 14.04). Nossos aplicativos usam uma biblioteca própria de terceiros para fazer interface com dados em tempo real e são altamente multiencadeados. Os erros cuspidos pela glibc foram "double free ou corruption" e "detected corrupted double-linked list" sob várias circunstâncias. Os núcleos recuperados destes mostram falhas que ocorrem tanto no código de terceiros (mais freqüentemente) quanto no nosso próprio código (menos freqüentemente). A característica unificadora é que cada falha corresponde a um new
/ malloc
ou a delete
/ free
.
Infelizmente, há muito pouco espaço para um depurador nesse ambiente. Os aplicativos são altamente sensíveis à velocidade e os dados de entrada e as circunstâncias de operação só podem ser aproximados ao tentar reproduzir uma falha, porque tudo no ambiente é em tempo real.
Dito isto, minha pergunta é a seguinte: que utilidades existem que possam iluminar exatamente quais partes de quais processos estão tocando a memória que não deveriam ser? Como as falhas não podem ser reproduzidas de forma confiável, minha única opção processual é capturar dados e examiná-los depois que uma falha ocorreu. Para esse fim, eu encontrei OProfile e Sysprof , mas não tenho certeza se ambos são ferramentas adequadas para a tarefa.Peço desculpas pela imprecisão da pergunta e agradeço antecipadamente por qualquer orientação sobre esse assunto.