Bagikan melalui


Debug hanya untuk kode pengguna dengan Just My Code

Just My Code adalah fitur penelusuran kesalahan Visual Studio yang secara otomatis melakukan langkah-langkah panggilan ke sistem, kerangka kerja, dan kode non-pengguna lainnya. Di jendela Tumpukan Panggilan, Just My Code menciutkan panggilan ini ke dalam bingkai [Kode Eksternal].

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 bawahOpsi>Alat (atauOpsi>Opsi) >Penelusuran Kesalahan>Umum, pilih atau batalkan pilihan Aktifkan Hanya Kode Saya.

Cuplikan layar Aktifkan Hanya Kode Saya dalam kotak dialog Opsi.

Cuplikan layar Aktifkan Hanya Kode Saya dalam kotak dialog Opsi.

Catatan

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

Penelusuran kesalahan Just My Code

Selama sesi penelusuran kesalahan, jendela Modul menunjukkan modul kode mana yang diperlakukan debugger sebagai Just My Code (kode pengguna), bersama dengan status pemuatan simbol mereka. Untuk informasi selengkapnya, lihat Lebih memahami cara debugger dilampirkan ke aplikasi Anda.

Cuplikan layar kode pengguna di jendela Modul.

Cuplikan layar kode pengguna di jendela Modul.

Di jendela Tumpukan Panggilan 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 Tumpukan Panggilan.

Cuplikan layar Kode Eksternal di jendela Tumpukan Panggilan.

Tip

Untuk membuka Modul, Tumpukan Panggilan, Tugas, atau sebagian besar jendela penelusuran kesalahan lainnya, Anda harus berada dalam sesi penelusuran kesalahan. Saat menelusuri kesalahan dalam Debug>Windows, pilih jendela yang ingin dibuka.

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

Cuplikan layar Tampilkan Kode Eksternal di jendela Tumpukan Panggilan.

Cuplikan layar Tampilkan Kode Eksternal di jendela Tumpukan Panggilan.

Catatan

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

Mengeklik dua kali baris kode eksternal yang diperluas di jendela Tumpukan Panggilan menyoroti baris kode panggilan berwarna hijau dalam kode sumber. Untuk DLL atau modul lain yang tidak ditemukan atau dimuat, simbol atau sumber yang tidak ditemukan halaman dapat 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 Membuat kode sumber dari rakitan .NET saat penelusuran kesalahan.

Just My Code .NET

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 penelusuran kesalahan .NET:

  • Debug>Masuk (atau F11) pada langkah-langkah kode non-pengguna di atas kode ke baris kode pengguna berikutnya.
  • Debug>Keluar (atau Shift+F11) pada kode non-pengguna yang berjalan ke baris kode pengguna berikutnya.

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

Jika debugger terputus di kode non-pengguna (misalnya, Anda menggunakan Debug>Hentikan Semua dan jeda dalam kode non-pengguna), jendela Tidak Ada Sumber muncul. Anda kemudian dapat menggunakan perintah Langkah>Debug untuk melanjutkan 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 kesempatan pertama diaktifkan untuk pengecualian, baris kode pengguna panggilan disoroti dengan warna hijau dalam kode sumber. Jendela Tumpukan Panggilan menampilkan bingkai anotasi berlabel [External Code].

Just My Code C++

Mulai di Visual Studio 2017 versi 15.8, Just My Code untuk langkah kode juga didukung. Fitur ini juga memerlukan penggunaan pengalihan kompilator /JMC (Hanya penelusuran kesalahan kode saya). Pengalihan 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 Tumpukan Panggilan, Just My Code di C++ hanya menganggap fungsi-fungsi ini sebagai kode non-pengguna:

  • Fungsi dengan informasi sumber yang dikupas 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 menganggap fungsi-fungsi ini sebagai 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.

Catatan

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 pengalihan kompilator /JMC harus diaktifkan (diaktifkan secara default). Untuk detail tambahan, lihat Sesuaikan 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 penelusuran kesalahan C++, kode non-pengguna dilewati secara default. Selama penelusuran kesalahan C++:

  • Debug>Step Into (atau F11) pada langkah-langkah kode non-pengguna melalui kode atau berjalan ke baris kode pengguna berikutnya, jika Step Into dipanggil dari kode non-pengguna.
  • Debug>Step Out (atau Shift+F11) pada kode non-pengguna berjalan ke baris kode pengguna berikutnya (di luar bingkai tumpukan saat ini).

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

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

Jika debugger mencapai pengecualian, debugger akan berhenti pada pengecualian, baik dalam kode pengguna atau non-pengguna. Opsi yang tidak tertangani pengguna dalam kotak dialog Pengaturan Pengecualian diabaikan.

Menyesuaikan tumpukan panggilan C++ dan perilaku langkah kode

Untuk proyek C++, Anda dapat menentukan modul, file sumber, dan fungsi jendela Tumpukan Panggilan 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 version>\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 Harus diisi. Jalur lengkap modul atau modul. Anda dapat menggunakan karakter wildcard Windows ? (nol atau satu karakter) dan * (nol karakter atau lebih). Contohnya,

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

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

Atribut elemen file

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

Atribut elemen fungsi

Atribut Deskripsi
Name Harus diisi. Nama fungsi yang sepenuhnya memenuhi syarat untuk diperlakukan sebagai kode eksternal. Anda dapat menggunakan karakter ? kartubebas Windows dan * saat menentukan jalur.
Module Opsional. Nama atau jalur lengkap ke modul yang berisi fungsi. Anda dapat menggunakan atribut ini untuk membedakan fungsi dengan nama yang sama.
ExceptionImplementation Ketika diatur ke true, tumpukan panggilan menampilkan fungsi yang membuat pengecualian dibanding fungsi ini.

Menyesuaikan perilaku langkah C++ yang independen dari pengaturan Just My Code

Dalam proyek C++, Anda dapat menentukan fungsi yang akan 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 melangkahi fungsi, 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 version>\Visualizers.

Catatan

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 Harus diisi. Menentukan satu atau beberapa fungsi sebagai fungsi non-pengguna.
Name Harus diisi. Ekspresi reguler berformat ECMA-262 yang menentukan nama fungsi lengkap yang cocok. Contohnya:

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

memberi tahu debugger bahwa semua metode di MyNS::MyClass harus dianggap sebagai kode non-pengguna. Pencocokan ini peka huruf besar/kecil.
Module Opsional. Ekspresi reguler berformat ECMA-262 yang menentukan jalur lengkap ke modul yang berisi fungsi. Pencocokan tidak peka huruf besar/kecil.
Action Harus diisi. Salah satu nilai peka huruf besar/kecil ini:

NoStepInto - memberi tahu debugger untuk melewati fungsi.
StepInto - memberi tahu debugger untuk melewati ke fungsi, mengambil alih fungsi NoStepInto lain untuk fungsi yang cocok.

Informasi tambahan tentang file .natstepfilter dan .natjmc

  • Mulai visual Studio 2022 versi 17.6, Anda dapat menambahkan file .natjmc dan .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. Sebagai gantinya, file-file ini dimuat ulang di dekat awal sesi debug.

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

Just My Code JavaScript

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 skipFiles pengaturan 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.