Rastreio de pilha NullPointerException não disponível sem agente de depuração

Eu encontrei recentemente um bug que causa um NullPointerException. A exceção é capturada e registrada usando uma instrução padrão slf4j. Código abreviado abaixo:

for(Action action : actions.getActions()) {
    try {
        context = action.execute(context);
    } catch (Exception e) {
        logger.error("...", e);
        break;
    }
}

Como você pode ver, nada extravagante. No entanto, de todas as instruções de log de exceção que temos, apenas esta não imprime um rastreio de pilha. Tudo o que imprime é a mensagem (representada por "...") e o nome da classe de exceção (java.lang.NullPointerException).

Como o rastreio de pilha em uma exceção é carregado com preguiça, pensei que talvez houvesse uma questão de reordenamento de instrução de algum tipo e decidi chamar e.getStackTrace () antes da instrução de log. Isso não fez diferença.

Então, decidi reiniciar com o agente de depuração ativado. No entanto, porque eu mesmo anexado ao processo, notei que agora os rastreamentos de pilha estavam imprimindo. Então, claramente, a presença do agente de depuração fez com que algumas informações de depuração adicionais ficassem disponíveis.

Desde então, consertei a causa raiz da exceção. Mas gostaria de saber por que o rastreamento de pilha não estava disponível sem um depurador. Ninguem sabe?

Esclarecimento:este não é um problema de registro. Imagine a mesma cláusula try / catch, mas na captura, imprimo o valor de:

e.getStackTrace().length

Sem um depurador, este imprime "0", com um depurador imprime um número positivo (9 neste caso).

Mais informações: isso está acontecendo no JDK 1.6.0_13, 64bit, amd64, linux 2.6.9

questionAnswers(3)

yourAnswerToTheQuestion