Pergunta

Um colega de trabalho tem um programa C que não consegue de uma maneira previsível por causa de alguma memória corrompida. Ele gostaria de usar dbx para monitorar a posição de memória uma vez que é alocado, a fim de identificar o código que faz com que a corrupção.

Isso é possível? Se assim o que é a sintaxe para produzir um ponto de interrupção no momento da corrupção?

Se não, o que seria uma boa abordagem para corrigir esse tipo de problema?

(A minha tática usual é de olhar para o controle de origem para ver o que eu mudei recentemente, uma vez que é geralmente a causa. Mas o código em sons pergunta como se ela só tenha trabalhado por sorte, de modo que não vai . trabalho Além disso, eu já me eliminado como o culpado por nunca ter trabalhado com o código; -).

Foi útil?

Solução

Tendo olhado mais profundamente, parece que a solução em versões recentes do dbx é algo como:

stop access w <address>, <size>

Desde <address> e <size> podem ser expressões, você pode escrever comandos como:

stop access w &p, sizeof(int)

Isso pressupõe p é um ponteiro e queremos monitorar a primeira palavra que ele aponta.

Eu também funcionar através de uma multa tutorial no rastreamento e pisando erros de memória. Ele usa gdb em vez de dbx, mas os princípios devem ser os mesmos.

Outras dicas

No AIX, você quer usar stophwp:

(dbx) help stophwp

stophwp <address> <size>

        Stop execution when the contents of the specified
        memory region change.  This is a accomplished in
        hardware and may not be available on all models.

Eu não sou nenhum dev Solaris, mas você pode fazer isso com o GDB e hardware breakpoints

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top