Você enviou, as declarações estão desativadas, você recebe um relatório de falha raro indicando que ocorreu uma violação de ponteiro nulo no seu código. Em um ambiente de desenvolvimento, o problema teria sido pego por uma afirmação.
Tudo o que você tem é um relatório de falha, portanto, reproduzir o problema é quase impossível. Seguir o backtrace não fornece pistas sobre o motivo do acidente ter ocorrido em primeiro lugar.
Opções: - Adicione a verificação do ponteiro para evitar a falha. Isso evitará o acidente, mas você provavelmente nem descobrirá por que isso aconteceu. - deixe voar, espero que aconteça novamente com um cenário de reprovação
Digamos que o aplicativo não se destine a um míssil guiado ou a um sistema de freio automático ...
Qual você escolheria?
Respostas:
Eu escolhi a segunda abordagem. Não há sentido em ocultar a falha se o ponteiro NULL for inesperado no ponto em que ocorreu a falha. Esse ponteiro NULL na maioria dos casos seria apenas um dos sintomas de que algo está errado. Se o ocultarmos com uma verificação de ponteiro NULL, é quase certo que algo mais irá quebrar. Eu sinto que você tem uma chance melhor de entender o cenário, se souber o ponto em que ele falha todas as vezes, em algum lugar aleatório.
fonte
Quantas vezes a falha ocorre? Isso acontece apenas para um em muitos clientes em algum caso obscuro? Quais são as consequências (perda de dados, falha no sistema)? Se isso acontecer a cada 1 em um milhão de casos e eles apenas tiverem que reiniciar o aplicativo e nenhum dado for perdido, provavelmente você não precisará corrigi-lo - deixe assim.
Qual é o custo (dinheiro e tempo) de adicionar as declarações e enviá-las a todos os clientes (se apenas uma parte dos clientes obtiver a nova versão, o restante poderá entrar no problema nulo não verificado)? Quais são as chances de encontrar o problema? Se você apenas colocar verificações aleatórias no código na esperança de detectar o erro, é uma prática ruim ...
O problema pode ser reproduzido na máquina do cliente? Você pode obter acesso a essa máquina? Isso pode ser realmente valioso
Revise seus relatórios de falhas e verifique se as informações fornecidas são úteis e podem ajudá-lo a diagnosticar o problema
fonte
Em uma ordem específica, ele teria sido capturado e corrigido, mas o rastreamento posterior atual nunca foi capturado.
Você deve poder ver o que deu errado com o despejo de memória, verificou parâmetros, etc ...?
Os extras que podem ser feitos com base na quantidade de tempo que você deseja dedicar a isso:
Arquive o despejo de memória e faça referência a ele no código com um comentário na linha em que ele falhou,
isso permite que um que examine um despejo de memória muito semelhante saiba que isso aconteceu antes ...
[tempo gasto: curto]
Verificações adicionais, registro, ... Você deseja evitá-lo e obter mais informações na próxima vez.
[tempo gasto: médio]
Verifique se é impossível chamar o aplicativo dessa maneira para que essa violação ocorra.
[tempo gasto: longo]
fonte
Hoje em dia, eu envio com assert () ativado. Não custa muito e pode tornar a vida muito mais fácil em situações hostis (ou seja, os ambientes de seus clientes costumam ser mais hostis que seus ambientes de desenvolvimento ou controle de qualidade).
fonte