Aracılığıyla paylaş


Hata ayıklama sırasında .NET derlemelerinden kaynak kodu oluşturma

Bir .NET uygulamasında hata ayıklarken, sahip olmadığınız kaynak kodunu görüntülemek istediğinizi fark edebilirsiniz. Örneğin, bir hatada durma veya bir kaynak konuma ulaşmak için çağrı yığınını kullanma.

Not

  • Kaynak kodu oluşturma (ayrıştırma) yalnızca .NET uygulamaları için kullanılabilir ve ILSpy projesinin açık kaynak dayanır.
  • Derleme yalnızca Visual Studio 2019 16.5 ve sonraki sürümlerde kullanılabilir.
  • SuppressIldasmAttribute özniteliğinin bir derlemeye veya modüle uygulanması Visual Studio'nun decompile etmeye çalışmasını önler. Özniteliği .NET 6 ve sonraki sürümlerde kullanımdan kaldırılmış olsa da, Visual Studio özniteliğini kabul eder.

Kaynak kodu oluşturma

Hata ayıklarken ve kullanılabilir kaynak kodu olmadığında, Visual Studio Kaynak Bulunamadı belgesini gösterir veya derleme için simgeleriniz yoksa, Yüklü Simge Yok belgesi. Her iki belgede de geçerli konum için C# kodu oluşturan Kaynak kodu kaynak kodunu ayrıştır seçeneği vardır. Oluşturulan C# kodu daha sonra diğer kaynak kodlarında olduğu gibi kullanılabilir. Kodu görüntüleyebilir, değişkenleri inceleyebilir, kesme noktaları ayarlayabilir ve benzeri işlemleri yapabilirsiniz.

Hiçbir simge yüklenmedi

Aşağıdaki çizimde Simge Yüklenmedi iletisi gösterilmektedir.

Simgesi yüklenmemiş belgenin ekran görüntüsü

Kaynak bulunamadı

Aşağıdaki çizimde Kaynak Bulunamadı iletisi gösterilmektedir.

Kaynak bulunamadı belgesinin ekran görüntüsü

Otomatik kod derleme

Visual Studio 2022 sürüm 17.7'den başlayarak, Visual Studio Hata Ayıklayıcısı dış .NET kodunun otomatik olarak derlenmesini destekler. Dış koda adımlarken veya Çağrı Yığını penceresini kullanırken otomatik olarak kodu decompile edebilirsiniz.

Harici olarak uygulanan koda adımlarsanız, hata ayıklayıcı kodu otomatik olarak koddan ayırır ve geçerli yürütme noktasını görüntüler. Dış koda adım atmak istiyorsanız Yalnızca Benim Kodum'u devre dışı bırakın .

Yalnızca Kodum'u devre dışı bırakmadan Çağrı Yığını penceresinden kaynak kodunu ayıklayabilirsiniz.

Çağrı Yığını penceresinden otomatik olarak derlemek için:

  1. Çağrı Yığını penceresi açıkken hata ayıklarken Dış Kodu Gösterseçin.

  2. Çağrı Yığını penceresinde herhangi bir yığın çerçevesine çift tıklayın. Hata ayıklayıcı kodu ayrıştırır ve ardından doğrudan mevcut yürütme noktasına geçer.

    Dış kodu gösteren Çağrı Yığını penceresinin ekran görüntüsü.

    Tüm derlenmiş kod, Çözüm Gezgini'ndeki Dış Kaynaklar düğümü altında da gösterilir. Gerekirse dış dosyalara göz atabilirsiniz.

    Çözümlenmiş derlemeleri gösteren Dış Kaynaklar düğümünün ekran görüntüsü.

    Derlenmiş kodu hata ayıklayabilir ve kesme noktaları ayarlayabilirsiniz.

Dış kodun otomatik olarak derlenmesi özelliğini devre dışı bırakmak için, Araçları > Seçenekleri > Hata Ayıklama > Genel'e gidin ve gerektiğinde kaynağa otomatik olarak kaynak olarak kod çözme (yalnızca yönetilen) seçimini kaldırın.

Derleme için kaynak oluşturma ve ekleme

Belirli bir konum için kaynak kodu oluşturmaya ek olarak, belirli bir .NET derlemesi için tüm kaynak kodunu oluşturabilirsiniz. Bu görevi yapmak için Modüller penceresine ve bir .NET derlemesinin bağlam menüsünden gidin ve ardından Kaynağı Sembol Dosyasına Koda Ayır komutunu seçin. Visual Studio, derleme için bir sembol dosyası oluşturur ve ardından kaynağı sembol dosyasına ekler. Sonraki bir adımda, gömülü kaynak kodunu çıkartabilirsiniz.

Kaynak kodunu çözme komutuyla modüller penceresindeki derleme bağlam menüsünün ekran görüntüsü.

Eklenmiş kaynak kodunu ayıklama ve görüntüleme

Modüller penceresinin bağlam menüsündeki kaynak kodu ayıkla komutunu kullanarak bir sembol dosyasına eklenmiş kaynak dosyaları ayıklayabilirsiniz.

Kaynakları ayıkla komutuyla modüller penceresindeki derleme bağlam menüsünün ekran görüntüsü.

Ayıklanan kaynak dosyalar, çözüme çeşitli dosyalarolarak dahil edilir. Visual Studio'da çeşitli dosyalar özelliği varsayılan olarak kapalıdır. Bu özelliği Araçları>Seçenekleri>Ortam>Belgeleri>Çözüm Gezgini'nde Çeşitli dosyaları göster onay kutusundan etkinleştirebilirsiniz. Bu özellik etkinleştirilmediyse, ayıklanan kaynak kodunu alamazsınız.

Çeşitli dosyalar seçeneğinin etkinleştirildiği araçlar seçenek sayfasının ekran görüntüsü.

Ayıklanan kaynak dosyaları, Çözüm Gezginiiçindeki çeşitli dosyalar bölümünde görünür.

Çeşitli dosyalar içeren çözüm gezgininin ekran görüntüsü.

.NET kitaplıkları veya SourceLink için etkinleştirilen NuGet paketleri için de kaynak koda adımlayabilir, kesme noktaları ayarlayabilir ve hata ayıklayıcının tüm özelliklerini kullanabilirsiniz. Daha fazla bilgi için bkz. Source Link ile hata ayıklamayı ve tanılamayı etkinleştirme ve SourceLink ile hata ayıklama zamanı üretkenliğini geliştirme.

Bilinen sınırlamalar

Kesme modu gerektirir

Kaynak kodu derleme kullanarak oluşturmak, yalnızca hata ayıklayıcı kesme modundayken ve uygulama duraklatıldığında mümkündür. Örneğin, Visual Studio kesme noktasına veya özel duruma ulaştığında kesme moduna girer. Tümünü Durdur komutunu (Tümünü durdur simgesi) kullanarak Visual Studio'yu bir sonraki çalıştırmada kodunuzun durmasını sağlamanız için kolayca tetikleyebilirsiniz.

Kod çözme sınırlamaları

.NET derlemelerinde kullanılan ara biçimden (IL) kaynak kodu oluşturmanın bazı doğal sınırlamaları vardır. Bu nedenle, oluşturulan kaynak kodu özgün kaynak koduna benzemez. Farklılıkların çoğu özgün kaynak kodundaki bilgilerin çalışma zamanında gerekli olmadığı yerlerdedir. Örneğin, çalışma zamanında boşluk, açıklamalar ve yerel değişkenlerin adları gibi bilgilere ihtiyaç duyulmaz. Oluşturulan kaynağı, özgün kaynak kodunun yerine değil, programın nasıl yürütüldüğünü anlamak için kullanmanızı öneririz.

Optimize edilmiş veya sürüm derlemelerinin hatalarını ayıklayın

Derleyici iyileştirmeleri kullanılarak derlenen bir derlemeden derlenen kodda hata ayıklarken aşağıdaki sorunlarla karşılaşabilirsiniz:

  • Kesme noktaları her zaman eşleşen kaynak konumuna bağlanmayabilir.
  • Adımlar her zaman doğru konuma ulaşmayabilir.
  • Yerel değişkenlerin adları doğru olmayabilir.
  • Bazı değişkenler değerlendirme için kullanılamayabilir.

GitHub sorununda daha fazla ayrıntı bulunabilir: ICSharpCode.Decompiler'in VS Hata Ayıklayıcı ile entegrasyonu hakkında.

Ayrıştırma güvenilirliği

Derleme girişimlerinin göreceli olarak küçük bir yüzdesi başarısızlıkla sonuçlanabilir. ILSpy'daki dizilim noktasına bağlı bir null referans hatası nedeniyle bu davranış ortaya çıkar. Bu sorunları yakalayarak ve kod çözme girişimini düzgün bir şekilde başarısız yaparak hatayı azalttık.

GitHub sorununda daha fazla ayrıntı bulunabilir: ICSharpCode.Decompiler'ın VS Debugger'a entegrasyonu.

Asenkron kodla ilgili sınırlamalar

Asenkron/await kod desenlerine sahip modüllerin dekompile edilmesi sonucu eksik olabilir veya tamamen başarısız olabilir. ILSpy'ın async/await ve yield durum makineleri uygulaması yalnızca kısmen gerçekleştirilmiştir.

GitHub sorununda daha fazla ayrıntı bulunabilir: PDB Oluşturucu Durumu.

Yalnızca Kodum

Just My Code (JMC) ayarı, Visual Studio'nun sistem, çerçeve, kitaplık ve diğer kullanıcı dışı çağrıları atlamasına olanak tanır. Hata ayıklama oturumu sırasında Modüller penceresi, hata ayıklayıcının Hangi kod modüllerini Kodum (kullanıcı kodu) olarak ele aldığı gösterir.

İyileştirilmiş veya yayın modüllerinin ayrıştırması, kullanıcı dışı kod oluşturur. Derleyici, derlenmemiş kullanıcı dışı kodunuzda hata ayıklarken kesilirse, örneğin Kaynak Yok penceresi görüntülenir. tr-TR: Yalnızca Benim Kodum'u devre dışı bırakmak için Araçlar>Seçenekler (veya Hata Ayıklama>Seçenekler) >Hata Ayıklama>Genel'e gidin ve ardından Yalnızca Benim Kodumu Etkinleştirseçiminin işaretini kaldırın.

Çıkarılan kaynaklar

Bir derlemeden ayıklanan kaynak kodu aşağıdaki sınırlamalara sahiptir:

  • Oluşturulan dosyaların adı ve konumu yapılandırılamaz.
  • Dosyalar geçicidir ve Visual Studio tarafından silinir.
  • Dosyalar tek bir klasöre yerleştirilir ve özgün kaynakların sahip olduğu herhangi bir klasör hiyerarşisi kullanılmaz.
  • Her dosya adı, dosyanın sağlama toplamı karma değerini içerir.

Oluşturulan kod yalnızca C#

Ayrıştırma yalnızca C# dilinde kaynak kod dosyaları oluşturur. Başka bir dilde dosya oluşturma seçeneği yoktur.