".NET Framework kaynak adımlamayı etkinleştir" i nasıl etkinleştirirsiniz?


118

22 Şubat 2013 Güncellemesi : Microsoft Connect girişinde, Alok Shriram'dan (Program Yöneticisi, Temel Sınıf Kitaplıkları, .NET Framework) sorunun şimdi çözülmesi gerektiğini belirten bir not var. Connect girişi Çözüldü (Düzeltildi) olarak işaretlenir :

Bu sorun şimdi düzeltilmelidir. Referans kaynaklar için bir güncelleme yayınladık. Sorununuz hala çözülmezse lütfen bize bildirin.

Bir buçuk yıl.

Bonus Linkler

Orijinal Soru

Visual Studio 2010'da .NET framework kaynak adımlamasını nasıl etkinleştiririm?


Not : Bu soru, daha büyük bir bütünün bir parçasıdır:


Visual Studio 2010 yeni bir özellikle birlikte gelir:

  • Araçlar, Seçenekler, Hata Ayıklama, Genel, .NET Framework kaynak adımlamayı etkinleştirin

Seçenekler menüsünün ekran görüntüsü

MSDN sayfasındaki talimatları izleyerek Nasıl Yapılır: .NET Framework Kaynağında Hata Ayıklama :

.NET Framework kaynak hata ayıklamasını etkinleştirmek için

  1. On Araçlar menüsünden, tıklayın Seçenekler .

  2. Gelen Seçenekler iletişim kutusunda, tıklayın ayıklama kategoriyi.

  3. In Genel kutusuna, aşağıdaki onay kutularını seçin:

    • .NET Framework kaynak adımlamayı etkinleştirin
    • Kaynak sunucu desteğini etkinleştir

Bunu yapıyorum:

Seçenekler menüsünün ekran görüntüsü, seçilen ilgili seçeneklerin vurgulanması

Not : MSDN sayfasının notlarında ve fark ettiğim gibi, .NET Framework kaynak adımlamayı etkinleştir seçeneğinin işaretinin otomatik olarak ** Yalnızca Kodumu Etkinleştir (Yalnızca Yönetilen) işaretini kaldıracağını fark edeceksiniz. Ayrıca kaynak sunucu desteğinin teşhis mesajlarını da etkinleştirdim.

Bu seçenekleri etkinleştirmek benim için otomatik olarak bir sembol önbellek indirme konumu belirler:

Önbellek dizinini gösteren seçenekler menüsünün ekran görüntüsü (vurgulanmış)

Not : Microsoft Symbol Sunucusu girişi zaten mevcuttur (ve kaldırılamaz).


MSDN sayfası, sembolleri yüklemenizi söylüyor:

Modüller penceresini kullanarak Çerçeve sembollerini yüklemek için

  1. In Modüller penceresinde, semboller yüklenmez kendisi için bir modül sağ tıklayın. Sembol Durumu sütununa bakarak sembollerin yüklü olup olmadığını anlayabilirsiniz .

  2. Nokta için Dan Yük Sembolleri ve tıklama Microsoft Simge Sunucular daha önce depolanmış sembolleri var bir dizinden yüke Microsoft kamu semboller sunucu veya Sembol yolundan alıkoymak indirme sembollerine.

Bunu deniyorum:

görüntü açıklamasını buraya girin

ve sonra tüm semboller yüklenir:

Yukarıda açıklandığı gibi modüller penceresinin ekran görüntüsü

.NET çerçeve kodunu aramak üzere olan bir kesme noktasında oturuyordum:

Aşağıda yazılan kodun ekran görüntüsü

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

İtme F11, hata ayıklayıcının bir sonraki satıra geçmesine neden olur:

Aşağıda yazılan kodun ekran görüntüsü

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);

Visual Studio 2010'da .NET Framework kaynak adımlamayı nasıl etkinleştiririm?


Kodumda bir kesme noktasında oturuyorum. Çağrı yığınında daha yukarıda bir işleve çift tıklamayı deniyorum. Bu, umarım .NET koduna geçmeme izin verir :

görüntü açıklamasını buraya girin

İşe yaramaması dışında: Visual Studio bana kullanılabilir kaynak olmadığını söylüyor:

Kaynak Yok diyen hata mesajının ekran görüntüsü

Visual Studio 2010'da .NET Framework kaynak adımlamayı nasıl etkinleştiririm?


Ben .NET koduna adım denemeden önce demontaj görünümüne geçerseniz ( Debug -> , Windows -> Demontaj ), bir görebilirsiniz call.NET koduna:

Kodun ekran görüntüsü

Ve bunu yaptığımda, aşağıdakilerin bir demontajında ​​hata ayıklamaya başlıyorum System.Windows.Forms.ScaleControl:

Demontaj penceresinin ekran görüntüsü

Bu, .NET Framework kaynağına adım atmakla aynı veya yararlı değildir.

Visual Studio 2010'da .NET Framework kaynak adımlamayı nasıl etkinleştiririm?


Bilgisayarımdaki yapılandırılmış sembol önbellek yolu, sembol önbellek dosyalarını içeriyor:

Klasör listesinin ekran görüntüsü

Bu yüzden pdbsembol dosyalarını indiriyor, ancak kullanmayı reddediyor.

Visual Studio 2010'da .NET Framework kaynak adımlamayı nasıl etkinleştiririm?


Leppie Debuggünlüğü kontrol etmemi önerdi (hata ayıklama günlüğü penceresi açıkken; aksi takdirde hiçbir şey kaydetmez ):

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

Günlüğün önceki bölümlerinde aşağıdakiler için semboller yüklediğini görüyorum System.Windows.Forms.dll:

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

görüntü açıklamasını buraya girin

Bunun Yani edilir benim semboller bulma, ama onları bulamadı iddia.

Visual Studio 2010'da .NET Framework kaynak adımlamayı nasıl etkinleştiririm?


Microsoft İtalya'dan bir adam, Kaynak dosyalarını orijinal sürümle tam olarak eşleşecek şekilde iste'yi kapatmayı öneriyor :

Seçenekler penceresinin ekran görüntüsü

Bu onu düzeltmedi.

Visual Studio 2010'da .NET Framework kaynak adımlamayı nasıl etkinleştiririm?


Microsoft'un .NET Framework 4.0 için kaynak sunucusunda bir hata olduğu öne sürülmüştür . Bu öneriyi takiben projeyi hedef .NET Framework 3.5 olarak değiştirdim :

görüntü açıklamasını buraya girin

Bu onu düzeltmedi.

Visual Studio 2010'da .NET Framework kaynak adımlamayı nasıl etkinleştiririm?


Birisi boş yere aynı sorunu yaşayan başka bir kişinin hata ayıklayıcının 64 bit sürümünü kullanıp kullanmadığını merak etti . Şimdi, orada Visual Studio 64 bit sürümüne diye bir şey, ama benim proje geçiş çalıştı AnyCPU için x86 (o x64 için JITed ediliyordu), durumda, Microsoft 64 bit işlemcileri desteklemez:

görüntü açıklamasını buraya girin

Bu onu düzeltmedi:

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

Visual Studio 2010'da .NET Framework kaynak adımlamayı nasıl etkinleştiririm?


Ayrıca bakınız


Kaynak kodu 'önbelleğini' kontrol ettiniz mi?
leppie

@leppie "Kaynak kodu 'önbelleği" ile neyi kastediyorsunuz? Kaynak kodunu önbelleğe alan klasörü kastediyorsanız, dolduruluyor (Bkz. 4. Güncelleme )
Ian Boyd

Evet. Bu kaynak dosyayı açıp bir kesme noktası ayarlamak mümkün mü?
leppie

1
konunun mükemmel bir şekilde yazılması!
andersonbd1

1
VS2012'de de çalışmıyor. Her şeyi yapılandırdıktan ve çalışmayı bıraktıktan sonra bir gün çalıştı. İki gün, düzinelerce kahve, yüzlerce web sayfası sonra işe yaramıyor. Aynı zamanda, symbolsource.org tarafından yayınlanan kaynaklar da bir cazibe gibi çalışıyor.
Wiktor Zychla

Yanıtlar:


35

Kaynak kodda ilerlemeye yönelik PDB'ler yalnızca RTM ve Hizmet Paketleri için gönderilir. Bu nedenle, güvenlik güncellemesi çıktığında ve hata ayıklamaya çalıştığınız dll'yi değiştirdiğinde, kaynak adımlamanın çalışmamasına neden olur (yani, gri renkli "Kaynak Yok" mesajı görüntülenir. ").

Ancak, tüm uygun ayarları yaptıktan sonra, aşağıdaki geçici çözümü kullanabilirsiniz. Çözüm, temelde dll'nin değişmesine neden olan güvenlik güncellemelerini bulmak ve sonra bunları kaldırmaktır. Bu, bu güvenlik güncellemelerinin makinenizde kaldırılmasının bariz bir dezavantajına sahiptir.

Geçici çözüm

  1. Hangi dll'de hata ayıklamak istediğinizi belirleyin (ör. System.Windows.Forms.dll)
  2. Hata ayıklama sırasında, Visual Studio'da Modüller penceresini açın , Sürüm sütununu bulun . Sürüm, RTM veya Hizmet paketi sürümü değilse, iş akışını yapmanız gerekir. Tipik olarak RTM dll "inşa eden: RTMRel" diyecektir. Güvenlik güncellemesinin parçası olan bir dll, "built by: RTMGDR" diyecektir. Sürüm numarasını not edin (örneğin 4.0.30319.269 tarafından oluşturulan: RTMGDR)
  3. Şimdi, bu sürümü oluşturan güncellemeyi bulmak istiyoruz. Bunu, support.microsoft.com/kb/ adresinde dll ve sürüm numarasını arayarak yapın Örneğin, aşağıdaki google aramasını yaptım: site:support.microsoft.com/kb System.Windows.Forms.dll 4.0.30319.269
  4. Arama, bir güncelleme hakkında bilgi vermelidir. Adres çubuğundaki KB numarasını not edin. http://support.microsoft.com/kb/2604121Örneğimde adres , yani KB2604121, ilgilendiğimiz şeydi.
  5. Denetim Masası-> Programlar ve Özellikler'e gidin ve "Yüklü Güncellemeleri Görüntüle" yi tıklayın.
  6. KB numarasını listeleyen bir güncelleme bulun (sağ üst kutudaki aramayı kullanabilirsiniz).
  7. Bu güncellemeyi kaldırın.
  8. Dll, RTMRel sürümüne veya SP sürümüne geri dönene kadar aynı dll için bu işlemi tekrarlayın. Örneğin, System.Windows.Forms.dll için, RTMRel sürümüne dönmeden önce KB2686827, KB2604121, KB2518870'i kaldırmak zorunda kaldım.

Bunu, .NET çerçevesinde hata ayıklamayı önemsediğiniz her dll için yapmanız gerekir.

Bunu yaptıktan sonra, .net kaynağı içinde bir kesme noktası ayarlayın (örneğin, Kesme Noktaları sekmesine gidin, Yeni-> İşlevi Kırın ve System.Windows.Forms.Form.Form'a girin) veya .net'ten birine adım atın. o dll'deki yöntemler.


1
(Genellikle bir beri Sağ, hile kaldırma doğru olanları yerinin olduğunu çok yüklü bunlardan ve bunlar kaldırma için bir süre alabilir yoktur).
Matt Smith

Güvenlik güncellemelerini kaldıramıyorum. Şirket politikasına aykırıdır. Mscorlib.dll'nin (ve diğerlerinin) Microsoft Symbols sunucusuyla eşleşen kopyalarını almanın bir yolu var mı? Benim mscorlib.dll sürüm 4.0.30319.269 (RTMGDR.030319-2600). Muhtemelen, bu yeni DLL ile GAC'yi geçici olarak güncelleyebilir ve kaynak adımlamayı deneyebilirim.
kevinarpe

Muhtemelen şirket politikama da aykırı - sadece işim bittikten sonra onları yeniden kuruyorum. Onunla geri alınması gereken diğer dll'lerden bağımsız olarak eski bir mscorlib.dll sürümünde plop yapabileceğinizi sanmıyorum (düzgün çalışması için). Ayrıca, GAC'nin eski dll'lerle geçici olarak güncellenmesi, temelde güvenlik güncellemesinin geçici olarak kaldırılmasına eşdeğerdir.
Matt Smith

Microsoft'un güvenlik güncellemeleri için kaynak yayınlamamasının olası nedeni, birinin kod değişikliklerini karşılaştırabilmesi, güvenlik açığının ne olduğunu anlayabilmesi ve kendi açıklarından yararlanabilmesidir. Microsoft'un anlamadığı şey, "kaynak kodunun" ILSpy veya Relfector kullanılarak zaten mevcut olduğudur. Bu nedenle Microsoft, kaynak kodunu yayınlamayarak aslında kimseyi daha güvenli hale getirmiyor - sadece geliştiricilerin daha zor yaşaması.
Ian Boyd

2
@IanBoyd MS'in motivasyonunun bu olduğundan şüpheliyim. İş akışlarının hata ayıklama için kaynak PDB'lerin güncellenmesini desteklemediğini varsayıyorum. Öncelikle güvenlik açıklarını kapatmakla ilgileniyorlar.
xanadont

6

Ne yazık ki bir Microsoft ile ilgili bir sorun olsa da, Leppie'nin de belirttiği gibi (ve aynı sonucu aldım)

Aşağıdakilere referans verdiğiniz için girişiminizin yine de başarısız olacağına dikkat edilmelidir:

  • Microsoft Symbol Sunucusu

onun yerine:

  • referencesource.microsoft.com/symbols

.NET Framework Kaynak Kodunda Hata Ayıklamak için Visual Studio'yu Yapılandırma'nın SSS / Sorun Giderme bölümüne bakın.


4

Cevabı buldum sanırım.

Fiddler'da neler olduğunu takip ettim. Görünüşe göre sadece semboller şu anda mevcut ve kaynak yok.

VS 'referans kaynağı' sunucusundan sembolleri yüklemeye çalıştığında başarısız olur (404). Bu başarısız olduğu için, o sunucudaki kaynak dosyalara eşlenemeyeceğini düşünüyorum.

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

Yukarıdaki hatadan sonra, gerçek PDB'yi bulduğu 'msdl' adlı bir sunucuyu dener (ancak bunun kaynak kodu bilgisi yok gibi görünüyor).

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

Sonuç olarak, sunucularıyla ilgili (geçici) bir Microsoft sorunu gibi görünüyor.

Bir süre önce kaynak kodum olduğuna eminim. Ama şimdi çalışmıyor.

Düzenle:

Bunu çeşitli .NET sürümleriyle denedim, hepsi aynı sonuç. :(


1
Adımlarımın işe yaraması (ama çalışmaması), işe yaraması (gelecekte) ve işe yaraması (ama bugün değil) olması durumunda bu çok ilginç olurdu . Sorun için 11 saat harcadığım için de olağanüstü derecede sinir bozucu olurdu.
Ian Boyd

2
msdl.microsoft.com, Microsoft Symbol Server olarak görünüyor
yoel halb

2
ve tekrar kırıldı
Simon_Weaver

7 yıl sonra "geçici bir sunucu sorunu" gibi görünmüyor ve bağlantılar hala kesildi.
jrh


1

Benim durumumda, eski bir .NET 2.0 WinForms uygulamasında hata ayıklama yapıyordum ve "Kaynak Kullanılamıyor" mesajını aldım . Önerilen tüm ayarları denedim.

Sonunda, uygulamayı geçici olarak .NET 4.5'i hedef alacak şekilde yeniden oluşturdum ve kaynak adımlarının çalışmasını sağlayabildim. Belki de uygulamam kaynağa adım atmak için çok eskiydi. Bir nevi amacı bozuyor, biliyorum ama hızlı ve kirli testler için işe yarıyor. Sahip olduğum hata hala .NET 4.5'te var . :)

Hedef Çerçeve



0

İşte resmi talimatlar https://referencesource.microsoft.com/setup.html

.NET çerçevesinde hata ayıklama için Visual Studio 2013'ü yapılandırma

Visual Studio 2013'ü yapılandırmak için Araçlar -> Seçenekler -> Hata Ayıklama -> Genel menüsünde aşağıdakileri yapın:

  • Yalnızca kodumu devre dışı bırak
  • Özelliklerin ve operatörlerin üzerinden geçmeyi devre dışı bırakın
  • Devre dışı bırak, kaynak dosyaların orijinal sürümle tam olarak eşleşmesini gerektir
  • .NET çerçeve kaynak adımlamasını etkinleştir
  • Kaynak sunucu desteğini etkinleştir

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.