Bagaimana Anda mengaktifkan "Enable .NET Framework source stepping"?

118

Pembaruan 22 Februari 2013 : Entri Microsoft Connect memiliki catatan dari Alok Shriram (Manajer Program, Perpustakaan Kelas Dasar, .NET Framework) bahwa masalah sekarang harus diselesaikan. Entri Connect ditandai sebagai Terselesaikan (Tetap) :

Masalah ini sekarang harus diperbaiki. Kami menerbitkan pembaruan untuk sumber referensi. Beri tahu kami jika masalah Anda masih belum terselesaikan.

Satu setengah tahun.

Tautan Bonus

Pertanyaan Asli

Bagaimana cara mengaktifkan .NET framework sumber melangkah di Visual Studio 2010?


Catatan : Pertanyaan ini adalah satu bagian dari keseluruhan yang lebih besar:


Visual Studio 2010 hadir dengan fitur baru:

  • Alat, Opsi, Debugging, Umum, Aktifkan loncatan sumber .NET Framework

Tangkapan layar dari menu opsi

Mengikuti petunjuk di halaman MSDN Cara: Debug .NET Framework Sumber :

Untuk mengaktifkan debugging sumber .NET Framework

  1. Pada menu Alat , klik Opsi .

  2. Di kotak dialog Opsi , klik kategori Debugging .

  3. Di kotak Umum , pilih kotak centang berikut ini:

    • Aktifkan loncatan sumber .NET Framework
    • Aktifkan dukungan server sumber

Saya melakukan ini:

Tangkapan layar menu opsi, menyoroti opsi relevan yang dipilih

Catatan : Anda akan mencatat, seperti yang dicatat halaman MSDN, dan seperti yang saya perhatikan, bahwa mencentang Enable .NET Framework source stepping akan secara otomatis menghapus centang ** Enable Just My Code (Managed only). Saya juga mengaktifkan pesan diagnostik dukungan server sumber.

Mengaktifkan opsi tersebut secara otomatis mengatur lokasi unduhan cache simbol untuk saya:

Tangkapan layar dari menu opsi, menunjukkan direktori cache (disorot)

Catatan : Entri Microsoft Symbol Server sudah ada (dan tidak dapat dihapus).


Halaman MSDN mengatakan untuk memuat simbol:

Untuk memuat simbol Framework menggunakan jendela Modules

  1. Di jendela Modules , klik kanan modul yang simbolnya tidak dimuat. Anda dapat mengetahui apakah simbol dimuat atau tidak dengan melihat kolom Status Simbol .

  2. Arahkan untuk Memuat Simbol Dari dan klik Server Simbol Microsoft untuk mengunduh simbol dari server simbol publik Microsoft atau Jalur Simbol untuk memuat dari direktori tempat Anda sebelumnya menyimpan simbol.

Saya coba ini:

masukkan deskripsi gambar di sini

dan kemudian semua simbol dimuat:

Tangkapan layar jendela modul, seperti dijelaskan di atas

Saya telah duduk di breakpoint, yang akan memanggil kode framework .NET:

Tangkapan layar kode, ditranskripsikan di bawah

protected override void ScaleControl(SizeF factor, BoundsSpecified specified)
{
    base.ScaleControl(factor, specified);

Mendorong F11menyebabkan debugger melompat ke baris berikutnya:

Tangkapan layar kode, ditranskripsikan di bawah

protected override void ScaleControl(SizeF factor, BoundsSpecified specified)
{
    base.ScaleControl(factor, specified);

    //Record the running scale factor used
    this.scaleFactor = new SizeF(
            this.scaleFactor.Width * factor.Width,
            this.scaleFactor.Height * factor.Height);

Bagaimana cara mengaktifkan sumber .NET Framework yang melangkah di Visual Studio 2010?


Saya duduk di breakpoint dalam kode saya. Saya mencoba mengklik dua kali pada fungsi lebih jauh di tumpukan panggilan. Ini akan, saya harap, memungkinkan saya untuk melompat ke kode .NET:

masukkan deskripsi gambar di sini

Kecuali itu tidak berhasil: Visual Studio memberi tahu saya bahwa tidak ada sumber yang tersedia:

Tangkapan layar pesan kesalahan yang mengatakan Tidak Ada Sumber yang Tersedia

Bagaimana cara mengaktifkan sumber .NET Framework yang melangkah di Visual Studio 2010?


Jika saya beralih ke tampilan pembongkaran sebelum mencoba masuk ke kode .NET ( Debug -> Windows -> Pembongkaran ), saya dapat melihat callke dalam kode .NET:

Tangkapan layar kode

Dan ketika saya melakukannya, saya akhirnya men-debug pembongkaran System.Windows.Forms.ScaleControl:

Tangkapan layar jendela pembongkaran

Yang tidak sama dengan, atau berguna seperti, bisa masuk ke sumber .NET Framework.

Bagaimana cara mengaktifkan sumber .NET Framework yang melangkah di Visual Studio 2010?


Jalur cache simbol yang dikonfigurasi di komputer saya memang berisi file cache simbol:

Tangkapan layar dari daftar folder

Jadi itu mengunduh pdbfile simbol, tetapi menolak untuk menggunakannya.

Bagaimana cara mengaktifkan sumber .NET Framework yang melangkah di Visual Studio 2010?


Leppie menyarankan agar saya memeriksa Debuglog (dengan jendela log debug terbuka; jika tidak, log tidak akan mencatat apa pun):

Step into: Stepping over method without symbols 'System.Windows.Forms.Form.ScaleControl'

Sebelumnya di log saya melihatnya memuat simbol untuk System.Windows.Forms.dll:

Loaded 'C:\Windows\assembly\GAC_MSIL\System.Windows.Forms\2.0.0.0__b77a5c561934e089\System.Windows.Forms.dll', Symbols loaded.

masukkan deskripsi gambar di sini

Jadi yang menemukan simbol-simbol, tapi mengklaim bahwa itu tidak bisa menemukan mereka.

Bagaimana cara mengaktifkan sumber .NET Framework yang melangkah di Visual Studio 2010?


Seorang pria dari Microsoft Italia menyarankan untuk mematikan Memerlukan file sumber agar sama persis dengan versi aslinya :

Tangkapan layar jendela opsi

Itu tidak memperbaikinya.

Bagaimana cara mengaktifkan sumber .NET Framework yang melangkah di Visual Studio 2010?


Telah disarankan bahwa ada bug dengan server sumber Microsoft untuk .NET Framework 4.0 . Mengikuti saran itu, saya mengalihkan proyek ke target .NET Framework 3.5 :

masukkan deskripsi gambar di sini

Itu tidak memperbaikinya.

Bagaimana cara mengaktifkan sumber .NET Framework yang melangkah di Visual Studio 2010?


Seseorang di suatu tempat dengan iseng bertanya-tanya apakah orang lain yang mengalami masalah yang sama menggunakan debugger versi 64-bit . Sekarang, tidak ada yang namanya Visual Studio versi 64-bit, tetapi saya mencoba mengalihkan proyek saya dari AnyCPU ke x86 (sedang JITed ke x64), jika Microsoft tidak mendukung prosesor 64-bit:

masukkan deskripsi gambar di sini

Itu tidak memperbaikinya:

Step into: Stepping over method without symbols 'System.Windows.Forms.Form.ScaleControl'

Bagaimana cara mengaktifkan sumber .NET Framework yang melangkah di Visual Studio 2010?


Lihat juga

Ian Boyd
sumber
Sudahkah Anda memeriksa 'cache' kode sumber?
leppie
@leppie Apa yang Anda maksud dengan "cache 'kode sumber'? Jika yang Anda maksud adalah folder yang menyimpan kode sumber, itu sedang diisi (Lihat Pembaruan 4 )
Ian Boyd
Iya. Apakah mungkin untuk membuka file sumber itu, dan menyetel breakpoint?
leppie
1
sangat baik menulis masalah ini!
andersonbd1
1
Itu juga tidak berfungsi di VS2012. Ini berfungsi selama sehari, setelah saya mengkonfigurasi semuanya dan berhenti bekerja. Dua hari, lusinan kopi, ratusan halaman web kemudian tidak berfungsi. Pada saat yang sama, sumber yang diterbitkan oleh symbolource.org bekerja dengan sangat baik.
Wiktor Zychla

Jawaban:

35

PDB untuk menelusuri kode sumber hanya diposting untuk RTM dan Paket Layanan. Dengan demikian, ketika pembaruan keamanan keluar dan memodifikasi dll yang Anda coba debug, itu akan menyebabkan langkah sumber tidak berfungsi (yaitu, Anda akan mendapatkan "Tidak ada sumber yang Tersedia" dengan abu-abu "Jelajahi untuk menemukan Sumber ").

Namun, setelah Anda membuat semua pengaturan yang sesuai, Anda dapat menggunakan solusi berikut. Solusinya pada dasarnya adalah menemukan pembaruan keamanan yang menyebabkan dll berubah, dan kemudian menghapusnya. Ini memiliki kelemahan yang jelas karena pembaruan keamanan tersebut dihapus di komputer Anda.

Solusi

  1. Identifikasi dll mana yang ingin Anda debug (misalnya System.Windows.Forms.dll)
  2. Saat debugging, buka jendela Modules di Visual studio, cari kolom Version . Jika versinya bukan versi RTM atau Service pack, Anda harus melakukan alur kerja. Biasanya, dll RTM akan bertuliskan "dibangun oleh: RTMRel". Sementara dll yang merupakan bagian dari pembaruan keamanan akan bertuliskan "dibangun oleh: RTMGDR". Catat nomor versi (misalnya 4.0.30319.269 dibangun oleh: RTMGDR)
  3. Sekarang, kami ingin menemukan pembaruan yang membuat versi ini. Lakukan ini dengan mencari dll dan nomor versi di support.microsoft.com/kb/ Misalnya, saya melakukan pencarian google berikut: site:support.microsoft.com/kb System.Windows.Forms.dll 4.0.30319.269
  4. Pencarian harus menghasilkan informasi tentang pembaruan. Catat nomor KB di bilah alamat. Dalam contoh saya, alamatnya adalah http://support.microsoft.com/kb/2604121, jadi KB2604121, adalah yang kami minati.
  5. Buka Panel Kontrol-> Program dan Fitur, dan klik "Lihat Pembaruan Terpasang"
  6. Temukan pembaruan yang mencantumkan nomor KB (Anda dapat menggunakan pencarian di kotak kanan atas).
  7. Copot pemasangan pembaruan itu.
  8. Ulangi proses ini untuk dll yang sama ini hingga dll tersebut kembali ke versi RTMRel atau versi SP. Misalnya, untuk System.Windows.Forms.dll, saya harus menghapus KB2686827, KB2604121, KB2518870 sebelum kembali ke versi RTMRel.

Anda harus melakukan ini untuk setiap dll dalam kerangka .NET yang Anda pedulikan tentang debugging.

Setelah selesai, atur breakpoint dalam sumber .net (misalnya, buka tab Breakpoints, katakan New-> Break at Function, dan masukkan System.Windows.Forms.Form.Form) atau masuk ke salah satu .net metode di dll itu.

Matt Smith
sumber
1
Benar, triknya adalah menemukan yang benar untuk dicopot (karena biasanya Anda memiliki banyak dari mereka yang terpasang, dan mereka membutuhkan waktu untuk mencopot pemasangannya).
Matt Smith
Saya tidak dapat menghapus pembaruan keamanan. Itu bertentangan dengan kebijakan perusahaan. Apakah ada cara untuk mendapatkan salinan mscorlib.dll (dan lainnya) yang cocok dengan server Microsoft Symbols? Mscorlib.dll saya adalah versi 4.0.30319.269 (RTMGDR.030319-2600). Mungkin, saya dapat memperbarui GAC untuk sementara dengan DLL baru ini dan mencoba loncatan sumber.
kevinarpe
Ini mungkin juga melanggar kebijakan perusahaan saya - saya hanya menginstal ulang setelah selesai. Saya tidak berpikir Anda hanya bisa mencelupkan dalam versi lama mscorlib.dll independen dari dll lain yang harus digulung kembali dengannya (agar berfungsi dengan baik). Selain itu, memperbarui GAC sementara dengan dll lama pada dasarnya sama dengan menghapus sementara pembaruan keamanan.
Matt Smith
Kemungkinan alasan Microsoft tidak merilis sumber untuk pembaruan keamanan adalah bahwa seseorang dapat membandingkan perubahan kode, memahami apa kerentanan keamanan itu, dan membuat eksploitasi mereka sendiri. Apa yang tidak disadari Microsoft adalah bahwa "kode sumber" telah tersedia menggunakan ILSpy atau Relfector. Jadi Microsoft, dengan tidak merilis kode sumber, sebenarnya tidak membuat siapa pun lebih aman - hanya saja hidup para pengembang lebih sulit.
Ian Boyd
2
@IanBoyd Saya ragu itu motivasi MS. Saya berasumsi bahwa alur kerja mereka tidak mendukung pembaruan sumber PDB untuk debugging. Perhatian utama mereka adalah menutup lubang keamanan.
xanadont
6

Meskipun sayangnya ada masalah dengan Microsoft, seperti yang ditunjukkan Leppie (dan saya mendapatkan hasil yang sama

perlu dicatat bahwa upaya Anda akan gagal, karena Anda merujuk:

  • Server Simbol Microsoft

dari pada:

  • referencesource.microsoft.com/symbols

Lihat bagian Tanya Jawab / Pemecahan Masalah Konfigurasi Visual Studio untuk Debug Kode Sumber .NET Framework

yoel halb
sumber
4

Saya telah menemukan jawabannya, saya pikir.

Saya menelusuri apa yang terjadi pada Fiddler. Sepertinya hanya simbol yang tersedia saat ini, dan tidak ada sumber.

Ketika VS mencoba untuk memuat simbol dari server 'sumber referensi' itu gagal (404). Karena ini gagal, saya pikir itu tidak dapat memetakan ke file sumber di server itu.

http://referencesource.microsoft.com/symbols/mscorlib.pdb/ED96A7F38A2940F39B9CA7AD9BC5CB671/mscorlib.pdb

Setelah kegagalan di atas, ia mencoba beberapa server bernama 'msdl' di mana ia menemukan PDB sebenarnya (tetapi tampaknya yang satu ini tidak memiliki info kode sumber).

http://msdl.microsoft.com/download/symbols/mscorlib.pdb/ED96A7F38A2940F39B9CA7AD9BC5CB671/mscorlib.pd_

Secara keseluruhan, tampaknya ini adalah masalah Microsoft (sementara) dengan server mereka.

Saya yakin saya memiliki beberapa kode sumber beberapa waktu lalu. Tapi sekarang tidak berhasil.

Edit:

Saya mencobanya dengan berbagai versi .NET, semua hasilnya sama. :(

leppie
sumber
1
Nah itu akan sangat menarik jika langkah-langkah yang tepat saya harus bekerja (tapi tidak), akan bekerja (di masa depan), dan melakukan pekerjaan (tapi tidak hari ini). Ini juga akan sangat membuat frustasi, karena saya menghabiskan 11 jam untuk masalah tersebut.
Ian Boyd
2
msdl.microsoft.com tampaknya menjadi Server Simbol Microsoft
yoel halb
2
dan rusak lagi
Simon_Weaver
Sepertinya bukan "masalah server sementara", 7 tahun kemudian dan tautannya masih mati.
jrh
1

Dalam kasus saya, saya men-debug aplikasi WinForms .NET 2.0 lama dan saya mendapat pesan "Sumber Tidak Tersedia" . Saya mencoba semua pengaturan yang direkomendasikan.

Pada akhirnya, saya membangun kembali aplikasi untuk sementara menargetkan .NET 4.5 dan dapat membuat sumbernya melangkah untuk bekerja. Mungkin aplikasi saya terlalu tua untuk melangkah ke sumber. Agak mengalahkan tujuannya, saya tahu, tapi untuk pengujian cepat dan kotor itu berhasil. Bug yang saya miliki masih ada di .NET 4.5 . :)

Kerangka Target

Brian Chavez
sumber
0

Anda dapat menemukan sumber referensi di sini, tersedia untuk diunduh:

Sumber Referensi .NET Framework 4.0

Sumber untuk WCF, WF, dan bahkan 4.5 Beta / RC dan banyak lagi dapat ditemukan di sana juga:

Microsoft Referencesource NetFramework

Mare Infinitus
sumber
3
Kode sumber tidak berguna tanpa simbol. Kecuali jika Anda suka mencari bagian kode tertentu; p
leppie
0

Berikut adalah petunjuk resmi https://referencesource.microsoft.com/setup.html

Konfigurasi Visual Studio 2013 untuk debugging .NET framework

Untuk mengkonfigurasi Visual Studio 2013 lakukan hal berikut di Tools -> Options -> Debugging -> General menu:

  • Nonaktifkan hanya kode saya
  • Nonaktifkan step over properti dan operator
  • Nonaktifkan wajibkan file sumber agar sama persis dengan versi aslinya
  • Aktifkan loncatan sumber framework .NET
  • Aktifkan dukungan server sumber
Kolonel Panik
sumber