2014-12-27 5 views
9

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.

+0

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);" –

+0

Ten pierwszy nie pozwala mi, ale wypróbuj go i zaktualizuj pytanie. –

Odpowiedz

-1

Spróbuj użyć Environment.StackTrace property.

StackTrace listy właściwości metoda nazywa się w odwrotnej kolejności chronologicznej , czyli najnowsza wywołanie metody opisane jest pierwsze, a jedna linia informacji ślad stosu znajduje się na liście dla każdego wywołania metody na stosie. Jednak właściwość StackTrace może nie zgłaszać tak wielu wywołań metod zgodnie z oczekiwaniami z powodu przekształceń kodu, które wystąpiły podczas optymalizacji .

EDIT:

opis wersja wydaje się stwierdzając, że Environment class is supported by PCL:

.NET Framework w wersji Informacja Obsługiwane w: 4.6, 4.5, 4, 3.5, 3,0, 2,0, 1,1, 1.0. Profil klienta .NET Framework Obsługiwany w: 4, 3.5 SP1 Portable Class Library Obsługiwane w: Portable Class Library .NET dla Windows Store apps Obsługiwane w: Windows 8 Obsługiwane w: Windows Telefon 8.1 Obsługiwane w: Windows Phone Silverlight 8.1 Wsparcie ed w: Windows Phone Silverlight 8

+3

Niestety, Environment.StackTrace nie jest dostępny w PCL. –

+0

@ Colourful Monochrome, sprawdź moją edycję. Wygląda na to, że klasa Środowisko jest wspierana przez PCL. Upewnij się, że twój projekt korzysta z System.Environment –

+2

Tak, klasa Environment jest obsługiwana, ale jest prawie bezużyteczna. Wszystkie elementy oprócz 'CurrentManagedThreadId',' FailFast() ',' HasShutdownStarted', 'NewLine',' ProcessorCount' oraz 'TickCount' zostały usunięte. –