Posso obter a linha de código que causou uma exceção?
-
03-07-2019 - |
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
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
}