Na przykład w jednym miejscu ...
//---------------a
try
{
// some network call
}
catch(WebException we)
{
throw new MyCustomException("some message ....", we);
}
... iw innym miejscu ...
//--------------b
try
{
// invoke code above
}
catch(MyCustomException we)
{
Debug.Writeline(we.stacktrace); // <----------------
}
Drukuję ślad stosu, zaczyna się tylko od a do b, nie zawiera wewnętrznego śladu stosu z WebException.
Jak mogę wydrukować cały ślad stosu ???
throw;
zamiast,throw new MyCustomException(...)
jeśli chcesz zachować (i wyprowadzić) oryginalny stos wyjątków.Odpowiedzi:
Zwykle używam metody .ToString () na wyjątkach, aby przedstawić pełne informacje o wyjątku (w tym wewnętrzny ślad stosu) w tekście:
Przykładowe dane wyjściowe:
źródło
ToString
metodę i drukują niestandardowe komunikaty zamiast pełnych informacji (jest to zła praktyka kodowania, więc nigdy tego nie rób)ToString
gdy jestem pewien, że nie jest nadpisane, i używam właściwości bezpośrednio w inny sposób (jak odpowiedź Andrew Hare ).Użyj takiej funkcji:
Następnie możesz to nazwać tak:
źródło
ToString
?1. Utwórz metodę: jeśli przekażesz wyjątek do następującej funkcji, poda ona wszystkie metody i szczegóły, które są przyczyną wyjątku.
2. Metoda wywołania: Możesz wywołać metodę w ten sposób.
3. Uzyskaj wynik:
źródło
StringBuilder
klasy.