Bagikan melalui


Tentukan simbol (.pdb) dan file sumber dalam debugger Visual Studio (C#, C++, Visual Basic, F#)

File database program (.pdb), juga disebut file simbol, pengidentifikasi peta, dan pernyataan dalam kode sumber proyek Anda ke pengidentifikasi dan instruksi yang sesuai dalam aplikasi yang dikompilasi. File pemetaan ini menautkan debugger ke kode sumber Anda, yang memungkinkan penelusuran kesalahan.

Saat Anda membangun proyek dari IDE Visual Studio dengan konfigurasi build Debug standar, pengompilasi membuat file simbol yang sesuai. Artikel ini menjelaskan cara mengelola file simbol di IDE, misalnya:

Untuk penjelasan terperinci tentang file simbol, lihat yang berikut ini:

Cara kerja file simbol

File .pdb menyimpan informasi penelusuran kesalahan dan status proyek yang memungkinkan penautan bertambah bertahap dari konfigurasi Debug aplikasi Anda. Debugger Visual Studio menggunakan file .pdb untuk menentukan dua informasi utama saat penelusuran kesalahan:

  • Nama file sumber dan nomor baris untuk ditampilkan di IDE Visual Studio.
  • Di mana di aplikasi berhenti untuk titik henti.

File simbol juga menunjukkan lokasi file sumber, dan secara opsional, server untuk mengambilnya.

Debugger hanya memuat file .pdb yang sama persis dengan file .pdb yang dibuat saat aplikasi dibuat (yaitu, file atau salinan .pdb asli). Duplikasi yang tepat ini diperlukan karena tata letak aplikasi dapat berubah bahkan jika kode itu sendiri tidak berubah. Untuk informasi selengkapnya, lihat Mengapa Visual Studio memerlukan file simbol debugger agar sama persis dengan file biner yang mereka buat?

Tip

Untuk men-debug kode di luar kode sumber proyek Anda, seperti kode Windows atau kode pihak ketiga yang dipanggil proyek Anda, Anda harus menentukan lokasi file .pdb kode eksternal (dan secara opsional, file sumber), yang harus sama persis dengan build di aplikasi Anda.

Tempat debugger mencari simbol

Saat Anda men-debug proyek di Visual Studio IDE, debugger secara otomatis memuat file simbol yang dapat ditemukan secara default.

Catatan

Saat men-debug kode terkelola pada perangkat jarak jauh, semua file simbol harus terletak baik di komputer lokal, atau di lokasi yang ditentukan dalam opsi debugger.

Debugger mencari file simbol di lokasi berikut:

  1. Folder proyek.

  2. Lokasi yang ditentukan di dalam file DLL atau file executable (.exe).

    Secara default, jika Anda telah membuat DLL atau file .exe di komputer Anda, linker menempatkan jalur lengkap dan nama file dari file .pdb terkait dalam file DLL atau .exe. Debugger memeriksa untuk melihat apakah file simbol ada di lokasi tersebut.

  3. Folder yang sama dengan DLL atau file .exe.

  4. Lokasi apa pun yang ditentukan dalam opsi debugger untuk file simbol. Untuk menambahkan dan mengaktifkan lokasi simbol, lihat Mengonfigurasi lokasi simbol dan opsi pemuatan.

    • Folder cache simbol lokal apa pun.

    • Server dan lokasi simbol jaringan, internet, atau lokal tertentu, seperti Server Simbol Microsoft jika dipilih. Visual Studio dapat mengunduh file simbol penelusuran kesalahan dari server simbol yang mengimplementasikan protokol symsrv. Visual Studio Team Foundation Server dan Alat Penelusuran Kesalahan untuk Windows adalah dua alat yang dapat menggunakan server simbol.

      Server simbol yang mungkin Anda gunakan meliputi:

      Server Simbol Microsoft Publik: Untuk men-debug crash yang terjadi selama panggilan ke DLL sistem atau ke pustaka pihak ketiga, Anda sering memerlukan file .pdb sistem. File .pdb sistem berisi simbol untuk DLL Windows, file .exe, dan driver perangkat. Anda bisa mendapatkan simbol untuk sistem operasi Windows, MDAC, IIS, ISA, dan .NET dari Server Simbol Microsoft publik.

      Server simbol di jaringan internal atau di komputer lokal Anda: Tim atau perusahaan Anda dapat membuat server simbol untuk produk Anda sendiri, dan sebagai cache untuk simbol dari sumber eksternal. Anda mungkin memiliki server simbol di komputer Anda sendiri.

      Server simbol pihak ketiga: Penyedia aplikasi dan pustaka Windows pihak ketiga dapat menyediakan akses ke server simbol di internet.

      Peringatan

      Jika Anda menggunakan server simbol selain Microsoft Symbol Server publik, pastikan server simbol dan jalurnya dapat dipercaya. Karena file simbol dapat berisi kode yang dapat dieksekusi arbitrer, Anda dapat diekspos ke ancaman keamanan.

Mengonfigurasi lokasi file simbol dan opsi pemuatan

Debugger memeriksa berbagai lokasi untuk simbol secara default. Lihat Di mana debugger mencari simbol.

Pada halamanAlat>Opsi>Penelusuran kesalahan>Simbol, Anda dapat:

  • Tentukan dan pilih jalur pencarian untuk file simbol.
  • Tentukan server simbol untuk Komponen Microsoft, Windows, atau pihak ketiga.
  • Tentukan modul yang Anda lakukan atau tidak ingin debugger memuat simbol secara otomatis.
  • Ubah pengaturan ini saat Anda sedang men-debug secara aktif. Lihat Memuat simbol saat penelusuran kesalahan.

Untuk menentukan lokasi simbol dan opsi pemuatan:

  1. Di Visual Studio, buka Alat>Opsi>Penelusuran Kesalahan>Simbol (atau Debug>Opsi>Simbol).

  2. Di bawah Lokasi file simbol (.pdb),

    • Untuk menggunakan Server Simbol Microsoft atau Server Simbol NuGet.org, pilih kotak centang.

    • Untuk menambahkan lokasi server simbol baru,

      1. Pilih simbol + di bar alat.
      2. Ketik URL (http), berbagi jaringan, atau jalur lokal server simbol atau lokasi simbol di bidang teks. Penyelesaian pernyataan membantu Anda menemukan format yang benar.

      Tools - Options - Debugging - Symbols page

      Tools - Options - Debugging - Symbols page

      Catatan

      Hanya folder yang ditentukan yang dicari. Anda harus menambahkan entri untuk subfolder apa pun yang ingin Anda cari.

    • Untuk menambahkan lokasi Server Simbol Azure DevOps baru:

      1. Tools/ Options/ Debugging/Symbols new server icon Pilih ikon di toolbar.

      2. Dalam dialog Koneksi ke Server Simbol Azure DevOps, pilih salah satu server simbol yang tersedia, dan pilih Koneksi.

        Untuk informasi tambahan, lihat Menambahkan server simbol Azure Artifacts.

    • Untuk mengubah urutan pemuatan untuk lokasi simbol, gunakan Ctrl+Atas dan Ctrl+Bawah, atau ikon panah Atas dan Bawah.

    • Untuk mengedit URL atau jalur, klik dua kali entri, atau pilih dan tekan F2.

    • Untuk menghapus entri, pilih entri tersebut, lalu pilih ikon -.

  3. (Opsional) Untuk meningkatkan performa pemuatan simbol, di bawah Simbol cache di direktori ini, ketik jalur folder lokal tempat server simbol dapat menyalin simbol.

    Catatan

    Jangan letakkan cache simbol lokal dalam folder yang dilindungi, seperti C:\Windows atau subfolder. Gunakan folder baca-tulis sebagai gantinya.

    Catatan

    Untuk proyek C++, jika Anda memiliki _NT_SYMBOL_PATH kumpulan variabel lingkungan, itu akan menggantikan nilai yang ditetapkan di bawah Simbol cache dalam direktori ini.

  4. Tentukan modul yang Anda inginkan untuk dimuat debugger dari lokasi File simbol (.pdb) saat dimulai.

    • Pilih Muat semua modul, kecuali dikecualikan (default) untuk memuat semua simbol untuk semua modul di lokasi file simbol, kecuali modul yang Anda kecualikan secara khusus. Untuk mengecualikan modul tertentu, pilih Tentukan modul yang dikecualikan, pilih + ikon, ketik nama modul yang akan dikecualikan, dan pilih OK.

    • Untuk memuat hanya modul yang Anda tentukan dari lokasi file simbol, pilih Muat hanya modul yang ditentukan. Pilih Tentukan modul yang disertakan, pilih ikon +, ketik nama modul yang akan disertakan, lalu pilih OK. File simbol untuk modul lain tidak dimuat.

  5. Pilih OK.

Opsi simbol lain untuk penelusuran kesalahan

Anda dapat memilih opsi simbol tambahan di Alat>Opsi>Penelusuran Kesalahan>Umum (atau Debug>Opsi>Umum):

  • Memuat ekspor dll (Hanya asli)

    Memuat tabel ekspor DLL untuk C/C++. Untuk detailnya, lihat Tabel ekspor DLL. Membaca informasi ekspor DLL melibatkan beberapa overhead, sehingga memuat tabel ekspor dinonaktifkan secara default. Anda juga dapat menggunakan dumpbin /exports di baris perintah build C/C++.

  • Aktifkan penelusuran kesalahan tingkat alamat dan Tampilkan pembongkaran jika sumber tidak tersedia

    Selalu tampilkan pembongkaran ketika file sumber atau simbol tidak ditemukan.

    Options / Debugging / General disassembly options

  • Mengaktifkan dukungan server sumber

    Menggunakan Server Sumber untuk membantu men-debug aplikasi ketika tidak ada kode sumber pada komputer lokal, atau file .pdb tidak cocok dengan kode sumber. Server Sumber mengambil permintaan untuk file dan mengembalikan file aktual dari kontrol sumber. Server Sumber berjalan dengan menggunakan DLL bernama srcsrv.dll untuk membaca file .pdb aplikasi. File .pdb berisi pointer ke repositori kode sumber, serta perintah yang digunakan untuk mengambil kode sumber dari repositori.

    Anda dapat membatasi perintah yang dapat dijalankansrcsrv.dll dari file .pdb aplikasi dengan mencantumkan perintah yang diizinkan dalam file bernama srcsrv.ini. Tempatkan file srcsrv.ini di folder yang sama dengan srcsrv.dll dan devenv.exe.

    Penting

    Perintah arbitrer dapat disematkan dalam file .pdb aplikasi, jadi pastikan untuk hanya menempatkan perintah yang ingin Anda jalankan ke dalam file srcsrv.ini. Setiap upaya untuk menjalankan perintah yang tidak ada dalam file srcsvr.ini akan menyebabkan kotak dialog konfirmasi muncul. Untuk informasi lebih lanjut, lihat Peringatan Keamanan: Debugger Harus Menjalankan Perintah Yang Tidak Tepercaya.

    Tidak ada validasi yang dilakukan pada parameter perintah, jadi berhati-hatilah dengan perintah tepercaya. Misalnya, jika Anda mencantumkan cmd.exe di srcsrv.iniAnda, pengguna berbahaya mungkin menentukan parameter pada cmd.exe yang akan membuatnya berbahaya.

    Pilih item ini dan item turunan yang Anda inginkan. Izinkan server sumber untuk rakitan kepercayaan parsial (Hanya terkelola) dan Selalu jalankan perintah server sumber yang tidak tepercaya tanpa meminta dapat meningkatkan risiko keamanan.

    Enable source server options

Opsi simbol pengompilasi

Saat Anda membangun proyek dari Visual Studio IDE dengan konfigurasi build Debug standar, pengompilasi C++ dan terkelola membuat file simbol yang sesuai untuk kode Anda. Anda juga dapat mengatur opsi pengompilasi di kode.

Untuk mengatur opsi pengompilasi untuk konfigurasi build Anda di Visual Studio, lihat Mengatur konfigurasi debug dan rilis.

opsi .NET

Bangun dengan /debug untuk membuat file .pdb. Anda dapat membangun aplikasi dengan /debug:full atau /debug:pdbonly. Membangun dengan /debug:full menghasilkan kode yang dapat di-debug. Membangun dengan /debug:pdbonly menghasilkan file .pdb, tetapi tidak menghasilkan DebuggableAttribute yang memberi tahu pengompilasi JIT bahwa informasi debug tersedia. Gunakan /debug:pdbonly jika Anda ingin membuat file .pdb untuk build rilis yang tidak ingin Anda dapat didebug. Untuk informasi selengkapnya, lihat /debug (opsi pengompilasi C#) atau /debug (Visual Basic).

Opsi C/C++

  • File VC<x.pdb> dan <project.pdb>

    File .pdb untuk C/C++ dibuat saat Anda membangun dengan /ZI atau /Zi. Di Visual C++, opsi /Fd menamai file .pdb yang dibuat pengompilasi. Saat Anda membuat proyek di Visual Studio menggunakan IDE, opsi /Fd diatur untuk membuat file .pdb bernama <project.pdb>.

    Jika Anda membangun aplikasi C/C++ menggunakan makefile, dan Anda menentukan /ZI atau /Zi tanpa menggunakan /Fd untuk menentukan nama file, pengkompilasi membuat dua file .pdb :

    • VC<x.pdb>, di mana <x> mewakili versi pengompilasi Microsoft C++, misalnya VC11.pdb

      File VC<x.pdb> menyimpan semua informasi penelusuran kesalahan untuk file objek individual, dan berada di direktori yang sama dengan makefile proyek. Setiap kali membuat file objek, pengompilasi C/C++ menggabungkan informasi debug ke dalam VC<x.pdb>. Jadi, bahkan jika setiap file sumber menyertakan file header umum seperti <windows.h>, typedefs dari header tersebut hanya disimpan sekali, bukan di setiap file objek. Informasi yang disisipkan mencakup informasi jenis, tetapi tidak menyertakan informasi simbol, seperti definisi fungsi.

    • <project>.pdb

      File <project.pdb> menyimpan semua informasi debug untuk file proyek .exe, dan berada di subdirektori \debug. File <project.pdb> berisi informasi debug lengkap, termasuk prototipe fungsi, bukan hanya informasi jenis yang ditemukan di VC<x.pdb>.

    File VC<x.pdb> dan <project.pdb> memungkinkan pembaruan bertambah bertahap. Linker juga menyematkan jalur ke file .pdb dalam file .exe atau .dll yang dibuatnya.

  • Tabel ekspor DLL

    Gunakan dumpbin /exports untuk melihat simbol yang tersedia dalam tabel ekspor DLL. Informasi simbolis dari tabel ekspor DLL dapat berguna untuk bekerja dengan pesan Windows, prosedur Windows (WindowProcs), objek COM, marshaling, atau DLL apa pun yang tidak anda miliki simbolnya. Simbol tersedia untuk DLL sistem 32-bit apa pun. Panggilan terdaftar dalam urutan panggilan, dengan fungsi saat ini (yang paling dalam bersarang) di bagian atas.

    Dengan membaca output dumpbin /exports, Anda dapat melihat nama fungsi yang tepat, termasuk karakter non-alfanumerik. Melihat nama fungsi yang tepat berguna untuk mengatur titik henti pada fungsi, karena nama fungsi dapat dipotok di tempat lain di debugger. Untuk informasi selengkapnya, lihat dumpbin/ekspor.

Aplikasi web

Atur file web.config aplikasi ASP.NET Anda ke mode debug. Mode debug menyebabkan ASP.NET menghasilkan simbol untuk file yang dihasilkan secara dinamis dan memungkinkan debugger untuk melampirkan ke aplikasi ASP.NET. Visual Studio mengatur ini secara otomatis saat Anda mulai men-debug, jika Anda membuat proyek dari templat proyek web.

Memuat simbol saat penelusuran kesalahan

Anda dapat menggunakan Modul, Tumpukan Panggilan, Lokal, Otomatis, atau jendela Watch apa pun untuk memuat simbol atau mengubah opsi simbol saat penelusuran kesalahan. Untuk informasi selengkapnya, lihat Lebih memahami cara debugger dilampirkan ke aplikasi Anda.

Bekerja dengan simbol di jendela Modul

Selama penelusuran kesalahan, jendela Modul menunjukkan modul kode yang diperlakukan debugger sebagai kode pengguna, atau Kode Saya, dan status pemuatan simbolnya. Anda juga dapat memantau status pemuatan simbol, memuat simbol, dan mengubah opsi simbol di jendela Modul.

Untuk memantau atau mengubah lokasi atau opsi simbol saat penelusuran kesalahan:

  1. Untuk membuka jendela Modul, saat penelusuran kesalahan, pilih Debug>Windows>Modules (atau tekan Ctrl + Alt + U).
  2. Di jendela Modul, klik kanan header Status Simbol atau File Simbol, atau modul apa pun.
  3. Di menu pintasan, pilih salah satu opsi berikut:
Opsi Deskripsi
Muat Simbol Muncul untuk modul dengan simbol yang dilewati, tidak ditemukan, atau tidak dimuat. Mencoba memuat simbol dari lokasi yang ditentukan pada halaman Opsi>Penelusuran Kesalahan>Simbol. Jika file simbol tidak ditemukan atau tidak dimuat, meluncurkan File Explorer sehingga Anda dapat menentukan lokasi baru untuk dicari.
Informasi Beban Simbol Memperlihatkan lokasi file simbol yang dimuat, atau lokasi yang dicari jika debugger tidak dapat menemukan file.
Pengaturan Simbol Membuka halaman Opsi>Penelusuran Kesalahan>Simbol, tempat Anda dapat mengedit dan menambahkan lokasi simbol.
Selalu Muat Secara Otomatis Menambahkan file simbol terpilih ke daftar file yang otomatis dimuat oleh debugger.

Gunakan halaman Tanpa Simbol Yang Dimuat/Tidak Ada Sumber yang Dimuat

Ada beberapa cara bagi debugger untuk memecah kode yang tidak memiliki simbol atau file sumber yang tersedia:

  • Masuk ke kode.
  • Memecah kode dari titik henti atau pengecualian.
  • Beralih ke rangkaian yang berbeda.
  • Ubah bingkai tumpukan dengan mengklik dua kali bingkai di jendela Tumpukan Panggilan.

Ketika ini terjadi, debugger menampilkan halaman Tanpa Simbol Dimuat atau Tidak Ada Sumber yang Dimuat untuk membantu Anda menemukan dan memuat simbol atau sumber yang diperlukan.

No Symbols Loaded page

Untuk menggunakan halaman dokumen Tanpa Simbol Dimuat untuk membantu menemukan dan memuat simbol yang hilang:

  • Untuk mengubah jalur pencarian, pilih jalur yang tidak dipilih, atau pilih Jalur Baru atau Jalur VSTS Baru dan masukkan atau pilih jalur baru. Pilih Muat untuk mencari jalur lagi dan memuat file simbol jika ditemukan.
  • Untuk mengganti opsi simbol apa pun dan mencoba kembali jalur pencarian, pilih Telusuri dan temukan <executable-name>. File simbol dimuat jika ditemukan, atau File Explorer terbuka sehingga Anda dapat memilih file simbol secara manual.
  • Untuk membuka halaman pengaturan simbol untuk mengonfigurasi perilaku, pilih Ubah Pengaturan Simbol (atau pilih Opsi>Penelusuran Kesalahan>Simbol).
  • (Tingkat Lanjut) Untuk memperlihatkan pembongkaran di jendela baru satu kali, pilih bongkar tampilan, atau pilih dialog Opsi untuk mengatur opsi untuk selalu menampilkan pembongkaran saat file sumber atau simbol tidak ditemukan. Untuk informasi selengkapnya, lihat Melihat kode pembongkaran.
  • Untuk memperlihatkan lokasi yang dicari dan hasilnya, perluas Informasi beban simbol.
  • Untuk kode C#, Anda juga dapat memilih untuk mendekompilasi kode sumber dari halaman Tanpa Simbol Dimuat atau Tidak Ada Sumber yang Dimuat.

Jika debugger menemukan file .pdb setelah Anda menjalankan salah satu opsi, dan dapat mengambil file sumber menggunakan informasi dalam file .pdb, file tersebut akan menampilkan sumbernya. Jika tidak, halaman Tidak Dimuat Sumber menampilkan yang menjelaskan masalah, dengan tautan ke tindakan yang mungkin menyelesaikan masalah.

Untuk menambahkan jalur pencarian file sumber ke solusi:

Anda dapat menentukan lokasi yang dicari debugger untuk file sumber, dan mengecualikan file tertentu dari pencarian.

  1. Pilih solusi di Penjelajah Solusi, lalu pilih ikon Properti, tekan Alt+Enter, atau klik kanan dan pilih Properti.

  2. Pilih Debug File Sumber.

    Debug source files page

  3. Pada Direktori yang berisi kode sumber, ketik atau pilih lokasi kode sumber untuk dicari. Gunakan ikon Baris Baru untuk menambahkan lebih banyak lokasi, ikon panah Atas dan Bawah untuk menyusun ulang, atau ikon X untuk menghapusnya.

    Catatan

    Debugger hanya mencari direktori yang ditentukan. Anda harus menambahkan entri untuk subdirektori apa pun yang ingin Anda cari.

  4. Di bawah Jangan cari file sumber ini, ketik nama file sumber untuk dikecualikan dari pencarian.

  5. Pilih OK atau Terapkan.