Identificar variável causando erro de memória
Então eu tive um erro estranho algumas vezes agora e estou procurando algumas boas direções para identificar o problema.
Basicamente, o que estou vendo é um seg-fault. Os sintomas são os seguintes:
Ocorre somente quando o programa está no modo de liberação, não na depuração.Ele aparece como um segfault e o GDB me diz que está_list_release
/_free()
/free()
no final de uma função.
Program received signal SIGSEGV, Segmentation fault.
0xb0328af8 in _list_release () from /usr/qnx650/target/qnx6/x86/lib/libc.so.3
(gdb) bt
0 0xb0328af8 in _list_release () from /usr/qnx650/target/qnx6/x86/lib/libc.so.3
1 0xb032a464 in __free () from /usr/qnx650/target/qnx6/x86/lib/libc.so.3
2 0xb0329f7d in free () from /usr/qnx650/target/qnx6/x86/lib/libc.so.3
Eu não estou usando nenhuma memória dinâmica (exceto para o que pode aparecer em Eigen (ou outras bibliotecas)
Eu posso imprimir todas as variáveis locais antes do final da função, por isso não é um duplo livre.A última vez que isso aconteceu, foi uma falha de memória que se encaixa em todos esses problemas. Irritantemente desta vez não consigo encontrar o problema.
O que eu gostaria de fazer é o seguinte:
Isso seria extremamente útil: como posso forçar esse erro no modo de depuração, o GDB seria muito mais útil.Qual é a melhor maneira de rastrear o que o pequeno bugger está causando o problema?NOTA: Eu não posso usar valgrind, ele não funciona no sistema operacional que estou usando (QNX)Qualquer ajuda seria ótimo.