Por que não recebo números de linha de um rastreamento de pilha criado a partir de exceções?

StackOverflow https://stackoverflow.com/questions/2228893

Pergunta

Ok; Supondo este código em execução no modo de depuração -

static StackFrame GetTopFrameWithLineNumber(Exception e)
{
    StackTrace trace = new StackTrace(e);
    foreach (StackFrame frame in trace.GetFrames())
    {
        if (frame.GetFileLineNumber() != 0)
        {
            return frame;
        }
    }
    return null;
}

Estou sempre voltando nulo. Por que os quadros de pilha não têm números de linha quando eu inspeciona o Exception.StackTrace String, ele claramente os possui para qualquer código que não seja de estrutura? Existe algum problema na construção de um rastreamento de pilha a partir de uma exceção que eu não estou ciente?

Editar para clareza:Na exceção jogada, posso ver os números de linha na propriedade Stacktrace. Estou assumindo que isso significa que tenho tudo o mais que preciso.

Foi útil?

Solução

De acordo com Documentação sobre a sobrecarga do construtor do StackTrace que exige uma exceção Você não pode esperar números de linha ao criar o Stacktrace dessa maneira.

O StackTrace é criado com o encadeamento atual do chamador e não contém nome do arquivo, número da linha ou informações da coluna.

Para obter os números de linha, você precisa usar a sobrecarga que leva um bool e também a exceção.

Você também precisa de arquivos de símbolos (PDB) para números de linha. Arquivos de símbolo estão disponíveis para Ambas Depuração e lançamento construídas.

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