Aktualizacja z 22 lutego 2013 r . : Wpis Microsoft Connect zawiera informację od Aloka Shrirama (Menedżera programów, Biblioteki klas podstawowych, .NET Framework), że problem powinien zostać rozwiązany. Wpis Connect jest oznaczony jako rozwiązany (naprawiony) :
Ten problem powinien teraz zostać rozwiązany. Opublikowaliśmy aktualizację źródeł referencyjnych. Daj nam znać, jeśli problem nadal nie zostanie rozwiązany.
Rok i pół.
Linki bonusowe
Głosuj, aby ten błąd został naprawiony w Microsoft Connect .
Wątek w Microsoft Social, który trwa od półtora roku, z pytaniem, kiedy zostanie naprawiony .
Oryginalne pytanie
Jak włączyć stepping źródła .NET Framework w programie Visual Studio 2010?
Uwaga : to pytanie jest częścią większej całości:
- .NET 2.0 WinForm: obsługa zmian DPI i domyślnych czcionek
- Formanty WinForms nie skalują się podczas ScaleControl
- VS2010: Jak włączyć opcję „Włączanie krok po kroku źródła .NET Framework”?
- Visual Studio 2010 Professional: jak uzyskać dostęp do okna modułów?
- Visual Studio 2010: Properties.Settings uszkodzony po ponownym skierowaniu projektu do .NET Framework 3.5
Visual Studio 2010 zawiera nową funkcję:
- Narzędzia, opcje, debugowanie, ogólne, włączanie kroku źródłowego .NET Framework
Postępuj zgodnie z instrukcjami na stronie MSDN How to: Debug .NET Framework Source :
Aby włączyć debugowanie źródła .NET Framework
W menu Narzędzia kliknij Opcje .
W oknie dialogowym Opcje kliknij kategorię Debugowanie .
W polu Ogólne zaznacz następujące pola wyboru:
- Włącz stepping źródła .NET Framework
- Włącz obsługę serwera źródłowego
Robię to:
Uwaga : Zauważysz, jak zauważa strona MSDN i jak zauważyłem, że zaznaczenie opcji Enable .NET Framework source stepping spowoduje automatyczne odznaczenie ** Enable Just My Code (only Managed only). Włączyłem również komunikaty diagnostyczne obsługi serwera źródłowego.
Włączenie tych opcji powoduje automatyczne ustawienie lokalizacji pobierania pamięci podręcznej symboli:
Uwaga : Wpis Microsoft Symbol Server jest już obecny (i nie można go usunąć).
Strona MSDN mówi, aby załadować symbole:
Aby załadować symbole struktury za pomocą okna modułów
W oknie Moduły kliknij prawym przyciskiem myszy moduł, którego symbole nie są załadowane. Możesz stwierdzić, czy symbole są załadowane, czy nie, patrząc na kolumnę Status symboli .
Wskaż polecenie Załaduj symbole z i kliknij opcję Serwery symboli firmy Microsoft, aby pobrać symbole z publicznego serwera symboli firmy Microsoft lub Ścieżkę symboli, aby załadować je z katalogu, w którym wcześniej były przechowywane symbole.
Próbuję tego:
a następnie ładowane są wszystkie symbole:
Siedziałem na punkcie przerwania, który ma wywołać kod platformy .NET:
protected override void ScaleControl(SizeF factor, BoundsSpecified specified)
{
base.ScaleControl(factor, specified);
Wypchnięcie F11powoduje, że debugger po prostu przeskakuje do następnej linii:
protected override void ScaleControl(SizeF factor, BoundsSpecified specified)
{
base.ScaleControl(factor, specified);
//Record the running scale factor used
this.scaleFactor = new SizeF(
this.scaleFactor.Width * factor.Width,
this.scaleFactor.Height * factor.Height);
Jak włączyć stepping źródła .NET Framework w programie Visual Studio 2010?
Siedzę w punkcie przerwania w moim kodzie. Próbuję dwukrotnie kliknąć funkcję znajdującą się dalej na stosie wywołań. Mam nadzieję, że pozwoliłoby mi to przejść do kodu .NET:
Tyle że to nie działa: Visual Studio mówi mi, że nie ma dostępnego źródła:
Jak włączyć stepping źródła .NET Framework w programie Visual Studio 2010?
Jeśli przełączę się do widoku dezasemblacji przed próbą przejścia do kodu .NET ( Debug -> Windows -> Disassembly ), widzę call
w kodzie .NET:
A kiedy to zrobię, kończę debugowanie dezasemblacji System.Windows.Forms.ScaleControl
:
Co nie jest tym samym, ani tak przydatne, jak wejście do źródła .NET Framework.
Jak włączyć stepping źródła .NET Framework w programie Visual Studio 2010?
Skonfigurowana ścieżka pamięci podręcznej symboli na moim komputerze zawiera pliki pamięci podręcznej symboli:
Więc pobiera pdb
pliki symboli, ale odmawia ich użycia.
Jak włączyć stepping źródła .NET Framework w programie Visual Studio 2010?
Leppie zasugerował, żebym sprawdził Debug
dziennik (przy otwartym oknie dziennika debugowania; w przeciwnym razie nic nie rejestruje):
Step into: Stepping over method without symbols 'System.Windows.Forms.Form.ScaleControl'
Wcześniej w logu widzę jak ładuje się symbole dla System.Windows.Forms.dll
:
Loaded 'C:\Windows\assembly\GAC_MSIL\System.Windows.Forms\2.0.0.0__b77a5c561934e089\System.Windows.Forms.dll', Symbols loaded.
Więc to jest znalezienie swoje symbole, ale twierdzi, że nie może ich znaleźć.
Jak włączyć stepping źródła .NET Framework w programie Visual Studio 2010?
Facet z Microsoft Italy sugeruje wyłączenie Wymagaj plików źródłowych, aby dokładnie pasowały do wersji oryginalnej :
To nie rozwiązało problemu.
Jak włączyć stepping źródła .NET Framework w programie Visual Studio 2010?
Sugerowano, że jest błąd w źródłowym serwerze Microsoft dla .NET Framework 4.0 . Kierując się tą sugestią, zmieniłem projekt na docelowy .NET Framework 3.5 :
To nie rozwiązało problemu.
Jak włączyć stepping źródła .NET Framework w programie Visual Studio 2010?
Ktoś gdzieś bezczynnie się zastanawiał, czy inna osoba mająca ten sam problem używa 64-bitowej wersji debuggera . Teraz nie ma czegoś takiego jak 64-bitowa wersja Visual Studio, ale próbowałem zmienić mój projekt z AnyCPU na x86 (był JITed na x64), na wypadek, gdyby Microsoft nie obsługiwał procesorów 64-bitowych:
To nie rozwiązało problemu:
Step into: Stepping over method without symbols 'System.Windows.Forms.Form.ScaleControl'
Jak włączyć stepping źródła .NET Framework w programie Visual Studio 2010?
Zobacz też
- Konfigurowanie programu Visual Studio do debugowania kodu źródłowego .NET Framework
- Nie można debugować kodu platformy .NET Framework w VS2010
- Przechodzenie do kodu źródłowego platformy .NET nie działa pomimo ustawionych opcji
- Konfigurowanie programu Visual Studio 2010 w celu przejścia do kodu źródłowego Microsoft .NET
- Debugowanie źródła programu Visual Studio 2008 z dodatkiem SP1 .NET Framework
- Okno No Debug> Modules w programie Visual Studio 2008 w wersji 9.0.21022.8 RTM
źródło
Odpowiedzi:
Pliki PDB dotyczące przechodzenia przez kod źródłowy są publikowane tylko dla wersji RTM i dodatków Service Pack. W związku z tym, gdy pojawi się aktualizacja zabezpieczeń i zmodyfikuje dll, którą próbujesz debugować, spowoduje to, że przechodzenie do źródła nie będzie działać (to znaczy, pojawi się komunikat „Brak dostępnego źródła” z wyszarzonym „Przeglądaj, aby znaleźć źródło” ”).
Jednak po dokonaniu wszystkich odpowiednich ustawień można zastosować następujące obejście. Sposób obejścia polega zasadniczo na znalezieniu aktualizacji zabezpieczeń, które spowodowały zmianę biblioteki DLL, a następnie ich usunięciu. Ma to oczywistą wadę polegającą na usunięciu tych aktualizacji zabezpieczeń z komputera.
Obejście problemu
site:support.microsoft.com/kb System.Windows.Forms.dll 4.0.30319.269
http://support.microsoft.com/kb/2604121
, więc KB2604121 jest tym, co nas interesuje.Musisz to zrobić dla każdej biblioteki DLL w ramach platformy .NET, w której chcesz debugować.
Gdy to zrobisz, ustaw punkt przerwania w źródle .net (na przykład przejdź do zakładki Breakpoints, powiedz New-> Break at Function i wprowadź System.Windows.Forms.Form.Form) lub wejdź do jednego z .net metody w tym dll.
źródło
Chociaż niestety jest problem z Microsoftem, jak zauważył Leppie (i mam ten sam wynik, patrz
należy zauważyć, że twoja próba i tak zakończy się niepowodzeniem, ponieważ wspomniałeś:
zamiast:
referencesource.microsoft.com/symbols
Zobacz sekcję Często zadawane pytania / Rozwiązywanie problemów w sekcji Konfigurowanie programu Visual Studio do debugowania kodu źródłowego .NET Framework
źródło
Myślę, że znalazłem odpowiedź.
Prześledziłem, co się dzieje na Fiddlerze. Wygląda na to, że obecnie dostępne są tylko symbole i nie ma ich źródła.
Gdy VS próbuje załadować symbole z serwera „źródła odniesienia”, kończy się to niepowodzeniem (404). Ponieważ to się nie powiedzie, myślę, że nie może mapować plików źródłowych na tym serwerze.
http://referencesource.microsoft.com/symbols/mscorlib.pdb/ED96A7F38A2940F39B9CA7AD9BC5CB671/mscorlib.pdb
Po powyższym niepowodzeniu próbuje użyć serwera o nazwie „msdl”, na którym znajduje właściwy plik PDB (ale wygląda na to, że ten serwer nie ma informacji o kodzie źródłowym).
http://msdl.microsoft.com/download/symbols/mscorlib.pdb/ED96A7F38A2940F39B9CA7AD9BC5CB671/mscorlib.pd_
Podsumowując, wydaje się, że jest to (tymczasowy) problem firmy Microsoft z ich serwerami.
Jestem pewien, że jakiś czas temu miałem kod źródłowy. Ale teraz to nie działa.
Edytować:
Wypróbowałem to z różnymi wersjami .NET, wszystkie te same wyniki. :(
źródło
Na razie nie działa, jeśli masz zainstalowany dodatek SP1. Oto komentarz dotyczący formularza problemu MS: http://social.msdn.microsoft.com/Forums/en-US/refsourceserver/thread/41388c7b-582b-4e3f-8178-3d38a3c99639
źródło
W moim przypadku debugowałem starą aplikację .NET 2.0 WinForms i otrzymałem komunikat „Źródło niedostępne” . Wypróbowałem wszystkie zalecane ustawienia.
Ostatecznie przebudowałem aplikację, aby tymczasowo była przeznaczona dla platformy .NET 4.5 i udało mi się sprawić, aby źródło zaczęło działać. Być może moja aplikacja była po prostu za stara, aby przejść do źródła. Wiem, że to nie spełnia celu, ale w przypadku szybkich i brudnych testów to działa. Błąd, który mam, jest nadal obecny w .NET 4.5 . :)
źródło
Możesz znaleźć źródło odniesienia tutaj, dostępne do pobrania:
Źródło odniesienia .NET Framework 4.0
Można tam również znaleźć źródła dla WCF, WF, a nawet wersji 4.5 Beta / RC i wielu innych:
Microsoft Referencesource NetFramework
źródło
Oto oficjalne instrukcje https://referencesource.microsoft.com/setup.html
źródło
jeśli chcesz debugować kod open source (taki jak pakiet nuget), możesz dodać ten adres URL do listy serwerów symboli
http://srv.symbolsource.org/pdb/Public
źródło