Bagaimana cara men-debug proyek perpustakaan kelas eksternal di studio visual?

138

Saya memiliki proyek (A) yang mereferensikan rakitan dari perpustakaan kelas proyek eksternal (B) yang terletak di solusi vs lain.

Saya belum memahami bagaimana saya dapat secara efisien men-debug perpustakaan kelas dari B saat menjalankan program dari proyek A. Apakah ada sesuatu yang harus saya aktifkan pada proyek B seperti info debug dll sehingga saya dapat melangkah ke dalam waktu debug dari A?

Terima kasih sebelumnya.

Konstantinos
sumber

Jawaban:

203

Coba nonaktifkan Just My Code (JMC).

  • Alat -> Opsi -> Debugger
  • Hapus centang "Aktifkan Hanya Kode Saya"

Secara default, debugger mencoba membatasi tampilan dunia ke kode yang hanya terdapat dalam solusi Anda. Ini benar-benar berguna di kali tetapi ketika Anda ingin men-debug kode yang tidak ada dalam solusi Anda (seperti situasi Anda), Anda perlu menonaktifkan JMC untuk melihatnya. Jika tidak, kode akan diperlakukan sebagai eksternal dan sebagian besar tersembunyi dari pandangan Anda.

EDIT

Ketika Anda rusak dalam kode Anda coba yang berikut ini.

  • Debug -> Windows -> Modul
  • Temukan DLL untuk proyek yang Anda minati
  • Klik Kanan -> Muat Simbol -> Pilih Jalur ke .PDB untuk proyek Anda yang lain
JaredPar
sumber
2
kotak centang tertentu sudah tidak dicentang. Apa yang saya perhatikan, adalah bahwa itu masuk ke dalam metode perpustakaan eksternal, tetapi melangkah ketika saya mencoba memanggil metode yang merupakan bagian dari antarmuka.
Konstantinos
Anda mungkin perlu masuk ke properti DLL, dan memastikan bahwa Salin Lokal diatur ke True. Jika tidak, Modul tidak akan dapat menemukan .pdb untuk referensi Anda.
Bryan Rayner
Just My Code tampaknya tidak membuat perbedaan apa pun (saya dapat beralih ke kode eksternal bahkan dengan mengaktifkannya), tetapi menemukan modul di debugger membantu.
TheOperator
3
File simbol yang cocok tidak ditemukan dalam folder ini.
Christine
1
Jika Anda tidak memiliki file PDB untuk modul yang direferensikan, ReSharper dapat digunakan untuk mendekompilasi binari menggunakan opsi "Load Symbols with ReSharper Deecompiler" di menu klik kanan di Debug / Windows / Modules. sangat kuat.
emilast
12

Ini telah mengganggu saya untuk beberapa waktu. Apa yang biasanya saya lakukan adalah membangun kembali perpustakaan eksternal saya menggunakan mode debug, lalu menyalin file .dll dan .pdb ke bin situs web saya. Ini memungkinkan saya untuk masuk ke kode perpustakaan.

TheGateKeeper
sumber
12

Asumsikan jalur

Proyek A

C:\Projects\ProjectA

Proyek B

C:\Projects\ProjectB

dan dll ProjectB dalam format

C:\Projects\ProjectB\bin\Debug\

Untuk melakukan debug ke ProjectBdari ProjectA, lakukan hal berikut

  1. Salin Bdll dengan dll .PDBke ProjectAdirektori kompilasi.
  2. Sekarang debug ProjectA. Ketika kode mencapai bagian di mana Anda perlu memanggil metode dll atau acara dll saat debugging, tekan F11untuk masuk ke kode dll.

CATATAN: JANGAN LEWATKAN UNTUK MENYALIN FILE .PDB

Sarath Avanavu
sumber
5

Saya menjalankan dua contoh studio visual - satu untuk dll eksternal dan satu lagi untuk aplikasi utama.
Di properti proyek dari dll eksternal, tetapkan yang berikut ini:

Acara Bangun:

  • copy /y "$(TargetDir)$(TargetName).dll" "C:\<path-to-main> \bin\$(ConfigurationName)\$(TargetName).dll"

  • copy /y "$(TargetDir)$(TargetName).pdb" "C:\<path-to-main> \bin\$(ConfigurationName)\$(TargetName).pdb"

Debug:

  • Mulai program eksternal: C:\<path-to-main>\bin\debug\<AppName>.exe

  • Direktori Kerja C:\<path-to-main>\bin\debug

Dengan cara ini, setiap kali saya membangun dll eksternal, itu akan diperbarui di direktori aplikasi utama. Jika saya menekan debug dari proyek dll eksternal - aplikasi utama berjalan, tetapi debugger hanya mengenai breakpoint di dll eksternal. Jika saya menekan debug dari proyek utama, aplikasi utama berjalan dengan dll eksternal yang paling baru dibangun, tetapi sekarang debugger hanya mencapai titik putus di proyek utama.

Saya menyadari satu debugger akan melakukan pekerjaan untuk keduanya, tetapi saya merasa lebih mudah untuk menjaga keduanya tetap lurus dengan cara ini.

MatrixManAtYrService
sumber
1

[menurut Martin Beckett, orang yang mengirimkan jawaban ini]

Anda dapat melakukan debug ke pustaka eksternal.

Di tab pengaturan proyek, cari 'direktori studio visual' di bidang 'kode sumber' termasuk jalur ke sumber openCV. Kemudian pastikan bahwa file .pdb untuk setiap dll debug berada di direktori yang sama dengan dll.

TripleS
sumber
0

Saya mengalami masalah yang sama karena breakpoint saya di proyek (B) tidak terkena. Solusi saya adalah membangun kembali proyek (B) kemudian men-debug proyek (A) karena dll perlu diperbarui.

Studio visual harus memungkinkan Anda melakukan debug ke perpustakaan eksternal.

Stefan Mitic
sumber
0

Referensi NuGet

Asumsikan -Project_A (menghasilkan project_a.dll) -Project_B (menghasilkan project_b.dll) dan referensi Project_B ke Project_A oleh paket NuGet lalu salin project_a.dll, project_a.pdb ke folder Project_B / Paket. Akibatnya itu harus disalin ke / bin.

Sekarang debug Project_A. Ketika kode mencapai bagian di mana Anda perlu memanggil metode dll atau acara dll saat debugging, tekan F11 untuk masuk ke kode dll.

jasmintmp.dll
sumber