Bagikan melalui


Periksa hanya kode pengguna dengan menggunakan fitur "Just My Code"

Just My Code adalah fitur penelusuran kesalahan pada Visual Studio yang secara otomatis melewati panggilan ke kode sistem, framework, dan kode non-pengguna lainnya. Di jendela Call Stack, Just My Code menciutkan panggilan ini menjadi frame [External Code].

Just My Code bekerja secara berbeda dalam proyek .NET dan C++.

Mengaktifkan atau menonaktifkan Just My Code

Untuk sebagian besar bahasa pemrograman, Just My Code diaktifkan secara default.

  • Untuk mengaktifkan atau menonaktifkan Just My Code di Visual Studio, di bawah Tools>Options (atau Debug>Options) >Debugging>General, pilih atau batal pilih Aktifkan Just My Code.

Cuplikan layar Aktifkan Hanya Kode Saya dalam kotak dialog Opsi.

Cuplikan layar Aktifkan Hanya Kode Saya dalam kotak dialog Opsi.

Nota

Aktifkan Just My Code adalah pengaturan global yang berlaku untuk semua proyek Visual Studio dalam semua bahasa.

Penelusuran kesalahan Just My Code

Selama sesi debugging, jendela Modul menunjukkan modul kode yang dianggap debugger sebagai My Code (kode pengguna), bersama dengan status pemuatan simbol mereka. Untuk informasi selengkapnya, lihat Lebih memahami bagaimana debugger dilampirkan ke aplikasi Anda.

Cuplikan layar kode pengguna di jendela Modul.

Cuplikan layar kode pengguna di jendela Modul.

Di jendela Call Stack atau Tugas, Just My Code menciutkan kode non-pengguna ke dalam bingkai kode anotasi berwarna abu-abu berlabel [External Code].

Cuplikan layar Kode Eksternal di jendela Call Stack.

Cuplikan layar Kode Eksternal di jendela Tumpukan Panggilan.

Tips

Untuk membuka modul , Call Stack, Tasks, atau sebagian besar jendela debugging lainnya, Anda harus berada dalam sesi debugging. Saat melacak bug, di bawah Debug>Windows, pilih jendela yang ingin Anda buka.

Untuk melihat kode dalam bingkai [Kode Eksternal] yang diciutkan, klik kanan dalam jendela Tumpukan Panggilan atau jendela Tugas, dan pilih Perlihatkan Kode Eksternal dari menu konteks. Baris kode eksternal yang diperluas menggantikan bingkai [External Code] .

Cuplikan layar dari Tampilkan Kode Eksternal di jendela Tumpukan Panggilan.

Cuplikan layar Tampilkan Kode Eksternal di jendela Tumpukan Panggilan.

Nota

Tampilkan Kode Eksternal adalah pengaturan profiler pengguna saat ini yang berlaku untuk semua proyek dalam berbagai bahasa yang dibuka oleh pengguna.

Mengklik dua kali baris kode eksternal yang diperluas di jendela Call Stack akan menyoroti baris kode pemanggil berwarna hijau di dalam kode sumber. Untuk DLL atau modul lain yang tidak ditemukan atau dimuat, halaman simbol atau sumber yang tidak ditemukan mungkin akan terbuka.

Mulai dari Visual Studio 2022 versi 17.7, Anda dapat mendekompilasi otomatis kode .NET dengan mengklik dua kali kode eksternal di jendela Tumpukan Panggilan. Untuk informasi selengkapnya, lihat Menghasilkan kode sumber dari rakitan .NET saat melakukan debugging.

.NET Hanya Kode Saya

Dalam proyek .NET, Just My Code menggunakan file simbol (.pdb) dan pengoptimalan program untuk mengklasifikasikan kode pengguna dan non-pengguna. Debugger .NET menganggap biner yang dioptimalkan dan file .pdb yang tidak dimuat menjadi kode non-pengguna.

Tiga atribut kompilator juga memengaruhi apa yang dianggap oleh debugger .NET sebagai kode pengguna:

Debugger .NET menganggap semua kode lain sebagai kode pengguna.

Selama debugging .NET:

  • Debug>Step Into (atau F11) pada langkah-langkah kode non-pengguna di atas kode ke baris kode pengguna berikutnya.
  • Debug>Step Out (atau Shift+F11) pada kode non-pengguna berjalan ke baris kode pengguna berikutnya.

Jika tidak ada lagi kode pengguna, penelusuran kesalahan berlanjut hingga berakhir, mencapai titik henti lain, atau menghasilkan kesalahan.

Jika debugger berhenti dalam kode non-pengguna (misalnya, Anda menggunakan Debug>Hentikan Semua dan jeda dalam kode non-pengguna), jendela Tanpa Sumber muncul. Anda kemudian dapat menggunakan perintah Debug>Langkah untuk masuk ke baris kode pengguna berikutnya.

Jika pengecualian yang tidak tertangani terjadi dalam kode non-pengguna, debugger akan berhenti di baris kode pengguna tempat pengecualian dibuat.

Jika pengecualian tingkat pertama diaktifkan untuk pengecualian tersebut, baris kode pengguna yang dipanggil akan disorot berwarna hijau dalam kode sumber. Jendela Tumpukan Panggilan menampilkan bingkai anotasi berlabel [Kode Eksternal].

C++ Hanya Kode Saya

Dimulai pada Visual Studio 2017 versi 15.8, fitur Just My Code untuk penelusuran kode juga didukung. Fitur ini juga memerlukan penggunaan pengalih kompilator /JMC (Just my code debugging). Sakelar diaktifkan secara default dalam proyek C++. Untuk jendela Call Stack dan dukungan tumpukan panggilan di Just My Code, sakelar /JMC tidak diperlukan.

Untuk diklasifikasikan sebagai kode pengguna, PDB untuk biner yang berisi kode pengguna harus dimuat oleh debugger (gunakan jendela Modul untuk memeriksa status pemuatan).

Untuk perilaku tumpukan panggilan, seperti di jendela Call Stack, Just My Code di C++ hanya mempertimbangkan fungsi-fungsi ini kode non-pengguna:

  • Fungsi dengan informasi sumber yang dilucuti dalam file simbolnya.
  • Fungsi di mana file simbol menunjukkan bahwa tidak ada file sumber yang sesuai dengan bingkai tumpukan.
  • Fungsi yang ditentukan dalam file *.natjmc di folder %VsInstallDirectory%\Common7\Packages\Debugger\Visualizers.

Untuk perilaku langkah kode, Just My Code di C++ hanya mempertimbangkan fungsi-fungsi ini kode non-pengguna:

  • Fungsi yang file PDB terkait belum dimuat dalam debugger.
  • Fungsi yang ditentukan dalam file *.natjmc di folder %VsInstallDirectory%\Common7\Packages\Debugger\Visualizers.

Nota

Untuk dukungan langkah kode di Just My Code, kode C++ harus dikompilasi menggunakan kompilator MSVC di Visual Studio 15.8 Pratinjau 3 atau yang lebih baru, dan sakelar pengkompilasi /JMC harus diaktifkan (diaktifkan secara default). Untuk detail tambahan, lihat Menyesuaikan tumpukan panggilan C++ dan perilaku langkah kode dan posting blog ini. Untuk kode yang dikompilasi menggunakan kompilator yang lebih lama, file .natstepfilter adalah satu-satunya cara untuk menyesuaikan langkah kode, yang independen dari Just My Code. Lihat Menyesuaikan perilaku langkah C++.

Selama debugging C++, kode non-pengguna dilewati secara default. Selama debugging C++:

  • Debug>Masuk ke (atau F11) pada kode non-pengguna, melewati kode atau jalankan hingga baris kode pengguna berikutnya, jika Masuk ke dipanggil dari kode non-pengguna.
  • Debug>Step Out (atau Shift+F11) pada kode non-pengguna akan melanjutkan ke baris kode pengguna berikutnya (di luar bingkai tumpukan saat ini).

Jika tidak ada lagi kode pengguna, debugging akan berlanjut sampai selesai, mengenai titik henti lain, atau menghasilkan kesalahan.

Jika debugger berhenti dalam kode non-pengguna (misalnya, Anda menggunakan Debug>Break All dan jeda dalam kode non-pengguna), langkah berlanjut dalam kode non-pengguna.

Jika debugger mencapai pengecualian, debugger berhenti pada pengecualian, baik di kode pengguna maupun bukan pengguna. opsi yang tidak ditangani pengguna dalam kotak dialog Pengaturan Pengecualian diabaikan.

Menyesuaikan tumpukan panggilan C++ dan perilaku penjejakan kode

Untuk proyek C++, Anda dapat menentukan modul, file sumber, dan fungsi jendela Call Stack memperlakukannya sebagai kode non-pengguna dengan menentukannya dalam file *.natjmc. Penyesuaian ini juga berlaku untuk langkah kode jika Anda menggunakan pengkompilasi terbaru (lihat C++ Just My Code).

  • Untuk menentukan kode non-pengguna untuk semua pengguna komputer Visual Studio, tambahkan file .natjmc ke folder %VsInstallDirectory%\Common7\Packages\Debugger\Visualizers.
  • Untuk menentukan kode non-pengguna untuk pengguna individual, tambahkan file .natjmc ke folder %USERPROFILE%\My Documents\<Visual Studio>\Visualizers.

File .natjmc adalah file XML dengan sintaks ini:

<?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>

Atribut elemen Modul

Atribut Deskripsi
Name Diperlukan. Jalur lengkap modul atau modul-modul. Anda dapat menggunakan karakter wildcard Windows ? (nol atau satu karakter) dan * (nol atau lebih karakter). Misalnya

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

memberi tahu debugger untuk memperlakukan semua modul di \3rdParty\UtilLibs pada drive apa pun sebagai kode eksternal.
Company Fakultatif. Nama perusahaan yang menerbitkan modul yang disematkan dalam file yang dapat dieksekusi. Anda dapat menggunakan atribut ini untuk membedakan modul.

atribut elemen file

Atribut Deskripsi
Name Diperlukan. Jalur lengkap file atau file sumber untuk diperlakukan sebagai kode eksternal. Anda dapat menggunakan karakter wildcard Windows ? dan * saat menentukan jalur.

atribut elemen Fungsi

Atribut Deskripsi
Name Diperlukan. Nama fungsi yang sepenuhnya memenuhi syarat untuk diperlakukan sebagai kode eksternal. Anda dapat menggunakan karakter wildcard Windows ? dan * saat menentukan jalur.
Module Fakultatif. Nama atau jalur lengkap ke modul yang berisi fungsi . Anda dapat menggunakan atribut ini untuk memisahkan fungsi dengan nama yang sama.
ExceptionImplementation Ketika diatur ke true, call stack menampilkan fungsi yang melemparkan pengecualian sebagai gantinya, bukan fungsi ini.

Mengatur perilaku langkah C++ terlepas dari pengaturan Just My Code

Dalam proyek-proyek C++, Anda dapat menentukan fungsi untuk dilangkahi dengan mencantumkannya sebagai fungsi NoStepInto, dalam file *.natstepfilter. Fungsi yang tercantum dalam file *.natstepfilter tidak bergantung pada pengaturan Just My Code. Fungsi NoStepInto memberi tahu debugger untuk mengabaikan fungsi tersebut, bahkan jika memanggil beberapa fungsi StepInto atau kode pengguna lainnya. Tidak seperti fungsi yang tercantum dalam .natjmc, debugger akan melangkah ke baris pertama kode pengguna di dalam fungsi NoStepInto.

  • Untuk menentukan kode non-pengguna untuk semua pengguna Visual Studio lokal, tambahkan file .natstepfilter ke folder %VsInstallDirectory%\Common7\Packages\Debugger\Visualizers.
  • Untuk menentukan kode non-pengguna untuk pengguna individual, tambahkan file .natstepfilter ke folder %USERPROFILE%\My Documents\<Visual Studio versi>\Visualizers.

Nota

Beberapa ekstensi pihak ketiga dapat menonaktifkan fungsionalitas .natstepfilter.

File .natstepfilter adalah file XML dengan sintaks ini:

<?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>

Elemen Deskripsi
Function Diperlukan. Menentukan satu atau beberapa fungsi sebagai fungsi non-pengguna.
Name Diperlukan. Ekspresi reguler berformat ECMA-262 untuk menentukan nama fungsi lengkap yang cocok. Misalnya:

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

memberi tahu debugger bahwa semua metode dalam MyNS::MyClass harus dianggap sebagai kode non-pengguna. Pencocokan memperhatikan huruf besar dan kecil.
Module Fakultatif. Ekspresi reguler berformat ECMA-262 yang menentukan jalur lengkap ke modul yang berisi fungsi. Kecocokan tidak sensitif terhadap huruf besar/kecil.
Action Diperlukan. Salah satu nilai yang peka terhadap huruf besar/kecil ini:

NoStepInto - menginstruksikan debugger untuk melangkahi fungsi.
StepInto - memberi tahu debugger untuk masuk ke dalam fungsi, menggantikan NoStepInto lain untuk fungsi yang cocok.

Informasi tambahan tentang file .natstepfilter dan .natjmc

  • Mulai visual Studio 2022 versi 17.6, Anda dapat menambahkan .natjmc dan file .natstepfilter langsung ke solusi atau proyek.

  • Kesalahan sintaks dalam file .natstepfilter dan .natjmc tidak dilaporkan di jendela Output debugger.

  • Tidak seperti file .natvis, file .natstepfilter dan .natjmc tidak dimuat ulang secara otomatis. Sebagai gantinya, file-file ini dimuat ulang di dekat awal sesi debug.

  • Untuk fungsi templat, penggunaan &lt;.*&gt; atau &lt;.* dalam nama mungkin berguna.

JavaScript Hanya Kode Saya

Untuk proyek .esproj di Visual Studio 2022, Visual Studio Code menggunakan file launch.json untuk mengonfigurasi dan menyesuaikan debugger. launch.json adalah file konfigurasi debugger.

Visual Studio melampirkan debugger hanya ke kode pengguna. Untuk proyek .esproj, Anda dapat mengonfigurasi kode pengguna (yaitu, pengaturan Just My Code) di Visual Studio menggunakan pengaturan skipFiles di launch.json. Pengaturan ini berfungsi sama dengan pengaturan launch.json di Visual Studio Code. Untuk informasi selengkapnya tentang skipFiles, lihat Melompati Kode yang Tidak Menarik.