Respostas:
Dê uma olhada no System.Diagnosticsespaço para nome. Muitas guloseimas lá!
System.Diagnostics.StackTrace t = new System.Diagnostics.StackTrace();
É muito bom dar uma olhada para saber o que está acontecendo sob o capô.
Eu recomendo que você analise as soluções de log (como NLog, log4net ou os padrões e práticas da Microsoft Enterprise Library) que podem atingir seus objetivos e mais alguns. Boa sorte, meu caro!
Uma alternativa System.Diagnostics.StackTraceé usar System.Environment.StackTrace, que retorna uma representação de seqüência de caracteres do stacktrace.
Outra opção útil é usar as variáveis de depuração$CALLER e $CALLSTACK no Visual Studio, pois isso pode ser ativado em tempo de execução sem reconstruir o aplicativo.
Environment.StackTraceapenas novo é uma instância de StackTrace.
System.Environment.StackTracepode ser uma maneira mais conveniente de acessar essas informações.
System.Diagnostics.StackTrace- ver msdn.microsoft.com/en-us/library/...
Environment.StackTracesempre começa at System.Environment.GetStackTrace(Exception e, Boolean needFileInfo) at System.Environment.get_StackTrace()? Isso não faz parte do rastreamento de pilha atual, pois alguém está procurando por ele.
Existem duas maneiras de fazer isso. O System.Diagnostics.StackTrace()vai lhe dar um rastreamento de pilha para o segmento atual. Se você tiver uma referência a uma Threadinstância, poderá obter o rastreamento de pilha para isso através da versão sobrecarregada de StackTrace().
Você também pode conferir a questão Stack Overflow. Como obter o stacktrace do thread não atual? .
Você também pode fazer isso no depurador do Visual Studio sem modificar o código.
Obviamente, isso não ajuda se você estiver executando o código em uma máquina diferente, mas pode ser bastante útil poder citar um rastreamento de pilha automaticamente sem afetar o código de liberação ou sem precisar reiniciar o programa.
Console.WriteLine(
new System.Diagnostics.StackTrace().ToString()
);
A saída será semelhante a:
em YourNamespace.Program.executeMethod (String msg)
em YourNamespace.Program.Main (String [] args)
Substitua Console.WriteLinepelo seu Logmétodo. Na verdade, não há necessidade .ToString()do caso Console.WriteLine, pois ele aceita
object. Mas você pode precisar disso para o seu método Log (string msg).
private void ExceptionTest()
{
try
{
int j = 0;
int i = 5;
i = 1 / j;
}
catch (Exception ex)
{
Console.WriteLine("Error: " + ex.Message);
var stList = ex.StackTrace.ToString().Split('\\');
Console.WriteLine("Exception occurred at " + stList[stList.Count() - 1]);
}
}
Parece funcionar para mim
StackTraceé lento - use-o com moderação.