Pergunta

Como é que um monitor que linha número causou o erro e isso é possível com a maneira que .NET compila seus .EXEs?

Se não há uma maneira automatizada para Exception.Message para exibir o sub que defecou fora?

try
{
  int x = textbox1.Text;
}
catch(Exception ex)
{
     MessageBox.Show(ex.Message);
}
Foi útil?

Solução

Use ex.ToString() para obter o rastreamento de pilha completo.

Você deve compilar com símbolos de depuração (arquivos .pdb), mesmo no modo de versão, para obter os números de linha (esta é uma opção nas propriedades de compilação do projeto).

Outras dicas

Para ver o stacktrace para uma determinada exceção, use e. StackTrace

Se você precisar de informações mais detalhadas, você pode usar o Sistema .Diagnostics.StackTrace classe (aqui é algum código para que você tente):

try
{
    throw new Exception();
}
catch (Exception ex)
{
    //Get a StackTrace object for the exception
    StackTrace st = new StackTrace(ex, true);

    //Get the first stack frame
    StackFrame frame = st.GetFrame(0);

    //Get the file name
    string fileName = frame.GetFileName();

    //Get the method name
    string methodName = frame.GetMethod().Name;

    //Get the line number from the stack frame
    int line = frame.GetFileLineNumber();

    //Get the column number
    int col = frame.GetFileColumnNumber();
}

Isto só irá funcionar se houver um arquivo PDB disponíveis para a montagem. Veja as propriedades do projeto - guia de construção - Avançada -. Informações de depuração seleção para garantir que não é um ficheiro de APO

Se você usar 'StackTrace' incluir os arquivos PDB no diretório de trabalho, o rastreamento de pilha deve conter os números de linha.

string lineNumber=e.StackTrace.Substring(e.StackTrace.Length - 7, 7);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top