Eu tenho um código C # regular. Eu não tenho exceções . Desejo registrar programaticamente o rastreamento de pilha atual para fins de depuração. Exemplo:
public void executeMethod()
{
logStackTrace();
method();
}
c#
.net
logging
stack-trace
printstacktrace
Ricibald
fonte
fonte
StackTrace
é lento - use-o com moderação.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.fonte
Environment.StackTrace
apenas novo é uma instância deStackTrace
.System.Environment.StackTrace
pode ser uma maneira mais conveniente de acessar essas informações.System.Diagnostics.StackTrace
- ver msdn.microsoft.com/en-us/library/...Environment.StackTrace
sempre começaat 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 umaThread
instância, poderá obter o rastreamento de pilha para isso através da versão sobrecarregada deStackTrace()
.Você também pode conferir a questão Stack Overflow. Como obter o stacktrace do thread não atual? .
fonte
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.
fonte
A saída será semelhante a:
Substitua
Console.WriteLine
pelo seuLog
método. Na verdade, não há necessidade.ToString()
do caso Console.WriteLine, pois ele aceitaobject
. Mas você pode precisar disso para o seu método Log (string msg).fonte
Parece funcionar para mim
fonte