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

Just My Code , sisteme, çerçeveye 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çevelerine 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 Yalnızca Kodum özelliğini etkinleştirmek veya devre dışı bırakmak için, Araçlar>Seçenekleri (veya Hata Ayıklama>Seçenekleri) >Hata Ayıklama>Genel'in altında Yalnızca Kodumu Etkinleştir'i seçin veya seçimini kaldırın.

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

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

Not

Just My Code'un etkinleştirilmesi, tüm dillerdeki tüm Visual Studio projeleri için geçerli olan genel bir ayardır.

Yalnızca Kendi Kodumda hata ayıklama

Bir 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ığı 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ğu hakkında daha fazla bilgi edinin.

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

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

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

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

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

İpucu

Modülleri, Çağrı Yığınını, Görevleri veya diğer hata ayıklama pencerelerinin çoğunu açmak için bir hata ayıklama oturumunda olmanız gerekir. Hata ayıklarken, Windows Hatalarını Ayıkla>altında, açmak istediğiniz pencereleri seçin.

Daraltılmış [Dış Kod] çerçevesindeki kodu görüntülemek için Çağrı Yığını veya Görev penceresine sağ tıklayın ve bağlam menüsünden Dış Kodu Göster'i 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ıklanması, kaynak kodda çağıran kod satırını yeşil renkle vurgular. DLL'ler veya bulunmayan veya yüklenmeyen diğer modüller için bir simge 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ıklama sırasında .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:

  • Kullanıcı olmayan kod adımlarında, kodun bir sonraki kullanıcı kodu satırına kadar adım adım hatasını ayıklayın>.
  • Kullanıcı dışı kodda Hata Ayıklama>Adımı (veya Shift+F11) bir sonraki kullanıcı kodu satırına ç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ünü Kes'i kullanır ve kullanıcı olmayan kodda duraklatırsanız), Kaynak Yok penceresi görüntülenir. Ardından, kullanıcı kodunun sonraki satırına gitmek için Hata Ayıklama>Adımı komutunu kullanabilirsiniz.

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 özel durumları etkinleştirilirse, çağıran kullanıcı kodu satırı kaynak kodda yeşil olarak 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 başlayarak, kod adımlama için Yalnızca Kodum da desteklenir. Bu özellik ayrıca /JMC (Yalnızca kod hata ayıklamam) derleyici anahtarının kullanılmasını gerektirir. Anahtar, C++ projelerinde varsayılan olarak etkindir. Just My Code'daki Ç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 (bunu denetlemek için Modüller 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ışı kod olarak kabul 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.
  • %VsInstallDirectory%\Common7\Packages\Debugger\Visualizers klasöründeki *.natjmc dosyalarında belirtilen işlevler.

Kod adımlama davranışı için C++ dilinde Yalnızca Kodum işlevi yalnızca bu işlevleri kullanıcı dışı kod olarak kabul eder:

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

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:

  • Kullanıcı olmayan koddan Adımla çağrılırsa, kullanıcı dışı kod adımlarında hata ayıklama>(veya F11) kodun üzerinden geçme veya sonraki kullanıcı kodu satırına çalıştırma.
  • Kullanıcı dışı kodda Hata Ayıklama>Adımı (veya Shift+F11), 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ı kullanıcı dışı kodda bozulursa (örneğin, Hata Ayıkla Tümünü Ayıkla'yı>kullanır ve kullanıcı olmayan kodda duraklatırsanız), adımlama kullanıcı olmayan kodda devam eder.

Hata ayıklayıcı bir özel duruma isabet ederse, kullanıcı kodunda veya kullanıcı dışı kodda olsun, özel durumda durur. Özel Durum Ayarlar iletişim kutusundaki kullanıcı tarafından işlenmeyenseçenekler 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 ele aldığı modülleri, kaynak dosyaları ve işlevleri *.natjmc dosyalarında belirterek belirtebilirsiniz. Bu özelleştirme, en son derleyiciyi kullanıyorsanız kod adımlama için de geçerlidir (bkz. C++ Yalnızca Kodum).

  • 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ı için kullanıcı dışı kod belirtmek için .natjmc dosyasını %USERPROFILE%\My Documents\<Visual Studio version>\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>

Modül öğ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. Örneğin,

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

hata ayıklayıcıya herhangi bir sürücüdeki \3rdParty\UtilLibs içindeki tüm modülleri dış kod olarak ele almalarını söyler.
Company isteğe bağlı. Yürütülebilir dosyaya eklenmiş modülü yayımlayan şirketin adı. Modülleri dağıtmak 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. Windows joker karakterlerini ? ve * yolu belirtirken kullanabilirsiniz.

İşlev öğesi öznitelikleri

Öznitelik Açıklama
Name Gerekli. Dış kod olarak ele almak için işlevin tam adı. ou, Windows joker karakterlerini ? ve * yolu belirtirken kullanabilir.
Module isteğe bağlı. İşlevi içeren modülün adı veya tam yolu. Bu özniteliği aynı ada sahip işlevlerin belirsiz olmasını sağlamak için kullanabilirsiniz.
ExceptionImplementation olarak ayarlandığında true, çağrı yığını bu işlev yerine özel durum oluşturan işlevi görüntüler.

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

C++ projelerinde, *.natstepfilter dosyalarında Bunları 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, bazı StepInto işlevlerini veya diğer kullanıcı kodunu çağırsa bile hata ayıklayıcıya işlevin üzerine adım atıp atmadığını söyler. .natjmc'de listelenen işlevlerden farklı olarak, hata ayıklayıcı NoStepInto işlevinin içindeki kullanıcı kodunun ilk satırına adım atacaktır.

  • 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%\My Documents\<Visual Studio version>\Visualizers klasörüne ekleyin.

Not

Bazı üçüncü taraf uzantıları .natstepfilter işlevini 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şecek tam işlev adını belirten ECMA-262 biçimli normal ifade. Örneğin:

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

hata ayıklayıcıya içindeki MyNS::MyClass 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 isteğe bağlı. İş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ğildir.
Action Gerekli. Bu büyük/küçük harfe duyarlı değerlerden biri:

NoStepInto - hata ayıklayıcıya işlevin üzerine adım atacak şekilde bildirir.
StepInto - hata ayıklayıcıya işleve adım atıp eşleşen işlev için diğer NoStepInto tüm işlevleri geçersiz kılması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 bildirilir.

  • .natvis dosyalarının aksine, .natstepfilter ve .natjmc dosyaları çalışırken 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 veya &lt;.* adının kullanılması &lt;.*&gt; yararlı olabilir.

JavaScript Yalnızca Kodum

JavaScript Just My Code, kodu şu sınıflandırmalardan birinde kategorilere ayırarak adımlama ve çağrı yığını görüntülemeyi denetler:

Sınıflandırma Açıklama
MyCode Sahip olduğunuz ve denetlediğiniz kullanıcı kodu.
LibraryCode Düzenli olarak kullandığınız ve uygulamanızın düzgün çalışması için kullandığınız kitaplıklardan gelen kullanıcı dışı kod (örneğin, jQuery).
UnrelatedCode Uygulamanızda sahip olmadığınız ve uygulamanızın düzgün çalışması için güvenmediği kullanıcı dışı kod. Örneğin, reklamları görüntüleyen bir reklam SDK'sı UnrelatedCode olabilir.

JavaScript hata ayıklayıcısı kodu şu sırada kullanıcı veya kullanıcı olmayan olarak sınıflandırır:

  1. Varsayılan sınıflandırmalar.

    • Konak tarafından sağlanan eval işleve bir dize geçirilerek yürütülen betik MyCode'dur.
    • Oluşturucuya Function bir dize geçirilerek yürütülen betik LibraryCode'dur.
    • WinJS veya Azure SDK gibi bir çerçeve başvurusundaki betik LibraryCode'dur.
    • , veya işlevlerine setTimeoutbir dize geçirilerek yürütülen betik UnrelatedCode'dur.setIntervalsetImmediate
  2. Geçerli projenin mycode.json dosyasındaki sınıflandırmalar.

Her sınıflandırma adımı önceki adımları geçersiz kılar.

Diğer tüm kodlar MyCode olarak sınıflandırılır.

JavaScript projesinin kök klasörüne mycode.json adlı bir .json dosyası ekleyerek varsayılan sınıflandırmaları değiştirebilir ve belirli dosyaları ve URL'leri kullanıcı veya kullanıcı dışı kod olarak sınıflandırabilirsiniz. Bkz. JavaScript'i yalnızca kodumu özelleştirme.

JavaScript hata ayıklaması sırasında:

  • İşlev kullanıcı kodu değilse, Hata Ayıklama>Adımı (veya F11) Hata Ayıklama>Adımı (veya F10) ile aynı şekilde davranır.
  • Kullanıcı olmayan (LibraryCode veya UnrelatedCode) kodunda bir adım başlıyorsa, adımlama geçici olarak Yalnızca Kodum etkinleştirilmemiş gibi davranır. Kullanıcı koduna geri döndüğünüzde Yalnızca Kodum adımlama özelliği yeniden etkinleştirilir.
  • Bir kullanıcı kodu adımı geçerli yürütme bağlamından çıkıldığında, hata ayıklayıcı bir sonraki yürütülen kullanıcı kodu satırında durur. Örneğin, LibraryCode kodunda bir geri çağırma yürütülürse, hata ayıklayıcı bir sonraki kullanıcı kodu satırı yürütülene kadar devam eder.
  • Step Out (veya Shift+F11), kullanıcı kodunun bir sonraki satırında durur.

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.

Kodda ayarlanan kesme noktaları her zaman isabet alır, ancak kod sınıflandırılır.

  • debugger Anahtar sözcük LibraryCode'da gerçekleşirse, hata ayıklayıcı her zaman bozulur.
  • debugger Anahtar sözcük UnrelatedCode içinde gerçekleşirse, hata ayıklayıcı durmaz.

MyCode veya LibraryCode kodunda işlenmeyen bir özel durum oluşursa, hata ayıklayıcı her zaman bozulur.

UnrelatedCode içinde işlenmeyen bir özel durum oluşursa ve MyCode veya LibraryCode çağrı yığınındaysa, hata ayıklayıcı bozulur.

İlk şans özel durumları özel durum için etkinleştirildiyse ve özel durum LibraryCode veya UnrelatedCode'da oluşuyorsa:

  • Özel durum işlenirse hata ayıklayıcı bozulmaz.
  • Özel durum işlenmezse hata ayıklayıcı bozulur.

JavaScript'i yalnızca kodumu özelleştirme

Tek bir JavaScript projesi için kullanıcı ve kullanıcı dışı kodu kategorilere ayırmak için, projenin kök klasörüne mycode.json adlı bir .json dosyası ekleyebilirsiniz.

mycode.json dosyasının tüm anahtar değer çiftlerini listelemesi gerekmez. MyCode, Kitaplıklar ve İlişkisiz değerler boş diziler olabilir.

Mycode.json dosyaları şu söz dizimlerini kullanır:

{
    "Eval" : "Classification",
    "Function" : "Classification",
    "ScriptBlock" : "Classification",
    "MyCode" : [
        "UrlOrFileSpec",
        . . .
        "UrlOrFileSpec"
    ],
    "Libraries" : [
        "UrlOrFileSpec",
        . .
        "UrlOrFileSpec"
    ],
    "Unrelated" : [
        "UrlOrFileSpec",
        . . .
        "UrlOrFileSpec"
    ]
}

Değerlendirme, İşlev ve ScriptBlock

Değerlendirme, İşlev ve ScriptBlock anahtar değer çiftleri, dinamik olarak oluşturulan kodun nasıl sınıflandırıldığını belirler:

Veri Akışı Adı Açıklama
Değerlendirme Konak tarafından sağlanan eval işleve bir dize geçirilerek yürütülen betik. Varsayılan olarak, Eval betiği MyCode olarak sınıflandırılır.
İşlev Oluşturucuya Function bir dize geçirilerek yürütülen betik. Varsayılan olarak, İşlev betiği LibraryCode olarak sınıflandırılır.
ScriptBlock , veya setInterval işlevlerine setTimeoutsetImmediatebir dize geçirilerek yürütülen betik. ScriptBlock betiği varsayılan olarak UnrelatedCode olarak sınıflandırılır.

Değeri şu anahtar sözcüklerden biriyle değiştirebilirsiniz:

  • MyCodebetiği MyCode olarak sınıflandırır.
  • Librarybetiği LibraryCode olarak sınıflandırır.
  • Unrelatedbetiği UnrelatedCode olarak sınıflandırır.

MyCode, Kitaplıklar ve İlişkisiz

MyCode, Kitaplıklar ve İlişkisiz anahtar değer çiftleri, sınıflandırmaya eklemek istediğiniz URL'leri veya dosyaları belirtir:

Veri Akışı Adı Açıklama
MyCode MyCode olarak sınıflandırılan URL'ler veya dosyalar dizisi.
Kitaplıklar LibraryCode olarak sınıflandırılan URL'ler veya dosyalar dizisi.
Alakasız UnrelatedCode olarak sınıflandırılan URL'ler veya dosyalar dizisi.

URL veya dosya dizesi, sıfır veya daha fazla * karakterle eşleşen bir veya daha fazla karakter içerebilir. * , normal ifadesiyle .*aynıdır.