Mam zwykły kod C #. Nie mam wyjątków . Chcę programowo rejestrować bieżące dane śledzenia stosu w celu debugowania. Przykład:
public void executeMethod()
{
logStackTrace();
method();
}
c#
.net
logging
stack-trace
printstacktrace
Ricibald
źródło
źródło
StackTrace
jest wolny - używaj go oszczędnie.Alternatywą
System.Diagnostics.StackTrace
jest użycie System.Environment.StackTrace, która zwraca ciąg reprezentacji stosu.Inną przydatną opcją jest użycie zmiennych
$CALLER
i$CALLSTACK
debugowanie w Visual Studio, ponieważ można to włączyć w czasie wykonywania bez przebudowywania aplikacji.źródło
Environment.StackTrace
właśnie pojawiło się nowe wystąpienieStackTrace
.System.Environment.StackTrace
może być wygodniejszym sposobem uzyskiwania dostępu do tych informacji.System.Diagnostics.StackTrace
- patrz msdn.microsoft.com/en-us/library/…Environment.StackTrace
zawsze zaczyna się odat System.Environment.GetStackTrace(Exception e, Boolean needFileInfo) at System.Environment.get_StackTrace()
? To nie jest część aktualnego śladu stosu w momencie, gdy ktoś go szuka.Można to zrobić na dwa sposoby.
System.Diagnostics.StackTrace()
Daje ślad stosu dla bieżącego wątku. Jeśli masz odwołanie doThread
instancji, możesz uzyskać ślad stosu dla tego poprzez przeciążoną wersjęStackTrace()
.Możesz także sprawdzić pytanie Przepełnienie stosu Jak uzyskać śledzenie stosu nieaktualnego wątku? .
źródło
Można to również zrobić w debugerze programu Visual Studio bez modyfikowania kodu.
Oczywiście nie pomaga to, jeśli uruchamiasz kod na innym komputerze, ale może być całkiem przydatne, aby móc wypluć ślad stosu automatycznie bez wpływu na kod wersji lub nawet bez konieczności ponownego uruchamiania programu.
źródło
Dane wyjściowe będą podobne do:
Zastąp
Console.WriteLine
swojąLog
metodą. W rzeczywistości nie ma potrzeby stosowania.ToString()
konsoli Console.WriteLine, ponieważ akceptujeobject
. Ale może być to potrzebne do metody Log (string msg).źródło
Wydaje się dla mnie pracować
źródło