Mam rozszerzenie Visual Studio, które przechwytuje do zdarzeń debugowania. Kiedy debugger zatrzymuje się na linii kodu, mój callback IDebugEventCallback2
zostaje wywołany i mogę znaleźć nazwę pliku i numer linii, gdzie debugger zatrzymał się przez IDebugThread2::EnumFrameInfo
.W programie Visual Studio Extension uzyskaj zakres linii funkcji, w której jest zatrzymywany debugowanie.
Chciałbym poznać zakres linii kodu źródłowego, który obejmuje obecną funkcję.
Mam nadzieję, że możliwe jest uzyskanie potrzebnych informacji z interfejsów debuggera - debugger musi znać zakres linii funkcji. Jeśli to nie jest możliwe, jestem otwarty na wszelkie inne metody. W idealnym świecie rozwiązanie byłoby działać bez systemu projektowego - wiele osób, włącznie z mną, używa Visual Studio jako niezależnego debuggera bez korzystania z systemu projektu. (Również, nie mogę polegać na Roslyn - to musi działać w obecnych wersjach Visual Studio).
Edit: metoda Carlosa korzystania FileCodeModel
działa dobrze, dopóki plik jest częścią projektu. Nadal chciałbym wiedzieć, czy istnieje metoda, która nie wymaga systemu projektu.
Dzięki, ale to nie działa dla mnie. 'GetSourceRange()' zwraca zakres bieżącej instrukcji, a nie całej ramki, a 'Seek()' zwraca 0x80004001 "Nie zaimplementowane" z debuggera C++. (Nie mój downwinter, BTW.) (I dzięki za wskazówkę do twojego wspaniałego artykułu CodeModel, który już obejrzałem. :-)) – RichieHindle