Program, nad którym pracuję, ma funkcję rejestrowania o nazwie "Błąd", aby powiadamiać o błędach bez awarii programu, jednak chciałbym dołączyć ślad stosu, aby te niekrytyczne błędy można łatwiej debugować. Moim pierwszym instynktem było użycie System.Diagnostics.StackTrace
, co niestety nie jest dostępne w PCL.C# Przenośna biblioteka klasowa Odpowiednik System.Diagnostics.StackTrace
Potem próbowałem rzucić i natychmiast złapać wyjątek.
try { throw new Exception(); }
catch (Exception ex) { return ex.StackTrace; }
Niestety, to tylko zapewnia wierzch stosu wywołań: ponieważ nie rozwikłać stos na swojej drodze w dół, nie dostarcza żadnej użytecznej informacji. Tak, moje pytanie jest następujące: Jak uzyskać ślad stosu w funkcji C# PCL bez rzucania błędu i przechwytywania go na dole stosu? Wolałbym zachować kod w całości w PCL i unikać używania abstrakcji i kodu implementacji specyficznej dla platformy dla czegoś tak banalnego.
Edytuj jako odpowiedź na komentarz: `throw new Exception (ex) Dodaje tylko kolejną warstwę do śledzenia stosu, więc ma dwie linie w funkcji śledzenia stosu, ale nadal nie może pobrać pełnego śladu.
Myślę, że w większości przypadków nie masz szczęścia. Czy "ex.ToString()" zawiera ślad stosu? Być może będziesz musiała sobie z tym poradzić. A może "wyrzuć nowy wyjątek (ex);" –
Ten pierwszy nie pozwala mi, ale wypróbuj go i zaktualizuj pytanie. –