Pergunta

Além de ler o arquivo GetFileName() e lendo a linha GetFileLineNumber() de um StackFrame de

new StackTrace(exception).GetFrame(x)

Existe uma maneira de obter a linha real de código (como uma string), que causou uma exceção?

Graças

Foi útil?

Solução

Depois moretem depuração é difícil, mas não impossível. Existem ferramentas que você pode usar ( aqui e aqui por exemplo), bem como técnicas .

Outras dicas

Eu não penso assim. O código é compilado, portanto, não está mais disponível. No entanto, se você também ter o código fonte disponível, pode haver algumas soluções.

Não, essa é a sua única opção, tanto quanto eu sei. A fim de obter a linha original de código que causou a exceção, então é necessário ter a fonte disponível. Que a StackFrame já permite que você obtenha a linha número (via os símbolos de depuração - o arquivo PDB na maioria dos casos)., torna bastante simples, eu diria

Existe algum problema particular com o método que você sugeriu?

Não há nenhuma maneira confiável para fazer isso porque a informação linha não é armazenado em arquivos DLL. As informações que mapeia blocos de IL em linhas de código fonte é armazenado dentro do arquivo PDB. Você precisaria acessar o APO, a fim de obter as informações linha para uma exceção.

Não há informações suficientes sobre a classe StackFrame para obter a classe ISymUnmanagedMethod apropriado se o PDB está disponível. Principalmente você só precisa do método de token eo deslocamento no método atual. Isso exige que você compreender a estrutura interna do PDB e eu não tenho certeza se ele está documentado em qualquer lugar.

PDB API: http://msdn.microsoft.com/en- us / library / ms233503.aspx

Seria compilado, por isso em tempo de execução que você só tem a IL. Na melhor das hipóteses, você poderia obter o IL e decompile-lo de volta para C #, bem como refletor faz.

Você pode obter linha usando um bloco try catch:

catch(Exception exception) {
    //exception.StackTrace at the first line has the line you are looking for
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top