Tylko mój kod

Deweloperzy korzystający z języków.NET Framework są zaznajomieni z tylko kod Moje debugera funkcja, która się systemu, ramy i innych połączeń-user i zwija tych wywołuje w oknach wywołanie stosu.Visual Studio 2013 r. po prostu mój kod został przedłużony do języków C++ i JavaScript.W tym temacie opisano szczegółowe informacje na temat używania tylko moje kodu.NET Framework, macierzystym C++ i JavaScript projektów.

Zawartość

Włączanie lub wyłączanie tylko moje kodu

.NET Framework tylko mój kod

Po prostu mój kod języka C++

Po prostu mój kod JavaScript

Włączanie lub wyłączanie tylko moje kodu

Aby włączyć lub wyłączyć tylko mój kod, wybierz polecenie Opcje i ustawienia na Debug menu.W Debugowanie / Ogólne węzła, wybierz lub wyczyść Włączyć tylko kod Mój.

Włącz tylko mój kod w oknie dialogowym Opcje

[!UWAGA]

Włączyć tylko kod Mój ustawienie jest ustawieniem globalnym, która jest stosowana do wszystkich projektów programu Visual Studio we wszystkich językach.

Zastąpić wywołanie stosu filtrowania

W wywołanie stosu ekranów, takich jak stos wywołań i zadania systemu windows po prostu mój kod zwija kod niebędący użytkownikami do ramki adnotacjami etykietą [External Code].Aby wyświetlić zwiniętego ramki, wybierz polecenie Pokaż kod zewnętrzny w menu kontekstowym stos wywołań wyświetlania.

[!UWAGA]

Pokaż kod zewnętrzny ustawienie jest zapisywane do profiler bieżącego użytkownika.Jest stosowana do wszystkich projektów we wszystkich językach, które są otwierane przez użytkownika.

.NET Framework tylko mój kod

Kod użytkownika i użytkownik nie**|Stepping behavior|Breakpoint behavior|**Zachowanie wyjątek

Kod użytkownika i niebędący użytkownikami

Aby rozróżnić kod użytkownika z kodu-user, po prostu mój kod wygląda na otwartych projektów, pliki symboli (.pdb) i optymalizacji programu.

  1. Jeśli plik binarny jest zbudowana z Otwórz projekt programu Visual Studio, uważa się zawsze kod użytkownika.

  2. Debuger uważa kod jest kod niebędący użytkownikami, gdy jest zoptymalizowany plik binarny lub plik .pdb jest niedostępny.

Trzy atrybuty wpływa również na co narzędzie debugger uważa za mój kod:

Inny kod jest uważana za kod użytkownika.

Stepping zachowanie

Gdy użytkownik Step Into (skrót klawiaturowy: F11) kod niebędący użytkownikami, kroki debuger kodu do następnej instrukcji użytkownika.Gdy użytkownik Step Out (klawiatura: Shift + F11), debugera do następnego wiersza kodu użytkownika.Jeśli napotkano żadnego kodu użytkownika, a następnie kontynuuje wykonywanie aż do aplikacji wyjścia, przerwania lub wystąpi wyjątek.

Zachowanie punkt przerwania

Tylko moje kod jest włączony, można wybrać Złamać wszystkie (klawiatura: Ctrl + Alt + Break) i zatrzymać wykonywanie w miejscu w przypadku, gdy nie ma żadnego kodu użytkownika do wyświetlenia.W takim przypadku zostanie wyświetlone okno nr źródła.Jeśli następnie polecenia krok, debuger powoduje przejście do następnego wiersza kodu użytkownika.

Zachowanie wyjątek

Jeśli wystąpi nieobsługiwany wyjątek w kodzie-user, debuger przerwy w wierszu w kodzie użytkownika, gdzie został wygenerowany wyjątek.

Włączenie wyjątku pierwszy wyjątki szansy linii kodu użytkownika podświetlone jest na zielono.Stos wywołań Wyświetla adnotacjami klatce oznaczonej etykietą [Kod zewnętrzny].

Po prostu mój kod języka C++

Kod użytkownika i użytkownik nie**|Stepping behavior|Exception behavior|Dostosuj stepping zachowanie|**Dostosuj wywołanie stosu zachowanie

Kod użytkownika i niebędący użytkownikami

Tylko moje kodem w języku C++ jest inny niż mój kod po prostu JavaScript i.NET Framework, ponieważ wstępnej zachowanie jest niezależne od zachowanie wywołanie stosu.

Stosy wywołań

Domyślnie narzędzie debugger uważa tych funkcji jest kod niebędący użytkownikami w systemie windows wywołanie stosu:

  • Funkcje odżyłowanego źródła informacji w swoim pliku symboli.

  • Funkcje, gdzie pliki symboli wskazują, że plik nie istnieje źródło odpowiadające ramek stosu.

  • Funkcji określonych w *.natjmc w pliki %VsInstallDirectory%\Common7\Packages\Debugger\Visualizers folder.

Stepping

Domyślnie, tylko funkcji określonych w *.natstepfilter w pliki %VsInstallDirectory%\Common7\Packages\Debugger\Visualizers folderu są uważane za kod niebędący użytkownikami.

Można tworzyć własne .natstepfilter i .natjmc dostosować wzmocnienie i wywołać zachowanie okna stosu w %USERPROFILE%\My Documents\Visual Studio 2013\Visualizers.

Stepping zachowanie

Gdy użytkownik Step Into (skrót klawiaturowy: F11) kod niebędący użytkownikami z kodu użytkownika, kroki debuger kodu do następnego wiersza kodu użytkownika.Gdy użytkownik Step Out (klawiatura: Shift + F11), debugera do następnego wiersza kodu użytkownika.Jeśli napotkano żadnego kodu użytkownika, a następnie kontynuuje wykonywanie aż do aplikacji wyjścia, przerwania lub wystąpi wyjątek.

Jeśli debuger przerwy w kodzie-user (na przykład, jeśli polecenie Przerwij wszystko zatrzyma się kod niebędący użytkownikami), wzmocnienie nadal w kodzie-user.

Zachowanie wyjątek

Kiedy debuger trafienia wyjątek, zatrzymał się na wyjątek, niezależnie od tego, czy użytkownik lub kod niebędący użytkownikami.Z nieobsługiwanym użytkownika opcje w programie Wyjątki okno dialogowe są ignorowane.

Dostosowywanie zachowania wstępnej

Można określić funkcje do kroku przez umieszczenie ich jako kod niebędący użytkownikami w *.natstepfilter pliki.

  • Aby określić kod niebędący użytkownikami dla wszystkich użytkowników komputera, Visual Studio, należy dodać plik .natstepfilter do %VsInstallDirectory%\Common7\Packages\Debugger\Visualizers folder.

  • Aby określić kod niebędący użytkownikami dla poszczególnych użytkowników, Dodaj plik .natstepfilter do %USERPROFILE%\My Documents\Visual Studio 2013\Visualizers folder.

.natstepfilter pliki są plikami xml o następującej składni:

<?xml version="1.0" encoding="utf-8"?>
<StepFilter xmlns="https://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>

Element

Opis

Funkcja

Wymagany.Określa jedną lub więcej funkcji jako funkcje-user.

Name

Wymagany.ECMA-262 sformatowany określając nazwę pełnego działania funkcji, aby dopasować wyrażenie regularne.Na przykład:

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

zawiera informacje debugera wszystkie metody w MyNS::MyClass mają być traktowane jako kod niebędący użytkownikami.Dopasowanie jest uwzględniana wielkość liter.

Module

Opcjonalnie.ECMA-262 sformatowany wyrażenia regularnego, określając pełną ścieżkę do modułu zawierająca funkcję.Dopasowanie jest rozróżniana wielkość liter.

Action

Wymagany.Jedną z tych wartości wielkość liter:

  • NoStepInto— mówi debugera, aby przechodzeniem dopasowanych funkcji.

  • StepInto-zawiera informacje debugera, aby wkraczać do dopasowanych funkcje, zastępując innych NoStepInto dla funkcji dopasowane.

Dostosuj zachowanie wywołanie stosu

Można określić modułów, pliki źródłowe i funkcje traktować jako kod niebędący użytkownikami w stosy wywołań przez wskazanie ich w *.natjmc pliki.

  • Aby określić kod niebędący użytkownikami dla wszystkich użytkowników komputera, Visual Studio, należy dodać plik .natjmc do %VsInstallDirectory%\Common7\Packages\Debugger\Visualizers folder.

  • Aby określić kod niebędący użytkownikami dla poszczególnych użytkowników, Dodaj plik .natjmc do %USERPROFILE%\My Documents\Visual Studio 2013\Visualizers folder.

.natjmc pliki są plikami xml o następującej składni:

<?xml version="1.0" encoding="utf-8"?>
<NonUserCode xmlns="https://schemas.microsoft.com/vstudio/debugger/jmc/2013">
    
  <!-- 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>

Moduł atrybutów elementów

Atrybut

Opis

Name

Wymagany.Pełna ścieżka modułu lub modułów.Można używać symboli wieloznacznych Windows ? (zero lub jeden znaków) i * (zero lub więcej znaków).Na przykład:

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

zawiera informacje debugera, aby traktować wszystkie moduły w \3rdParty\UtilLibs na dowolnym dysku jako kod zewnętrzny.

Company

Opcjonalnie.Nazwa firmy, która publikuje modułu, w którym jest osadzony w pliku wykonywalnym.Atrybut ten można użyć, aby odróżnić modułów.

Element atrybuty pliku

Atrybut

Opis

Name

Wymagany.Pełna ścieżka pliku źródłowego lub plików, aby traktować jako kod zewnętrzny.Można używać symboli wieloznacznych Windows ? i * określając ścieżkę.

Funkcja atrybutów elementów

Atrybut

Opis

Name

Wymagany.Pełną nazwę funkcji do traktowania jako kod zewnętrzny.

Module

Opcjonalnie.Nazwa lub Pełna ścieżka do modułu, który zawiera funkcję.Atrybut ten można użyć, aby odróżnić funkcje o tej samej nazwie.

ExceptionImplementation

Po ustawieniu true, wyświetla stos wywołań funkcji funkcji, który wygenerował wyjątek zamiast tej funkcji.

Po prostu mój kod JavaScript

Kod użytkownika i użytkownik nie**|Stepping behavior|Breakpoint behavior|Exception behavior|**Dostosować tylko mój kod

Kod użytkownika i niebędący użytkownikami

Kod klasyfikacji

Mój kod po prostu JavaScript kontroluje wyświetlanie stosu stepping i wywołanie Kategoryzacja kodu w jednym z tych klasyfikacji:

MyCode

Kod użytkownika, który należy do użytkownika i kontroli.

LibraryCode

Kod użytkownika inne niż z bibliotek, które są używane regularnie i aplikacji opiera się na działał poprawnie (na przykład WinJS lub jQuery).

UnrelatedCode

Non-user kodu, który może być uruchomiony w aplikacji, ale nie są jego własnością i aplikacji bezpośrednio nie opiera się na to, aby działać poprawnie (na przykład reklamy SDK, który wyświetla reklamy).W projektach Sklep Windows wszelki kod, który jest ładowany do swojej aplikacji HTTP lub HTTPS URI również uznaje się za UnrelatedCode.

Debuger JavaScript automatycznie klasyfikuje następujących typów kodu:

  • Skrypt wykonywany przez przekazanie ciągu do hosta dostarczonych przez eval funkcja jest klasyfikowany jako MyCode.

  • Skrypt wykonywany, przekazując ciąg do Function Konstruktor jest klasyfikowany jako LibraryCode.

  • Skrypt, który zawarty w odwołaniu framework, takie jak WinJS lub Azure SDK, jest klasyfikowany jako LibraryCode.

  • Skrypt wykonywany, przekazując ciąg do setTimeout, setImmediate, lub setInterval funkcje są klasyfikowane jako UnrelatedCode.

  • %VSInstallDirectory%\JavaScript\JustMyCode\mycode.default.wwa.json Określa inny kod użytkownika i użytkownik nie dla wszystkich projektów programu Visual Studio JavaScript.

Można modyfikować domyślne klasyfikacje i klasyfikowania określonych plików i adresów URL przez add .json plik o nazwie mycode.json do folderu głównego projektu.

Inny kod jest klasyfikowany jako MyCode.

Stepping zachowanie

  • Jeśli funkcja nie jest użytkownikiem (MyCode) kod, Step Into (skrót klawiaturowy: F11) zachowuje się jak Kroku nad (klawiatura: F10).

  • Jeśli krok rozpoczyna się w niebędący użytkownikami (LibraryCode lub UnrelatedCode) – kod, a następnie stepping tymczasowo działa tak, jakby tylko mój kod nie jest włączona.Tak szybko, jak krok wstecz do kodu użytkownika, po prostu mój kod stepping zostanie ponownie włączony.

  • Gdy kroku w kodzie użytkownika skutkuje opuszczania bieżącego kontekstu wykonywania (na przykład czynności opisanej w punkcie w ostatnim wierszu program obsługi zdarzeń), debuger zatrzymuje się na następny wykonanego wiersza kodu użytkownika.Na przykład, jeśli wywołanie zwrotne jest wykonywana w LibraryCode kod Debuger kontynuuje aż do następnego wiersza kodu użytkownika jest wykonywana.

  • Step Out (klawiatura: Shift + F11) zatrzymuje się w następnym wierszu kodu użytkownika.Jeśli napotkano żadnego kodu użytkownika, a następnie kontynuuje wykonywanie aż do aplikacji wyjścia, przerwania lub wystąpi wyjątek.

Zachowanie punkt przerwania

  • Punkty przerwania, które zostały ustawione w dowolny kod zawsze trafi niezależnie od klasyfikacji tego kodu

  • Jeśli debugger napotkaniu słowo kluczowe:

    • LibraryCode kod, debuger zawsze podziały.

    • UnrelatedCode kod, nie spowodował zatrzymania debugera.

Zachowanie wyjątek

Jeśli w wystąpi wyjątek nieobsłużony:

  • MyCode lub LibraryCode kod, debuger zawsze podziały.

  • UnrelatedCode kod, i MyCode lub LibraryCode kod jest na stosie wywołań, podziały debugera.

Jeśli pierwszy szansę wyjątki są włączone dla wyjątku w oknie dialogowym Wyjątki, a wyjątek w LibraryCode lub UnrelatedCode kodu:

  • Jeśli obsługiwany jest wyjątek, nie przerwanie debugera.

  • Jeśli ten wyjątek nie jest obsługiwany, powoduje przerwanie debugera.

Dostosowywanie tylko mój kod

Do klasyfikowania użytkownika i kod niebędący użytkownikami dla jednego projektu programu Visual Studio, dodać .json plik o nazwie mycode.json do folderu głównego projektu.

Klasyfikacje są wykonywane w następującej kolejności:

  1. Klasyfikacje domyślne

  2. Klasyfikacje w %VSInstallDirectory%\JavaScript\JustMyCode\mycode.default.wwa.json pliku

  3. Klasyfikacje w mycode. json pliku bieżącego projektu.

Każdy krok klasyfikacji zastępuje poprzednie kroki.Aby wyświetlić listę wszystkich par wartości klucza, nie wymaga pliku .json i MyCode, biblioteki, i niepowiązani wartości mogą być puste tablice.

Moje pliki .json kodu należy użyć następującej składni:

{
    "Eval" : "Classification",
    "Function" : "Classification",
    "ScriptBlock" : "Classification",
    "MyCode" : [
        "UrlOrFileSpec”,
        . . .
        "UrlOrFileSpec”
    ],
    "Libraries" : [
        "UrlOrFileSpec”,
        . .
        "UrlOrFileSpec”
    ],
    "Unrelated" : [
        "UrlOrFileSpec”,
        . . .
        "UrlOrFileSpec”
    ]
}

Eval, funkcji i blok skryptu

Eval, Funkcja, i Blok skryptu par wartości klucza ustalenia jak dynamicznie wygenerowanego kodu jest klasyfikowany.

Eval

Skrypt wykonywany przez przekazanie ciągu do hosta dostarczonych przez eval funkcji.Domyślnie skrypt Eval jest klasyfikowany jako MyCode.

Funkcja

Skrypt wykonywany, przekazując ciąg do Function Konstruktor.Domyślnie funkcja skryptów jest klasyfikowany jako LibraryCode.

Blok skryptu

Skrypt wykonywany, przekazując ciąg do setTimeout, setImmediate, lub setInterval funkcji.Domyślnie skrypt blok skryptu jest klasyfikowany jako UnrelatedCode.

Wartość można zmienić na jeden z tych słów kluczowych:

  • MyCodeklasyfikuje skrypt jako MyCode.

  • Libraryklasyfikuje skrypt jako LibraryCode.

  • Unrelatedklasyfikuje skrypt jako UnrelatedCode.

MyCode, biblioteki, jak i niepowiązanych

MyCode, biblioteki, i niepowiązani par wartości klucza podać adresy URL lub pliki, które mają zostać uwzględnione w klasyfikacji:

MyCode

Tablica adresów URL lub pliki, które są sklasyfikowane jako MyCode.

Biblioteki

Tablica adresów URL lub pliki, które są sklasyfikowane jako LibraryCode.

Niepowiązane

Tablica adresów URL lub pliki, które są sklasyfikowane jako UnrelatedCode.

Ciąg adresu url lub pliku może zawierać jedną lub więcej * znaków, które odpowiadają zero lub więcej znaków.*jest to równoważne wyrażenie regularne .*.