Yalnızca Kodum ile yalnızca kullanıcı kodunda hata ayıklama

Just My Code, sistem, çerçeve ve diğer kullanıcı dışı kodlara yapılan çağrıların üzerinden otomatik olarak geçen bir Visual Studio hata ayıklama özelliğidir. Çağrı Yığını penceresinde, Just My Code bu çağrıları [Dış Kod] çerçevelere daraltıyor.

Yalnızca Kodum .NET ve C++ projelerinde farklı çalışır.

Yalnızca Benim Kodum'un etkinleştirilmesi veya devre dışı bırakılması

Çoğu programlama dili için Just My Code varsayılan olarak etkindir.

  • Visual Studio'da Just My Code özelliğini etkinleştirmek veya devre dışı bırakmak için, Araçları>Seçenekleri (veya Hata Ayıklama >Seçenekleri) altında Hata Ayıklama>Genel>, Yalnızca Kodum Etkinleştirseçin veya seçimini kaldırın.

Seçenekler iletişim kutusunda Yalnızca Kodumu Etkinleştir seçeneğinin ekran görüntüsü.

Seçenekler iletişim kutusunda Yalnızca Kodumu Etkinleştir seçeneğinin ekran görüntüsü.

Not

Yalnızca Kodumu Etkinleştir, tüm dillerdeki tüm Visual Studio projeleri için geçerli olan genel bir ayardır.

Yalnızca Kodum hata ayıklaması

Hata ayıklama oturumu sırasında Modülleri penceresi, hata ayıklayıcının hangi kod modüllerini Kodum (kullanıcı kodu) olarak ele aldığı ve bunların sembol yükleme durumunu gösterir. Daha fazla bilgi için bkz. Hata ayıklayıcının uygulamanıza nasıl ekli olduğunuhakkında daha fazla bilgi edinin.

Modüller penceresinde kullanıcı kodunun ekran görüntüsü.

Modüller penceresinde kullanıcı kodunun ekran görüntüsü.

Çağrı Yığını veya Görevler penceresinde, Just My Code kullanıcı dışı kodu [External Code]etiketli gri açıklamalı bir kod çerçevesine daraltır.

Çağrı Yığını penceresinde Dış Kodun ekran görüntüsü.

Çağrı Yığını penceresinde Dış Kodun ekran görüntüsü.

İpucu

Modüller, Çağrı Yığını, Görevlergibi çoğu diğer hata ayıklama penceresini açmak için bir hata ayıklama oturumunda olmanız gerekir. Hata ayıklarken, Hata Ayıklama altında, Windows>açmak istediğiniz pencereleri seçin.

Daraltılmış bir [Dış Kod] çerçevesindeki kodu görüntülemek için Çağrı Yığını veya Görev penceresinde sağ tıklayın ve bağlam menüsünden Dış Kodu Göster seçeneğini seçin. Genişletilmiş dış kod satırları [Dış Kod ]çerçevesinin yerini alır.

Çağrı Yığını penceresinde Dış Kodu Göster'in ekran görüntüsü.

Çağrı Yığını penceresinde Dış Kodu Göster'in ekran görüntüsü.

Not

Dış Kodu Göster , kullanıcı tarafından açılan tüm dillerdeki tüm projeler için geçerli olan geçerli bir kullanıcı profil oluşturucu ayarıdır.

Çağrı Yığını penceresinde genişletilmiş bir dış kod satırına çift tıkladığınızda, kaynak kodda çağıran kod satırı yeşil renkle vurgulanır. Bulunmayan veya yüklenmeyen DLL'ler veya diğer modüller için, bir sembol veya kaynak bulunamadı sayfası açılabilir.

Visual Studio 2022 sürüm 17.7'den başlayarak, Çağrı Yığını penceresinde dış koda çift tıklayarak .NET kodunu otomatik olarak derleyebilirsiniz. Daha fazla bilgi için bkz. hata ayıklarken .NET derlemelerinden kaynak kodu oluşturma.

.NET Yalnızca Kodum

.NET projelerinde Just My Code, kullanıcı ve kullanıcı dışı kodları sınıflandırmak için sembol (.pdb) dosyalarını ve program iyileştirmelerini kullanır. .NET hata ayıklayıcısı iyileştirilmiş ikili dosyaları ve yüklenmeyen .pdb dosyalarını kullanıcı dışı kod olarak kabul eder.

Üç derleyici özniteliği, .NET hata ayıklayıcısının kullanıcı kodu olarak kabul etme durumunu da etkiler:

.NET hata ayıklayıcısı diğer tüm kodları kullanıcı kodu olarak kabul eder.

.NET hata ayıklaması sırasında:

  • Hata Ayıklama>Kullanıcı dışı kod adımlarında(veya F11) adımında bir sonraki kullanıcı kodu satırına geçin.
  • Hata Ayıklama>Kullanıcı dışı kod çalıştırmalarında (veya Shift +F11)bir sonraki kullanıcı kodu satırına geçin.

Başka kullanıcı kodu yoksa, hata ayıklama bitene, başka bir kesme noktasına ulaşana veya hata oluşturana kadar devam eder.

Hata ayıklayıcı kullanıcı dışı kodda durdurulursa (örneğin, Hata Ayıkla>Hepsini Durdur kullanıp kullanıcı dışı kodda duraklarsanız), Kaynak Yok penceresi görüntülenir. Ardından Hata Ayıklama>Adım komutunu kullanarak bir sonraki kullanıcı kodu satırına gidebilirsiniz.

Kullanıcı olmayan kodda işlenmeyen bir özel durum oluşursa, hata ayıklayıcı özel durumun oluşturulduğu kullanıcı kodu satırında sonlandırır.

Özel durum için ilk şans istisnaları etkinleştirilirse, kullanıcı kodunu çağıran satır kaynak kodda yeşil renkle vurgulanır. Çağrı Yığını penceresinde [Dış Kod] etiketli açıklamalı çerçeve görüntülenir.

C++ Yalnızca Kodum

Visual Studio 2017 sürüm 15.8'den itibaren, kod adım adım ilerletme için Kendi Kodlarım da desteklenir. Bu özellik, ayrıca /JMC (Yalnızca kendi kodumun hata ayıklaması) derleyici anahtarının kullanılmasını gerektirir. Anahtar, C++ projelerinde varsayılan olarak etkindir. Just My Code'da Çağrı Yığını penceresi ve çağrı yığını desteği için /JMC anahtarı gerekli değildir.

Kullanıcı kodu olarak sınıflandırılmak için, kullanıcı kodunu içeren ikili dosya için PDB hata ayıklayıcı tarafından yüklenmelidir (yükleme durumunu denetlemek için Modülleri penceresini kullanın).

Çağrı Yığını penceresinde olduğu gibi çağrı yığını davranışı için C++ dilindeki Just My Code işlevi yalnızca bu işlevleri kullanıcı dışı kodkabul eder:

  • Sembol dosyasında kaynak bilgileri kaldırılmış olan işlevler.
  • Sembol dosyalarının yığın çerçevesine karşılık gelen kaynak dosya olmadığını gösterdiği işlevler.
  • belirtilen işlevler, %VsInstallDirectory%\Common7\Packages\Debugger\Visualizers klasöründeki *.natjmc dosyalarında yer alır.

Kod adımlama davranışında, C++ dilinde Yalnızca Kodum yalnızca bu işlevlerin kullanıcı dışı kodolduğunu kabul eder.

  • Hata ayıklayıcıya karşılık gelen PDB dosyasının yüklenmediği işlevler.
  • belirtilen işlevler, %VsInstallDirectory%\Common7\Packages\Debugger\Visualizers klasöründeki *.natjmc dosyalarında.

Not

Yalnızca Kodum'da kod adımlama desteği için, Visual Studio 15.8 Preview 3 veya sonraki sürümlerindeki MSVC derleyicileri kullanılarak C++ kodu derlenmelidir ve /JMC derleyici anahtarı etkinleştirilmelidir (varsayılan olarak etkindir). Ek ayrıntılar için bkz. C++ çağrı yığınını ve kod adımlama davranışını özelleştirme ve bu blog gönderisi. Eski bir derleyici kullanılarak derlenen kodlar için .natstepfilter dosyaları, Yalnızca Kodum'dan bağımsız olan kod adımlama özelliğini özelleştirmenin tek yoludur. bkz. C++ adımlama davranışını özelleştirme.

C++ hata ayıklaması sırasında kullanıcı dışı kod varsayılan olarak atlanır. C++ hata ayıklaması sırasında:

  • Hata Ayıklama>İçine Gir (veya F11) kullanıcı dışı kod adımlarını geçer veya kullanıcı kodunun bir sonraki satırına çalışır, eğer İçine Gir kullanıcı dışı koddan çağrılırsa.
  • Hata Ayıklama>Dışına Çık (veya Shift + F11 ile+), kullanıcı dışı kodda bir sonraki kullanıcı kodu satırına (geçerli yığın çerçevesinin dışında) çalışır.

Başka kullanıcı kodu yoksa, hata ayıklama bitene, başka bir kesme noktasına ulaşana veya hata oluşturana kadar devam eder.

Hata ayıklayıcısı kullanıcı dışı kodda bozulursa (örneğin, Hata Ayıklama >Tüm Kesme ve kullanıcı olmayan kodda duraklatmakullanırsanız), adımlama kullanıcı dışı kodda devam eder.

Debugger bir özel durumla karşılaşırsa, kullanıcı veya kullanıcı dışı kodda olsun, özel durumda durur. Kullanıcı tarafından işlenmeyen seçenekler, Özel Durum Ayarları iletişim kutusunda yoksayılır.

C++ çağrı yığınını ve kod adımlama davranışını özelleştirme

C++ projeleri için çağrı yığını penceresinin kullanıcı dışı kod olarak işlediği modülleri, kaynak dosyaları ve işlevleri *.natjmc dosyalarında belirterek belirtebilirsiniz. Bu özelleştirme, en son derleyiciyi kullanıyorsanız kod adımlamaya da uygulanır (bkz. C++ Just My Code).

  • Visual Studio makinesinin tüm kullanıcıları için kullanıcı dışı kod belirtmek için .natjmc dosyasını %VsInstallDirectory%\Common7\Packages\Debugger\Visualizers klasörüne ekleyin.
  • Tek bir kullanıcının kullanıcı dışı kodunu belirtmek için .natjmc dosyasını %USERPROFILE%\Belgelerim\<Visual Studio sürümü>\Visualizers klasörüne ekleyin.

.natjmc dosyası şu söz dizimine sahip bir XML dosyasıdır:

<?xml version="1.0" encoding="utf-8"?>
<NonUserCode xmlns="http://schemas.microsoft.com/vstudio/debugger/jmc/2015">

  <!-- Modules -->
  <Module Name="ModuleSpec" />
  <Module Name="ModuleSpec" Company="CompanyName" />

  <!-- Files -->
  <File Name="FileSpec"/>

  <!-- Functions -->
  <Function Name="FunctionSpec" />
  <Function Name="FunctionSpec" Module ="ModuleSpec" />
  <Function Name="FunctionSpec" Module ="ModuleSpec" ExceptionImplementation="true" />

</NonUserCode>

Module öğesi öznitelikleri

Öznitelik Açıklama
Name Gerekli. Modülün veya modüllerin tam yolu. Windows joker karakterlerini ? (sıfır veya bir karakter) ve * (sıfır veya daha fazla karakter) kullanabilirsiniz. Mesela

<Module Name="?:\3rdParty\UtilLibs\*" />

hata ayıklayıcıya herhangi bir sürücüdeki \3rdParty\UtilLibs tüm modülleri dış kod olarak ele almalarını söyler.
Company Opsiyonel. Yürütülebilir dosyaya eklenmiş modülü yayımlayan şirketin adı. Modülleri ayırt etmek için bu özniteliği kullanabilirsiniz.

Dosya öğesi öznitelikleri

Öznitelik Açıklama
Name Gerekli. Dış kod olarak ele almak için kaynak dosyanın veya dosyaların tam yolu. Yolu belirtirken ? ve * Windows joker karakterlerini kullanabilirsiniz.

İşlev öğesi öznitelikleri

Öznitelik Açıklama
Name Gerekli. Harici kod olarak değerlendirilecek işlevin tam kalifiye adı. ou, yolu belirtirken ? ve * Windows joker karakterlerini kullanabilir.
Module Opsiyonel. İşlevi içeren modülün adı veya tam yolu. Aynı ada sahip işlevleri ayırt etmek için bu özniteliği kullanabilirsiniz.
ExceptionImplementation trueolarak ayarlandığında, çağrı yığını bu işlev yerine özel durum oluşturan işlevi görüntüler.

Sadece Benim Kodum ayarlarından bağımsız olarak C++ adımlama davranışını özelleştirme

C++ projelerinde, *.natstepfilter dosyalarında NoStepInto işlevleri olarak listeleyerek devredecek işlevleri belirtebilirsiniz. *.natstepfilter dosyalarında listelenen işlevler Yalnızca Kodum ayarlarına bağımlı değildir. NoStepInto işlevi, hata ayıklayıcıya, bazı StepInto işlevlerini veya diğer kullanıcı kodunu çağırsa bile işlevin üzerine adım atmasını söyler. .natjmc listelenen işlevlerden farklı olarak, hata ayıklayıcı NoStepInto işlevinin içindeki kullanıcı kodunun ilk satırına girer.

  • Tüm yerel Visual Studio kullanıcıları için kullanıcı dışı kod belirtmek için .natstepfilter dosyasını %VsInstallDirectory%\Common7\Packages\Debugger\Visualizers klasörüne ekleyin.
  • Tek bir kullanıcının kullanıcı dışı kodunu belirtmek için .natstepfilter dosyasını %USERPROFILE%\Belgelerim\<Visual Studio sürümü>\Visualizers klasörüne ekleyin.

Dikkat

Bazı üçüncü taraf uzantıları .natstepfilter işlevselliğini devre dışı bırakabilir.

.natstepfilter dosyası şu söz dizimine sahip bir XML dosyasıdır:

<?xml version="1.0" encoding="utf-8"?>
<StepFilter xmlns="http://schemas.microsoft.com/vstudio/debugger/natstepfilter/2010">
    <Function>
        <Name>FunctionSpec</Name>
        <Action>StepAction</Action>
    </Function>
    <Function>
        <Name>FunctionSpec</Name>
        <Module>ModuleSpec</Module>
        <Action>StepAction</Action>
    </Function>
</StepFilter>

Öğe Açıklama
Function Gerekli. Bir veya daha fazla işlevi kullanıcı dışı işlevler olarak belirtir.
Name Gerekli. Eşleştirilecek tam işlev adını belirten ECMA-262 formatlı düzenli ifade. Örneğin:

<Name>MyNS::MyClass::.*</Name>

hata ayıklayıcıya MyNS::MyClass içindeki tüm yöntemlerin kullanıcı dışı kod olarak kabul edileceğini bildirir. Eşleşme büyük/küçük harfe duyarlıdır.
Module Opsiyonel. İşlevi içeren modülün tam yolunu belirten ECMA-262 biçimli normal ifade. Eşleşme büyük-küçük harfe duyarlı değil.
Action Gerekli. Bu büyük/küçük harfe duyarlı değerlerden biri:

NoStepInto - hata ayıklayıcıya işlevin üzerinden atlamasını bildirir.
StepInto - hata ayıklayıcıya, eşleşen işlev için diğer herhangi bir NoStepInto'i geçersiz kılarak, işlevin içine adım atmasını söyler.

.natstepfilter ve .natjmc dosyaları hakkında ek bilgi

  • Visual Studio 2022 sürüm 17.6'dan başlayarak, .natjmc ve .natstepfilter dosyalarını doğrudan çözüme veya projeye ekleyebilirsiniz.

  • .natstepfilter ve .natjmc dosyalarındaki söz dizimi hataları hata ayıklayıcının Çıkış penceresinde bildirilmez.

  • .natvis dosyalarının aksine .natstepfilter ve .natjmc dosyaları çalışma sırasında otomatik olarak yeniden yüklenmez. Bunun yerine, bu dosyalar hata ayıklama oturumunun başlangıcına yakın bir yerde yeniden yüklenir.

  • Şablon işlevleri için addaki &lt;.*&gt; veya &lt;.* kullanımı yararlı olabilir.

JavaScript Yalnızca Kodum

Visual Studio 2022'deki .esproj projeleri için Visual Studio Code, hata ayıklayıcıyı yapılandırmak ve özelleştirmek için bir launch.json dosyası kullanır. launch.json bir hata ayıklayıcısı yapılandırma dosyasıdır.

Visual Studio, hata ayıklayıcıyı yalnızca kullanıcı koduna ekler. .esproj projeleri için, launch.jsoniçindeki skipFiles ayarını kullanarak Visual Studio'da kullanıcı kodunu (Just My Code ayarları) yapılandırabilirsiniz. Bu ayar, VS Code'daki launch.json ayarlarıyla aynı şekilde çalışır. skipFileshakkında daha fazla bilgi için bkz: İlgisiz Kodu Atlama.