Udostępnij za pośrednictwem


Debugowanie tylko kodu użytkownika przy użyciu tylko mojego kodu

Just My Code to funkcja debugowania programu Visual Studio, która automatycznie pomija wywołania do kodu systemowego, frameworku i innego kodu nieużytkownika. W oknie Stos wywołań funkcja Just My Code zwija te wywołania w ramki [kod zewnętrzny].

Tylko mój kod działa inaczej w projektach .NET i C++.

Włącz lub wyłącz funkcję 'Tylko mój kod'

W przypadku większości języków programowania tylko mój kod jest domyślnie włączony.

  • Aby włączyć lub wyłączyć Just My Code w programie Visual Studio, w obszarze Narzędzia Tools>Opcje (lub Debug >Opcje) >Debugowanie>Ogólne, wybierz lub usuń zaznaczenie Enable Just My Code.

pl-PL: Zrzut ekranu przedstawiający opcję Włącz tylko mój kod w oknie dialogowym Opcje.

Zrzut ekranu przedstawiający opcję Włącz tylko mój kod w oknie dialogowym Opcje.

Notatka

Włącz tylko mój kod jest ustawieniem globalnym, które ma zastosowanie do wszystkich projektów programu Visual Studio we wszystkich językach.

Debugowanie tylko mojego kodu

Podczas sesji debugowania okno modułów pokazuje, które moduły kodu debugger uznaje za Mój kod (kod użytkownika) wraz z ich stanem ładowania symboli. Aby uzyskać więcej informacji, zobacz Dowiedz się więcej na temat dołączania debugera do aplikacji.

Zrzut ekranu przedstawiający kod użytkownika w oknie modułów.

Zrzut ekranu przedstawiający kod użytkownika w oknie Moduł.

W oknie stosu wywołań lub zadań , funkcja Just My Code zwija kod nieużytkownika w wyszarzoną ramkę kodu z adnotacjami oznaczoną jako [External Code].

zrzut ekranu przedstawiający kod zewnętrzny w oknie stosu wywołań.

Zrzut ekranu przedstawiający kod zewnętrzny w oknie stosu wywołań.

Napiwek

Aby otworzyć Moduły, Stos wywołań, Zadanialub większość innych okien debugowania, musisz być w sesji debugowania. Podczas debugowania w obszarze Debug>Oknawybierz okna, które chcesz otworzyć.

Aby wyświetlić kod w zwiniętej ramce [Kod zewnętrzny], kliknij prawym przyciskiem myszy w oknie Stos wywołań lub Zadanie , a następnie wybierz Pokaż kod zewnętrzny z menu kontekstowego. Rozwinięte wiersze kodu zewnętrznego zastępują ramkę [kod zewnętrzny].

Zrzut ekranu przedstawiający wyświetlanie kodu zewnętrznego w oknie stosu wywołań.

zrzut ekranu przedstawiający wyświetlanie kodu zewnętrznego w oknie stosu wywołań.

Notatka

Pokaż kod zewnętrzny to bieżące ustawienie profilera użytkownika, które ma zastosowanie do wszystkich projektów we wszystkich językach otwartych przez użytkownika.

Dwukrotne kliknięcie rozwiniętego wiersza kodu zewnętrznego w oknie Call Stack wyróżnia wywołujący wiersz kodu w kolorze zielonym w kodzie źródłowym. W przypadku bibliotek DLL lub innych modułów, które nie zostały odnalezione lub załadowane, może pojawić się strona pokazująca brakujący symbol lub źródło.

Począwszy od programu Visual Studio 2022 w wersji 17.7, możesz automatycznie zdekompilować kod .NET, dwukrotnie klikając kod zewnętrzny w oknie Stos wywołań. Aby uzyskać więcej informacji, zobacz Generowanie kodu źródłowego na podstawie zestawów platformy .NET podczas debugowania.

.NET Just My Code

W projektach .NET, funkcja Just My Code używa plików symboli (.pdb) i optymalizacji programów do klasyfikacji kodu użytkownika i kodu nieużytkownikowego. Debuger platformy .NET traktuje zoptymalizowane pliki binarne i niewczytane pliki .pdb jako kod nieużytkownika.

Trzy atrybuty kompilatora mają również wpływ na to, co debuger platformy .NET uważa za kod użytkownika:

Debuger platformy .NET uwzględnia cały inny kod jako kod użytkownika.

Podczas debugowania platformy .NET:

  • Debugowanie>Krok do (lub F11) w krokach kodu innego niż użytkownik w kodzie do następnego wiersza kodu użytkownika.
  • Debugowanie > (lub Shift +F11) na kodzie innym niż użytkownika przeskakuje do następnego wiersza kodu użytkownika.

Jeśli nie ma więcej kodu użytkownika, debugowanie będzie kontynuowane do momentu zakończenia działania, natrafi na inny punkt przerwania lub zgłosi błąd.

Jeśli debuger przerywa działanie w kodzie niebędącym kodem użytkownika (na przykład użyjesz Debug>Przerwij wszystko i zatrzymasz się w takim kodzie), zostanie wyświetlone okno Brak źródła. Następnie możesz użyć polecenia Debug>Krok, aby przejść do następnego wiersza kodu użytkownika.

Jeśli nieobsługiwany wyjątek występuje w kodzie użytkownika, debuger przerywa działanie w wierszu kodu użytkownika, w którym został wygenerowany wyjątek.

Jeśli wyjątki z pierwszą szansą są włączone dla wyjątku, wywołanie wiersza kodu użytkownika jest wyróżnione na zielono w kodzie źródłowym. W oknie stosu wywołań jest wyświetlana ramka z adnotacjami z etykietą [Kod zewnętrzny].

C++ Tylko mój kod

Począwszy od programu Visual Studio 2017 w wersji 15.8, funkcja Just My Code dla przechodzenia po kodzie jest również obsługiwana. Ta funkcja wymaga również użycia przełącznika kompilatora / JMC (debugowanie tylko mojego kodu). Przełącznik jest domyślnie włączony w projektach C++. W przypadku okna stosu wywołań i obsługi stosu wywołań w programie Just My Code przełącznik /JMC nie jest wymagany.

Aby zostać uznany za kod użytkownika, plik PDB dla pliku binarnego zawierającego kod użytkownika musi zostać załadowany przez debuger (użyj okna modułów, aby sprawdzić stan ładowania).

W przypadku zachowania stosu wywołań, takiego jak w oknie stosu wywołań , Just My Code w języku C++ uważa tylko te funkcje za kod niezwiązany z użytkownikiem :

  • Funkcje z usuniętymi informacjami źródłowymi w pliku symboli.
  • Funkcje, w których pliki symboli wskazują, że nie ma pliku źródłowego odpowiadającego ramce stosu.
  • Funkcje określone w plikach *.natjmc w folderze %VsInstallDirectory%\Common7\Packages\Debugger\Visualizers.

W przypadku krokowego działania kodu, funkcja Just My Code w C++ uwzględnia tylko te funkcje, które są uznawane za kod nieużytkownika:

  • Funkcje, dla których odpowiedni plik PDB nie został załadowany w debugerze.
  • Funkcje określone w plikach *.natjmc w folderze %VsInstallDirectory%\Common7\Packages\Debugger\Visualizers.

Notatka

Aby zapewnić obsługę kroków kodu w programie Just My Code, należy skompilować kod C++ przy użyciu kompilatorów MSVC w programie Visual Studio 15.8 (wersja zapoznawcza 3 lub nowsza), a przełącznik kompilatora /JMC musi być włączony (domyślnie jest włączony). Aby uzyskać dodatkowe informacje, zobacz Dostosowywanie stosu wywołań języka C++ i zachowania kroków kodu oraz wpis na blogu . W przypadku kodu skompilowanego przy użyciu starszego kompilatora pliki .natstepfilter to jedyny sposób na dostosowywanie kroków w kodzie, przy czym jest to niezależne od funkcji Just My Code. Zobacz Dostosowywanie zachowania krokowego języka C++.

Podczas debugowania języka C++ kod inny niż użytkownik jest domyślnie pomijany. Podczas debugowania języka C++:

  • Debugowanie>Krok do wewnątrz (lub F11) w przypadku kodu innego niż użytkownik pomija ten kod lub przechodzi do następnej linii kodu użytkownika, jeśli Krok do wewnątrz jest wywoływany z kodu innego niż użytkownik.
  • debugowanie> (lub Shift+F11) w kodzie innym niż użytkownik jest uruchamiany do następnego wiersza kodu użytkownika (poza bieżącą ramką stosu).

Jeśli nie ma więcej kodu użytkownika, debugowanie będzie kontynuowane, aż się zakończy, trafi na inny punkt przerwania lub zgłosi błąd.

Jeśli debuger przerywa działanie kodu innego niż użytkownik (na przykład użyjesz Debugowanie>Przerwij wszystkie i wstrzymaj kod inny niż użytkownik), krok będzie kontynuowany w kodzie niebędącym użytkownikiem.

Jeśli debuger napotka wyjątek, zatrzymuje się na wyjątku, niezależnie od tego, czy jest on w kodzie użytkownika, czy nieużytkownika. Opcje nieobsługiwane przez użytkownika w oknie dialogowym ustawienia wyjątków są ignorowane.

Dostosowywanie stosu wywołań C++ i zachowania podczas krokowania kodu

W przypadku projektów C++ można określić moduły, pliki źródłowe i funkcje, które okno Stosu Wywołań traktuje jako kod nieużytkownika, umieszczając je w plikach *.natjmc. To dostosowanie dotyczy również kroku kodu, jeśli używasz najnowszego kompilatora (zobacz C++ Just My Code).

  • Aby określić kod niezwiązany z użytkownikiem dla wszystkich użytkowników instalacji programu Visual Studio na danej maszynie, dodaj plik .natjmc do folderu %VsInstallDirectory%\Common7\Packages\Debugger\Visualizers.
  • Aby określić kod nieużytkownika dla indywidualnego użytkownika, dodaj plik .natjmc do folderu %USERPROFILE%\My Documents\<wersji Visual Studio>\Visualizers.

Plik .natjmc jest plikiem XML o następującej składni:

<?xml version="1.0" encoding="utf-8"?>
<NonUserCode xmlns="http://schemas.microsoft.com/vstudio/debugger/jmc/2015">

  <!-- Modules -->
  <Module Name="ModuleSpec" />
  <Module Name="ModuleSpec" Company="CompanyName" />

  <!-- Files -->
  <File Name="FileSpec"/>

  <!-- Functions -->
  <Function Name="FunctionSpec" />
  <Function Name="FunctionSpec" Module ="ModuleSpec" />
  <Function Name="FunctionSpec" Module ="ModuleSpec" ExceptionImplementation="true" />

</NonUserCode>

atrybuty elementu modułu

Atrybut Opis
Name Wymagane. Pełna ścieżka modułu lub modułów. Można użyć symboli wieloznacznych systemu Windows ? (zero lub jeden znak) i * (zero lub więcej znaków). Na przykład

<Module Name="?:\3rdParty\UtilLibs\*" />

polecenie debugera, aby traktować wszystkie moduły w \3rdParty\UtilLibs na dowolnym dysku jako kod zewnętrzny.
Company Fakultatywny. Nazwa firmy publikującej moduł osadzony w pliku wykonywalnym. Tego atrybutu można użyć do uściślania modułów.

atrybuty elementu pliku

Atrybut Opis
Name Wymagane. Pełna ścieżka pliku źródłowego lub plików do traktowania jako kodu zewnętrznego. Podczas określania ścieżki można użyć symboli wieloznacznych systemu Windows ? i *.

atrybuty elementu funkcji

Atrybut Opis
Name Wymagane. W pełni kwalifikowana nazwa funkcji, którą należy traktować jako zewnętrzny kod. Możesz używać symboli wieloznacznych systemu Windows ? i * podczas określania ścieżki.
Module Fakultatywny. Nazwa lub pełna ścieżka do modułu, który zawiera funkcję. Tego atrybutu można użyć do uściślania funkcji o tej samej nazwie.
ExceptionImplementation Po ustawieniu wartości na truestos wywołań wyświetla funkcję, która zgłosiła wyjątek, a nie tę funkcję.

Dostosowywanie zachowania krokowego dla C++ niezależnie od ustawień Just My Code

W projektach C++ można określić funkcje do przeskoczenia, umieszczając je jako funkcje NoStepInto w plikach *.natstepfilter. Funkcje wymienione w plikach *.natstepfilter nie są zależne od ustawień Tylko mojego kodu. Funkcja NoStepInto nakazuje debugerowi przeskoczenie funkcji, nawet jeśli ta wywołuje niektóre funkcje StepInto lub inny kod użytkownika. W przeciwieństwie do funkcji wymienionych w .natjmc, debuger przejdzie do pierwszego wiersza kodu użytkownika wewnątrz funkcji NoStepInto.

  • Aby określić kod inny niż użytkownik dla wszystkich lokalnych użytkowników programu Visual Studio, dodaj plik .natstepfilter do folderu %VsInstallDirectory%\Common7\Packages\Debugger\Visualizers.
  • Aby określić kod użytkownika innego niż użytkownik, dodaj plik .natstepfilter do folderu %USERPROFILE%\My Documents\<wersji programu Visual Studio>\Visualizers.

Notatka

Niektóre rozszerzenia innych firm mogą wyłączać funkcje .natstepfilter.

Plik .natstepfilter jest plikiem XML o następującej składni:

<?xml version="1.0" encoding="utf-8"?>
<StepFilter xmlns="http://schemas.microsoft.com/vstudio/debugger/natstepfilter/2010">
    <Function>
        <Name>FunctionSpec</Name>
        <Action>StepAction</Action>
    </Function>
    <Function>
        <Name>FunctionSpec</Name>
        <Module>ModuleSpec</Module>
        <Action>StepAction</Action>
    </Function>
</StepFilter>

Pierwiastek Opis
Function Wymagane. Określa jedną lub więcej funkcji jako funkcje nieużytkownika.
Name Wymagane. Wyrażenie regularne w formacie ECMA-262 określające pełną nazwę funkcji, która ma być zgodna. Na przykład:

<Name>MyNS::MyClass::.*</Name>

informuje debuger, że wszystkie metody w MyNS::MyClass mają być traktowane jako kod nieużytkownika. Dopasowanie jest uwzględniane w wielkości liter.
Module Fakultatywny. Wyrażenie regularne w formacie ECMA-262 określające pełną ścieżkę do modułu zawierającego funkcję. Dopasowanie jest niewrażliwe na wielkość liter.
Action Wymagane. Jedna z tych wartości uwzględniająca wielkość liter:

NoStepInto — informuje debuger o przechodzeniu przez funkcję.
StepInto — mówi debugerowi, aby wszedł do funkcji, przesłaniając wszystkie inne NoStepInto w przypadku dopasowanej funkcji.

Dodatkowe informacje o plikach .natstepfilter i .natjmc

  • Począwszy od programu Visual Studio 2022 w wersji 17.6, można dodać pliki .natjmc i .natstepfilter bezpośrednio do rozwiązania lub projektu.

  • Błędy składniowe w plikach .natstepfilter i .natjmc nie są zgłaszane w oknie wyjściowym debugera.

  • W przeciwieństwie do plików .natvis , pliki .natstepfilter i .natjmc nie są dynamicznie ładowane ponownie. Zamiast tego te pliki są ponownie ładowane na początku sesji debugowania.

  • W przypadku funkcji szablonu użycie &lt;.*&gt; lub &lt;.* w nazwie może być przydatne.

JavaScript Tylko Mój Kod

W przypadku projektów .esproj w programie Visual Studio 2022 program Visual Studio Code używa pliku launch.json do konfigurowania i dostosowywania debugera. launch.json jest plikiem konfiguracji debugera.

Program Visual Studio dołącza debuger tylko do kodu użytkownika. W przypadku projektów .esproj można skonfigurować kod użytkownika (to znaczy ustawienia Just My Code ) w programie Visual Studio, korzystając z ustawienia skipFiles w launch.json. To ustawienie działa tak samo jak ustawienia launch.json w programie VS Code. Aby uzyskać więcej informacji na temat skipFiles, zobacz Pomijanie nieinteresującego kodu.