Podczas korzystania z niezarządzanego API dla platformy .NET do profilowania procesu w procesorze .NET, możliwe jest sprawdzenie wskaźnika instrukcji IL, który koreluje z macierzysty wskaźnik instrukcji dostarczany do funkcji StackSnapshotCallback?Jak mapować natywny wskaźnik instrukcji IL w trakcie przetwarzania
Co jest prawdopodobnie oczywiste, robię migawkę bieżącego stosu i chciałbym podać informacje o pliku i numerze linii w zrzucie stosu. Managed Stack Explorer robi to, wysyłając zapytanie do ISymUnmanagedMethod::GetSequencePoints
. To jest świetne, ale punkty sekwencji są powiązane z przesunięciami i do tej pory zakładałem, że są to przesunięcia od początku metody (w języku pośrednim).
W komentarzu uzupełniającym do jego wpisu na blogu Profiler stack walking: Basics and beyond, David Broman wskazuje, że mapowanie to można osiągnąć za pomocą ICorDebugCode::GetILToNativeMapping
. Jednak nie jest to idealne rozwiązanie, ponieważ uzyskanie tego interfejsu wymaga dołączenia do mojego procesu z innego procesu debuggera.
Chciałbym tego uniknąć, ponieważ chciałbym nadal móc uruchamiać moją aplikację z poziomu debuggera Visual Studio podczas wykonywania tych migawek. Ułatwia kliknięcie numeru linii w oknie wyjściowym i przejście do odpowiedniego kodu.
Funkcjonalność jest możliwa ... możesz wypluć ślad stosu o numerach linii wewnątrz zarządzanego kodu, jedyne pytanie, czy jest dostępne. Ponadto nie chcę używać funkcji System::Diagnostics::StackTrace
ani System::Environment::StackTrace
, ponieważ ze względu na wydajność muszę opóźnić faktyczny zrzut stosu .... tak więc obniżenie kosztów rozwiązywania nazw metod i położenia kodu na później jest pożądane ... wraz z możliwością wymieszania rodzimych i zarządzanych ramek.
Mały błąd tutaj - frame.pc w linii 17 pierwszego fragmentu kodu powinien być "instructionPtr", który jest parametrem ip UINT_PTR twojego wywołania zwrotnego DoStackSnapshot. Dzięki Steven! Naprawdę mi pomogłeś :) –
Hmm ... dobry punkt. Nie pamiętam, skąd pochodzi frame.pc. Może próbowałem wyjaśnić, co jest używane. W każdym razie rzeczywista wartość z komentarzem o tym, skąd pochodzi, wydaje się być rozważna. Edytowane. Dzięki za wskaźnik. – Steven