Visual Studio hata ayıklayıcısında simge (.pdb) ve kaynak dosyaları belirtme (C#, C++, Visual Basic, F#)

Sembol dosyaları olarak da adlandırılan program veritabanı (.pdb) dosyaları, projenizin kaynak kodundaki tanımlayıcıları ve deyimleri derlenmiş uygulamalardaki ilgili tanımlayıcılarla ve yönergelerle eşler. Bu eşleme dosyaları hata ayıklayıcıyı kaynak kodunuzla ilişkilendirerek hata ayıklamayı etkinleştirir.

Visual Studio IDE'den standart Hata Ayıklama derleme yapılandırmasıyla bir proje oluşturduğunuzda, derleyici uygun sembol dosyalarını oluşturur. Bu makalede, IDE'de sembol dosyalarının nasıl yönetileceğini açıklar, örneğin:

Sembol dosyalarının ayrıntılı açıklaması için aşağıdakilere bakın:

Sembol dosyaları nasıl çalışır?

.pdb dosyası, uygulamanızın Hata Ayıklama yapılandırmasının artımlı olarak bağlanmasına olanak tanıyan hata ayıklama ve proje durumu bilgilerini tutar. Visual Studio hata ayıklayıcısı hata ayıklarken iki önemli bilgi parçasını belirlemek için .pdb dosyalarını kullanır:

  • Visual Studio IDE'de görüntülenecek kaynak dosya adı ve satır numarası.
  • Uygulamanın bir kesme noktası için durdurulacağı yer.

Sembol dosyaları ayrıca kaynak dosyaların konumunu ve isteğe bağlı olarak bunları almak için sunucuyu gösterir.

Hata ayıklayıcı yalnızca bir uygulama oluşturulduğunda oluşturulan .pdb dosyalarıyla (yani özgün .pdb dosyaları veya kopyaları) tam olarak eşleşen .pdb dosyalarını yükler. Kodun kendisi değişmemiş olsa bile uygulamaların düzeni değişebileceğinden, tam olarak bu yineleme gereklidir. Daha fazla bilgi için bkz. Visual Studio neden hata ayıklayıcısı sembol dosyalarının birlikte oluşturuldukları ikili dosyalarla tam olarak eşleşmesini gerektiriyor?

İpucu

Projenizin çağırdığı Windows kodu veya üçüncü taraf kodu gibi proje kaynak kodunuzun dışındaki kodlarda hata ayıklamak için, dış kodun .pdb dosyalarının (ve isteğe bağlı olarak kaynak dosyaların) konumunu belirtmeniz gerekir. Bu, uygulamanızdaki derlemelerle tam olarak eşleşmelidir.

Hata ayıklayıcı sembolleri arar

Visual Studio IDE'de bir projede hata ayıkladığınızda, hata ayıklayıcı varsayılan olarak bulabileceği sembol dosyalarını otomatik olarak yükler.

Not

Uzak bir cihazda yönetilen kodda hata ayıklarken, tüm sembol dosyalarının yerel makinede veya hata ayıklayıcı seçeneklerinde belirtilen bir konumda bulunması gerekir.

Hata ayıklayıcısı aşağıdaki konumlarda sembol dosyalarını arar:

  1. Proje klasörü.

  2. DLL veya yürütülebilir dosya (.exe) içinde belirtilen konum.

    Varsayılan olarak, bilgisayarınızda bir DLL veya .exe dosyası derlediyseniz, bağlayıcı ilişkili .pdb dosyasının tam yolunu ve dosya adını DLL veya .exe dosyasına yerleştirir. Hata ayıklayıcı, sembol dosyasının bu konumda mevcut olup olmadığını denetler.

  3. DLL veya .exe dosyasıyla aynı klasör.

  4. Sembol dosyaları için hata ayıklayıcı seçeneklerinde belirtilen tüm konumlar. Simge konumlarını eklemek ve etkinleştirmek için bkz . Sembol konumlarını ve yükleme seçeneklerini yapılandırma.

    • Herhangi bir yerel simge önbellek klasörü.

    • Seçiliyse Microsoft Sembol Sunucuları gibi belirtilen ağ, internet veya yerel simge sunucuları ve konumları. Visual Studio, protokolü uygulayan symsrv sembol sunucularından hata ayıklama sembol dosyalarını indirebilir. Visual Studio Team Foundation Server ve Windows için Hata Ayıklama Araçları, sembol sunucularını kullanabilen iki araçtır.

      Kullanabileceğiniz sembol sunucuları şunlardır:

      Genel Microsoft Sembol Sunucuları: Sistem DLL'sine veya üçüncü taraf kitaplığına yapılan çağrı sırasında oluşan bir kilitlenmenin hatalarını ayıklamak için genellikle sistem .pdb dosyalarına ihtiyacınız vardır. Sistem .pdb dosyaları Windows DLL'leri, .exe dosyaları ve cihaz sürücüleri için simgeler içerir. Windows işletim sistemleri, MDAC, IIS, ISA ve .NET için sembolleri genel Microsoft Sembol Sunucularından alabilirsiniz.

      İç ağdaki veya yerel makinenizdeki sembol sunucuları: Ekibiniz veya şirketiniz kendi ürünleriniz için ve dış kaynaklardan simgeler için önbellek olarak sembol sunucuları oluşturabilir. Kendi makineniz üzerinde bir sembol sunucusu olabilir.

      Üçüncü taraf sembol sunucuları: Windows uygulamalarının ve kitaplıklarının üçüncü taraf sağlayıcıları internet üzerindeki sembol sunucusuna erişim sağlayabilir.

      Uyarı

      Genel Microsoft Sembol Sunucuları dışında bir sembol sunucusu kullanıyorsanız, sembol sunucusunun ve yolunun güvenilir olduğundan emin olun. Sembol dosyaları rastgele yürütülebilir kod içerebileceğinden, güvenlik tehditlerine maruz kalabilirsiniz.

Sembol dosyalarının konumunu ve yükleme seçeneklerini yapılandırma

Hata ayıklayıcı varsayılan olarak çeşitli konumlarda sembolleri denetler. Bkz . Hata ayıklayıcı sembolleri nerede arar?

Araçlar>Seçenekler>Hata Ayıklama>Simgeleri sayfasında şunları yapabilirsiniz:

  • Sembol dosyaları için arama yollarını belirtin ve seçin.
  • Microsoft, Windows veya üçüncü taraf bileşenleri için sembol sunucuları belirtin.
  • Hata ayıklayıcının sembolleri otomatik olarak yüklemesini istediğiniz veya istemediğiniz modülleri belirtin.
  • Etkin olarak hata ayıklarken bu ayarları değiştirin. Bkz . Hata ayıklarken sembolleri yükleme.

Sembol konumlarını ve yükleme seçeneklerini belirtmek için:

  1. Visual Studio'da Araçlar>Seçenekler>Hata Ayıklama Sembolleri'ni> (veya Hata Ayıklama>Seçenekleri>Simgeleri) açın.

  2. Sembol dosyası (.pdb) konumları altında,

    • Microsoft Sembol Sunucuları'nı veya NuGet.org Sembol Sunucusu'nu kullanmak için onay kutusunu seçin.

    • Yeni bir sembol sunucusu konumu eklemek için

      1. Araç çubuğundaki + simgeyi seçin.
      2. Simge sunucusunun URL'sini (http), ağ paylaşımını veya yerel yolunu ya da metin alanına sembol konumunu yazın. Deyimi tamamlama doğru biçimi bulmanıza yardımcı olur.

      Tools - Options - Debugging - Symbols page

      Tools - Options - Debugging - Symbols page

      Not

      Yalnızca belirtilen klasörde arama yapılır. Aramak istediğiniz alt klasörler için girdiler eklemeniz gerekir.

    • Yeni bir Azure DevOps Sembol Sunucusu konumu eklemek için:

      1. Araç çubuğundaki Tools/ Options/ Debugging/Symbols new server icon simgeyi seçin.

      2. Azure DevOps Sembol Sunucusu'na Bağlan iletişim kutusunda, kullanılabilir simge sunucularından birini seçin ve Bağlan seçin.

        Ek bilgi için bkz . Azure Artifacts sembol sunucusu ekleme.

    • Sembol konumlarının yükleme sırasını değiştirmek için Ctrl+Yukarı ve Ctrl+Aşağı veya Yukarı ve Aşağı ok simgelerini kullanın.

    • URL'yi veya yolu düzenlemek için, girdiye çift tıklayın veya girdiyi seçip F2 tuşuna basın.

    • Bir girdiyi kaldırmak için girdiyi seçin ve ardından simgeyi - seçin.

  3. (İsteğe bağlı) Sembol yükleme performansını geliştirmek için, Bu dizindeki Önbellek simgeleri'nin altına sembol sunucularının sembolleri kopyalayabileceğiniz yerel bir klasör yolu yazın.

    Not

    Yerel simge önbelleğini C:\Windows veya alt klasör gibi korumalı bir klasöre yerleştirmeyin. Bunun yerine okuma-yazma klasörü kullanın.

    Not

    C++ projeleri için, ortam değişkenini ayarladıysanız_NT_SYMBOL_PATH, bu dizindeki Önbellek simgeleri altında ayarlanan değeri geçersiz kılar.

  4. Hata ayıklayıcının başlatıldığında Simge dosyası (.pdb) konumlarından yüklemesini istediğiniz modülleri belirtin.

    • Hariç tutulmadığı sürece tüm modülleri yükle (varsayılan) seçeneğini belirleyerek özel olarak dışladığınız modüller dışında sembol dosyası konumundaki tüm modüllerin tüm simgelerini yükleyin. Belirli modülleri dışlamak için Dışlanan modülleri belirtin'i seçin, simgeyi + seçin, hariç tutulacak modüllerin adlarını yazın ve Tamam'ı seçin.

    • Simge dosyası konumlarından yalnızca belirttiğiniz modülleri yüklemek için Yalnızca belirtilen modülleri yükle'yi seçin. Dahil edilen modülleri belirtin'i seçin, simgeyi + seçin, eklenecek modüllerin adlarını yazın ve ardından Tamam'ı seçin. Diğer modüllerin sembol dosyaları yüklenmez.

  5. Tamam'ı seçin.

Hata ayıklama için diğer simge seçenekleri

Araçlar>Seçenekler Hata Ayıklama Genel (veya Hata Ayıklama>>Seçenekleri>>Genel):

  • Dll dışarı aktarmalarını yükleme (Yalnızca yerel)

    C/C++ için DLL dışarı aktarma tablolarını yükler. Ayrıntılar için bkz . DLL dışarı aktarma tabloları. DLL dışarı aktarma bilgilerinin okunması biraz ek yük gerektirdiğinden, dışarı aktarma tablolarının yüklenmesi varsayılan olarak kapalıdır. C/C++ derleme komut satırında da kullanabilirsiniz dumpbin /exports .

  • Kaynak kullanılamıyorsa adres düzeyinde hata ayıklamayı etkinleştirme ve Ayrıştırma gösterme

    Kaynak veya sembol dosyaları bulunamadığında her zaman ayrıştırma işlemini gösterir.

    Options / Debugging / General disassembly options

  • Kaynak sunucu desteğini etkinleştirme

    Yerel makinede kaynak kodu olmadığında veya .pdb dosyası kaynak kodla eşleşmediğinde bir uygulamada hata ayıklamaya yardımcı olması için Kaynak Sunucu kullanır. Kaynak Sunucu dosya isteklerini alır ve kaynak denetiminden gerçek dosyaları döndürür. Kaynak Sunucu, uygulamanın .pdb dosyasını okumak için srcsrv.dll adlı bir DLL kullanarak çalışır. .pdb dosyası, kaynak kod deposuna yönelik işaretçilerin yanı sıra depodan kaynak kodu almak için kullanılan komutları içerir.

    srcsrv.ini adlı bir dosyada izin verilen komutları listeleyerek srcsrv.dll dosyasının uygulamanın .pdb dosyasından yürütebileceği komutları sınırlayabilirsiniz. srcsrv.ini dosyasını srcsrv.dll ve devenv.exe ile aynı klasöre yerleştirin.

    Önemli

    Rastgele komutlar bir uygulamanın .pdb dosyasına eklenebilir, bu nedenle srcsrv.ini dosyasına yalnızca yürütmek istediğiniz komutları yerleştirdiğinizden emin olun. srcsvr.ini dosyasında olmayan bir komut yürütme girişimi bir onay iletişim kutusunun görünmesine neden olur. Daha fazla bilgi için bkz . Güvenlik Uyarısı: Hata Ayıklayıcı Güvenilmeyen Komut Yürütmeli.

    Komut parametrelerinde bir doğrulama yapılmadı, bu nedenle güvenilir komutlara dikkat edin. Örneğin, srcsrv.ini'nizde cmd.exe dosyasını listelediyseniz, kötü amaçlı bir kullanıcı cmd.exe dosyasında bunu tehlikeli hale getirecek parametreler belirtebilir.

    Bu öğeyi ve istediğiniz alt öğeleri seçin. Kısmi güven derlemeleri için kaynak sunucuya izin ver (Yalnızca yönetilen) ve Her zaman sorulmadan güvenilmeyen kaynak sunucu komutlarını çalıştırma güvenlik risklerini artırabilir.

    Enable source server options

Derleyici simgesi seçenekleri

Visual Studio IDE'den standart Hata Ayıklama derleme yapılandırmasıyla bir proje oluşturduğunuzda, C++ ve yönetilen derleyiciler kodunuz için uygun sembol dosyalarını oluşturur. Kodda derleyici seçeneklerini de ayarlayabilirsiniz.

Visual Studio'da derleme yapılandırmalarınızın derleyici seçeneklerini ayarlamak için bkz . Hata ayıklama ve yayın yapılandırmalarını ayarlama.

.NET seçenekleri

.pdb dosyası oluşturmak için /debug ile derleme. /debug:full veya /debug:pdbonly ile uygulama oluşturabilirsiniz. /debug:full ile derleme, hata ayıklanabilir kod oluşturur. /debug:pdbonly ile derleme .pdb dosyaları oluşturur, ancak JIT derleyicisine hata ayıklama bilgilerinin kullanılabilir olduğunu bildiren dosyasını oluşturmazDebuggableAttribute. Hata ayıklanabilir olmasını istemediğiniz bir yayın derlemesi için .pdb dosyaları oluşturmak istiyorsanız /debug:pdbonly kullanın. Daha fazla bilgi için bkz . /debug (C# derleyici seçenekleri) veya /debug (Visual Basic).

C/C++ seçenekleri

  • VC<x.pdb> ve <project.pdb> dosyaları

    /ZI veya /Zi ile derleme yaptığınızda C/C++ için bir .pdb dosyası oluşturulur. Visual C++'da /Fd seçeneği derleyicinin oluşturduğu .pdb dosyasını adlandırmaktadır. Visual Studio'da IDE kullanarak bir proje oluşturduğunuzda, /Fd seçeneği project.pdb> adlı <bir .pdb dosyası oluşturacak şekilde ayarlanır.

    C/C++ uygulamanızı bir derleme dosyası kullanarak oluşturursanız ve bir dosya adı belirtmek için /Fd kullanmadan /ZI veya /Zi belirtirseniz, derleyici iki .pdb dosyası oluşturur:

    • VC<x.pdb>; burada< x>, Microsoft C++ derleyicisinin sürümünü temsil eder, örneğin VC11.pdb

      VC<x.pdb> dosyası, tek tek nesne dosyaları için tüm hata ayıklama bilgilerini depolar ve proje derleme dosyasıyla aynı dizinde bulunur. Her nesne dosyası oluşturduğunuzda, C/C++ derleyicisi hata ayıklama bilgilerini VC<x.pdb> ile birleştirir. Bu nedenle, her kaynak dosya windows.h> gibi <ortak üst bilgi dosyaları içerse bile, bu üst bilgilerden tür tanımları her nesne dosyasında değil yalnızca bir kez depolanır. Eklenen bilgiler tür bilgilerini içerir, ancak işlev tanımları gibi simge bilgilerini içermez.

    • <project.pdb>

      <project.pdb> dosyası, projenin .exe dosyası için tüm hata ayıklama bilgilerini depolar ve \debug alt dizininde bulunur. <project.pdb> dosyası, yalnızca VC<x.pdb> dosyasında bulunan tür bilgilerini değil işlev prototipleri de dahil olmak üzere tam hata ayıklama bilgilerini içerir.

    Hem VC<x.pdb> hem de <project.pdb> dosyaları artımlı güncelleştirmelere izin verir. Bağlayıcı, .pdb dosyalarının yolunu da oluşturduğu .exe veya .dll dosyasına ekler.

  • DLL dışarı aktarma tabloları

    DLL'nin dışarı aktarma tablosunda bulunan simgeleri görmek için kullanın dumpbin /exports . DLL dışarı aktarma tablolarındaki sembolik bilgiler, Windows iletileri, Windows yordamları (WindowProcs), COM nesneleri, hazırlama veya simge içermeyen herhangi bir DLL ile çalışmak için yararlı olabilir. Semboller tüm 32-bit sistem DLL için kullanılabilir. Aramalar geçerli işlev en üstte (en yoğun şekilde iç içe geçmiş) olacak şekilde arama sırasıyla listelenir.

    Çıkışı okuyarak dumpbin /exports alfasayısal olmayan karakterler de dahil olmak üzere tam işlev adlarını görebilirsiniz. İşlev adlarının hata ayıklayıcının başka bir yerinde kesilebileceği için işlev adlarının tam olarak görülmesi, işlevde kesme noktası ayarlamak için yararlıdır. Daha fazla bilgi için bkz . dumpbin /exports.

Web uygulamaları

ASP.NET uygulamanızın web.config dosyasını hata ayıklama moduna ayarlayın. Hata ayıklama modu ASP.NET'in dinamik olarak oluşturulan dosyalar için sembol oluşturmasına neden olur ve hata ayıklayıcının ASP.NET uygulamasına eklemesine olanak tanır. Projenizi web projeleri şablonundan oluşturduysanız, hata ayıklamaya başladığınızda Visual Studio bunu otomatik olarak ayarlar.

Hata ayıklama sırasında sembolleri yükleme

Hata ayıklama sırasında sembolleri yüklemek veya simge seçeneklerini değiştirmek için Modüller, Çağrı Yığını, Yerel Ayarlar, Otomatikler veya herhangi bir İzleme penceresini kullanabilirsiniz. Daha fazla bilgi için bkz . Hata ayıklayıcının uygulamanıza nasıl ekli olduğu hakkında daha fazla bilgi edinin.

Modüller penceresinde sembollerle çalışma

Hata ayıklama sırasında Modüller penceresinde hata ayıklayıcının kullanıcı kodu veya Kodum olarak değerlendirdiği kod modülleri ve bunların sembol yükleme durumu gösterilir. Ayrıca Modüller penceresinde sembol yükleme durumunu izleyebilir, sembolleri yükleyebilir ve simge seçeneklerini değiştirebilirsiniz.

Hata ayıklama sırasında sembol konumlarını veya seçeneklerini izlemek veya değiştirmek için:

  1. Hata ayıklarken Modüller penceresini açmak için Windows>Modüllerinde Hata Ayıkla'yı>seçin (veya Ctrl + Alt + U tuşlarına basın).
  2. Modüller penceresinde Simge Durumu veya Simge Dosyası üst bilgilerine veya herhangi bir modüle sağ tıklayın.
  3. Bağlam menüsünde aşağıdaki seçeneklerden birini belirtin:
Seçenek Açıklama
Sembolleri Yükle Atlanmış, bulunamadı veya yüklenmemiş simgeleri olan modüller için görüntülenir. Seçenekler>Hata Ayıklama>Simgeleri sayfasında belirtilen konumlardan sembolleri yüklemeyi dener. Simge dosyası bulunamazsa veya yüklenmezse, arama için yeni bir konum belirtebilmeniz için Dosya Gezgini başlatır.
Sembol Yükleme Bilgileri Yüklenen simge dosyasının konumunu veya hata ayıklayıcı dosyayı bulamazsa aranan konumları gösterir.
Simge Ayarlar Simge konumlarını düzenleyebileceğiniz ve ekleyebileceğiniz Seçenekler>Hata Ayıklama>Simgeleri sayfasını açar.
Her Zaman Otomatik Olarak Yükle Seçilen simge dosyasını hata ayıklayıcı tarafından otomatik olarak yüklenen dosyalar listesine ekler.

Simge Yüklenmedi/Kaynak Yüklenmedi sayfalarını kullanma

Hata ayıklayıcının simge veya kaynak dosyaları olmayan koda girmesinin birkaç yolu vardır:

  • Koda adımlayın.
  • Bir kesme noktasından veya özel durumdan koda bölün.
  • Farklı bir iş parçacığına geçin.
  • Çağrı Yığını penceresinde bir çerçeveye çift tıklayarak yığın çerçevesini değiştirin.

Bu durumda, hata ayıklayıcı gerekli sembolleri veya kaynağı bulup yüklemenize yardımcı olmak için Simge Yüklenmedi veya Kaynak Yüklenmedi sayfalarını görüntüler.

No Symbols Loaded page

Eksik simgeleri bulmaya ve yüklemeye yardımcı olması için Simge Yüklenmedi belge sayfasını kullanmak için:

  • Arama yolunu değiştirmek için seçilmemiş bir yol seçin veya Yeni Yol veya Yeni VSTS Yolu'nu seçin ve yeni bir yol girin veya seçin. Yolları yeniden aramak için Yükle'yi seçin ve bulunursa sembol dosyasını yükleyin.
  • Simge seçeneklerini geçersiz kılmak ve arama yollarını yeniden denemek için Gözat'ı seçin ve yürütülebilir adı> bulun<. Simge dosyası bulunursa yüklenir veya sembol dosyasını el ile seçebilmeniz için Dosya Gezgini açılır.
  • Davranışı yapılandırmak üzere sembol ayarları sayfasını açmak için Simge Ayarlar Değiştir'i seçin (veya Seçenekler>Hata Ayıklama>Simgeleri'ni seçin).
  • (Gelişmiş) Ayrıştırma işlemini bir kez yeni bir pencerede göstermek için Ayrıştırılmış görünümü seçin veya Seçenekler iletişim kutusunu seçerek kaynak veya sembol dosyaları bulunamadığında ayrıştırma seçeneğini her zaman gösterecek şekilde ayarlayın. Daha fazla bilgi için bkz . Ayrıştırma kodunu görüntüleme.
  • Aranan konumları ve sonucu göstermek için Sembol yükleme bilgileri'ni genişletin.
  • C# kodu için, Kaynak kodu Yüklenmemiş veya Kaynak Yüklenmemiş sayfalarından kaynak kodun kodunu çözmeyi de seçebilirsiniz.

Hata ayıklayıcı, seçeneklerden birini yürütürken .pdb dosyasını bulursa ve .pdb dosyasındaki bilgileri kullanarak kaynak dosyayı alabilirse, kaynağı görüntüler. Aksi takdirde, sorunu çözebilecek eylemlerin bağlantılarını içeren, sorunu açıklayan Bir Kaynak Yüklenmedi sayfası görüntüler.

Bir çözüme kaynak dosya arama yolları eklemek için:

Hata ayıklayıcının kaynak dosyaları arayabileceği konumları belirtebilir ve belirli dosyaları aramanın dışında tutabilirsiniz.

  1. Çözüm Gezgini çözümü seçin ve özellikler simgesini seçin, Alt+Enter tuşuna basın veya sağ tıklayıp Özellikler'i seçin.

  2. Kaynak Dosyalarda Hata Ayıkla'ya tıklayın.

    Debug source files page

  3. Kaynak kodu içeren dizinler'in altında, aranacak kaynak kodu konumlarını yazın veya seçin. Daha fazla konum eklemek için Yeni Çizgi simgesini, yeniden sıralamak için Yukarı ve Aşağı ok simgelerini veya silmek için X simgesini kullanın.

    Not

    Hata ayıklayıcı yalnızca belirtilen dizini arar. Arama yapmak istediğiniz alt dizinler için girdi eklemeniz gerekir.

  4. Bu kaynak dosyaları arama'nın altında, aramanın dışında tutulacak kaynak dosyaların adlarını yazın.

  5. Tamam'ı veya Uygula'yı seçin.