Başvurulan bir dll'de hata ayıklama (pdb'ye sahip)


132

Çalışma alanımda iki çözümüm var, örneğin A ve B.

Çözüm A, bir süre önce kodlamayı bitirdiğim eski bir projedir. Çözüm B'de, Çözüm A'daki bazı sınıfları kullanmam gerekiyor. Bunu yapmak için, çözüm A'daki projelerden birinin dll'sine bir referans ekliyorum.

Sorun, hata ayıklamaya çalıştığım zamandır. Ben de A'nın koduna girebilmek istiyorum. Visual Studio bu sınıflar için kod yükleyemiyor ("Geçerli konum için kaynak kodu yok.") Ve yalnızca demontajı görüntüleyebiliyorum, bu kullanışlı değil.

Çözüm A'daki sınıflarda hata ayıklamanın tek yolu B çözümünü çalıştırmak, tüm işlemleri ayırmak (Hata Ayıklama menü öğesinde) ve işlemi A çözümünden eklemektir.

Ancak, bu çok sakıncalıdır ve bir kerede yalnızca A VEYA B hatalarını ayıklayabilirim.

Başvurulan dll'lerin koduna girmeye izin vermenin bir yolu var mı (bunun için kaynak kodum var)?


Çözüm: Hatam, bir projenin yalnızca tek bir çözümün parçası olabileceğini düşünmemdi. Aslında, bir proje herhangi bir sayıda çözümün parçası olabilir.
Eski projeye başvurmanız gerektiğinde, projeyi çözüme eklemeniz yeterlidir. Bu, Solution Explorer> Add> Existing Project'te yeni çözüme sağ tıklanarak yapılır.
Ardından, proje referansını ekleyebileceksiniz. Başkalarının da yazdığı gibi, muhtemelen kendi kodunuza (veya değiştirmeniz ve hata ayıklamanız gerekebilecek diğer kodlara) dll referanslarını kullanmaktan tamamen kaçınmalısınız.

Çözümlerin nasıl tasarlanması gerektiğine dair çok iyi bir referans MSDN'de bulunabilir .


Bu MSDN bağlantısı, .net geliştiricileri için okunması gereken bir şeydir (kullandıkları kaynak denetimine bakılmaksızın). Daha önce görmediğime şaşırdım. Teşekkürler!
Patenti

Yeni gelenler, proje referanslarını zaten biliyorsanız ve bu bir seçenek değilse (örneğin, bir NuGet paketinde hata ayıklamanız gerekiyorsa), o zaman kabul edilen yanıtı yoksayın ve doğrudan
şuna

Yanıtlar:


113

Bir proje referansınız varsa, hemen çalışmalıdır.

Bir ise dosya (dll) referans, sen ayıklama sembolleri ( "pdb" dosyası) dll aynı klasörde olması gerekir. Projelerinizin hata ayıklama sembolleri oluşturup oluşturmadığını kontrol edin (proje özellikleri => Oluştur => Gelişmiş => Çıktı / Hata Ayıklama Bilgisi = tam); ve dll'yi kopyaladıysanız , pdb'yi de bununla birlikte koyun.

Herhangi bir dosyayı kopyalamak istemiyorsanız, sembolleri doğrudan IDE'ye de yükleyebilirsiniz, ancak bu daha fazla iştir.

En kolay seçenek proje referanslarını kullanmaktır!


3
Neyse ki, başka bir çözümden projeye proje referansı eklemenin mümkün olmadığını düşünüyorum (yanılıyorsam düzeltin!).
Elad

7
@ Bunu az önce yaptım. Önce çözüme "mevcut projeyi" ekleyin. Ardından proje referansı ekle'ye tıklayarak projeye bir referans ekleyin. Kesme noktalarını mevcut proje dosyalarında ayarlayabilirsiniz. Bu güzel çünkü dosyalar kopyalanmıyor.
user420667

3
Proje referansı olarak DLL projem var ancak içindeki kesme noktası yok sayılıyor.
Slav

1
Aslında bugün bir dosya referansı olarak eklenen bir (yayın-) derlemesinin hatalarını ayıklayabildim. Aferin bana, ama bu nasıl oldu? MSVC2010, C #, (ASP) .NET 4.0, başvurulan derleme hata ayıklama + yayın olarak mevcuttur (ancak projeye yalnızca yayın dosyası eklenmiştir). Bunu gerçekten açıklığa kavuşturmak isterim.
Tobias81

1
Benim için bir gün çalışıyordu ama ertesi gün çalışmıyordu (DLL ve PDB dosyalarına sahip olmak). Araçlar> Seçenekler> Hata Ayıklama> Semboller'deki "Sembol Önbelleğini Boşalt" düğmesine basmak sorunu çözdü.
Paul

45

Ben de aynı sorunu yaşadım. O bulduğum şey:

1) tüm projelerin aynı Çerçeveyi kullandığından emin olun (bu çok önemlidir!)

2) Araçlar / Seçenekler> Hata Ayıklama> Genel'de "Yalnızca Kodumu Etkinleştir (Yalnızca Yönetilen)" işaretli olmadığından emin olun

3) Araçlar / Seçenekler> Hata Ayıklama> Semboller'de önbelleğe alınmış sembolleri temizleyin, "Semboller dosyası (.pdb) konumları" liste kutusu altındaki varsayılan "Microsoft Sembol Sunucuları" dışındaki tüm klasör konumlarının işaretini kaldırın ve silin, ancak yine de işaretini kaldırın. Ayrıca "Bu dizindeki önbellek sembolleri" metin kutusundaki statik yolları da silin. "Sembol Önbelleğini Boşalt" düğmesini tıklayın. Son olarak, "Yalnızca belirli modüller" radyo düğmesinin işaretli olduğundan emin olun.

4) Tüm projeler için Build / Configuration Manager menüsünde, konfigürasyonun Debug modunda olduğundan emin olun.


3
Benim sorunum, iki projemin farklı .Net Frameworks kullanmasıydı: 4.0 ve 4.5. Tx!
user627283

1) ve 4) çok önemlidir. Hata Ayıklama modunda derlemeyi ve aynı çerçeveyi kullanmayı unutmayın.
scott_f

12

Akılda tutulması gereken bir diğer nokta, başvurulan dll'lerin GAC'de kurulu olmadığından emin olun. Test ettikten sonra, sistem seviyesinde test yapmak için dll'lerimi GAC'a yükledim. Daha sonra, kodumda tekrar hata ayıklamak zorunda kaldığımda, GAC'den silene kadar başvurulan derlemelere adım atamadım.


2
TEŞEKKÜR EDERİM! Bu benim sorunumdu. Bunu çözmediğime inanamıyorum: - / Proje referansını belirlemenin bir şekilde GAC'de kurulu olanı geçersiz kılacağını düşündüm.
SnookerC

Kesinlikle! Bu çok iyi bir nokta. .NET Framework'ün aynı sürümüne sahip olsanız bile, hata ayıklamaya çalıştığınızda GAC'de kodunuz varsa, GAC'deki .PDB dosyası proje klasörünüzdekinden farklıysa, kesme noktasına ulaşmaz. Bunun için bir çözüm, DLL'nin GAC'sini kaldırmak, derlemeyi oluşturmak ve ardından derlemeyi yeniden GAC uygulamaktır.
DigiOz Multimedia

7

1. Adım: Git için Araçlar -> Seçenek -> Hata ayıklama

2. Adım: Yalnızca Kodum'u Etkinleştir seçeneğinin işaretini kaldırın

3. Adım: Kaynak dosyanın orijinal Sürümle tam olarak eşleşmesini gerektir seçeneğinin işaretini kaldırın

Adım 4: Özellikler ve İşleçler Üzerinden Adımla seçeneğinin işaretini kaldırın


3

*.pdbDosyaları aynı klasörde tuttum ve Arindam'daki seçenekleri kullandım , ancak yine de çalışmadı. Proje özellikleri> Hata Ayıkla altında bulunabilen Yerel kod hata ayıklamasını etkinleştir'i etkinleştirmem gerektiği ortaya çıktı .


1
bu bilgi kabul edilen cevaba dahil edilmelidir. özellikle aradığım şey. paylaşım için teşekkürler! +1
Heriberto Lugo

2

Başvurulan bir dll'nin kaynak kodunda bir kesme noktası ayarlamak istediğinizde, önce onun için kullanılabilir bir pdb dosyanız olduğundan emin olun. Ardından ilgili kaynak kodu dosyasını açıp orada bir kesme noktası ayarlayabilirsiniz. Kaynak dosyanın çözümünüzün bir parçası olması gerekmez. As açıklandığı ben Visual Studio başvurulan bir kesme noktası kodu ayarlayabilirsiniz nasıl?

Kesme noktalarınızı, Hata Ayıklama -> Pencereler -> Kesme Noktaları aracılığıyla erişilebilen kesme noktaları penceresinden inceleyebilirsiniz.

Bu yaklaşım, mevcut bir projeyi çözümünüze yalnızca hata ayıklama amacıyla eklemeniz gerekmemesi avantajına sahiptir, çünkü onu dışarıda bırakmak bana çok fazla derleme süresi kazandırdı. Açıktır ki, içinde tek bir proje olan bir çözüm oluşturmak, çok sayıda proje içeren bir çözüm oluşturmaktan çok daha hızlıdır.


1
Bu, yalnızca kesme noktasını yerleştirdiğiniz harici dosya PDB'deki tam yolla eşleştiğinde çalışır. (Örneğin, yalnızca makinenizde DLL oluşturduysanız çalışır.)
Josh M.

2

DLL dosyanızın GAC'de kayıtlı olmadığından emin olun. Visual Studio, GAC'deki sürümü kullanır ve muhtemelen hata ayıklama bilgisine sahip olmayacaktır.


1

Bazı çözümlerime harici bir sınıf kitaplığı projesi dahil etmek istemiyorum, bu yüzden farklı bir şekilde tükettiğim derlemelere giriyorum.

Çözümlerim, diğer projelerden kendi DLL'lerimi içeren bir "Common Assemblies" dizinine sahip. Başvurduğum DLL'lerin hata ayıklama için kendilerine eşlik eden PDB dosyaları da var.

Hata ayıklamak ve kesme noktalarını ayarlamak için, tüketen uygulamanın kaynağında, derlemeden bir yöntem veya kurucu çağırdığım bir kesme noktası belirledim ve ardından yöntem / yapıcı çağrısını INTO (F11) adımını atıyorum.

Hata ayıklayıcı derlemenin kaynak dosyasını VS'ye yükler ve derlemenin içindeki yeni kesme noktaları bu noktada ayarlanabilir.

Basit değildir, ancak yeni bir proje referansı eklemek istemiyorsanız ve bunun yerine paylaşılan bir derlemeye başvurmak istiyorsanız işe yarar.


0

Çalışması gerekir. Aynı anda bir .exe dosyası ve bir dll'de hata ayıklardım! Benim önerdiğim 1) B projenize dll yolunu dahil edin, 2) Sonra A projenizde hata ayıklayın 3) A dll ve de pdb dosyasındaki yolun işaretlendiğini kontrol edin .... 4) Bundan sonra siz B projesinde hata ayıklamaya başlayın ve her şey yolundaysa, her iki projede de hata ayıklama yapabilirsiniz!


0

NuGet'te başvurduğunuz bir harici kitaplıkta hata ayıklamak için VisualStudio 2019'u kullanarak bulduğum en basit yol, aşağıdaki adımları uygulamaktır:

  1. Araçlar> Seçenekler> Hata Ayıklama> Genel> "Yalnızca Kodumu Etkinleştir" seçeneğinin işaretini kaldırın

  2. Derleme Gezgini> NuGet Paketleri Önbelleğinden Aç seçeneğine gidin Liste öğesi

  3. Hata ayıklamak istediğiniz NuGet paket adını arama alanına yazın ve 'Tamam'ı tıklayın. görüntü açıklamasını buraya girin

  4. Montaj Gezgini'nden içe aktarılan montaja sağ tıklayın ve 'Pdb Oluştur'u seçin. görüntü açıklamasını buraya girin

  5. .PDB dosyasını kaydetmek istediğiniz özel bir yol ve bunun için oluşturulmasını istediğiniz çerçeveyi seçin.

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

  6. .PDB dosyasını oluşturulan klasörden Hata Ayıklama klasörünüze kopyalayın ve artık bu derlemenin kitaplık kodunda kesme noktaları ayarlayabilirsiniz.


Herhangi bir Assembly Explorer bulamamak dışında kulağa hoş geliyor; bu Resharper'ın bir parçası değil mi?
Robert Massa
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.