Visual Studio hata ayıklayıcı ile kod arasında gezinmeNavigate through code with the Visual Studio debugger

Visual Studio hata ayıklayıcısı, bir uygulamanın durumunu incelemek ve yürütme akışını göstermek için kod içinde gezinmenize yardımcı olabilir.The Visual Studio debugger can help you navigate through code to inspect the state of an app and show its execution flow. Daha hızlı bir şekilde incelemek istediğiniz koda ulaşmak için klavye kısayollarını, hata ayıklama komutlarını, kesme noktalarını ve diğer özellikleri kullanabilirsiniz.You can use keyboard shortcuts, debug commands, breakpoints, and other features to quickly get to the code you want to examine. Hata ayıklayıcı Gezinti komutları ve kısayollarıyla benzerlik, uygulama sorunlarını bulmayı ve çözümlemeyi daha hızlı ve kolay hale getirir.Familiarity with debugger navigation commands and shortcuts makes it faster and easier to find and resolve app issues. Kodu ilk kez ayıklamaya çalıştığınızda, bu makaleye geçmeden önce mutlak yeni başlayanlar ve hata ayıklama teknikleri ve araçları için hata ayıklamayı okumak isteyebilirsiniz.If this is the first time that you've tried to debug code, you may want to read Debugging for absolute beginners and Debugging techniques and tools before going through this article.

"Kesme moduna" alınGet into "break mode"

Kesme modunda, işlevler, değişkenler ve nesneler bellekte kaldığı sürece uygulama yürütmesi askıya alınır.In break mode, app execution is suspended while functions, variables, and objects remain in memory. Hata ayıklayıcı kesme modundayken, kodunuzda gezinebilirsiniz.Once the debugger is in break mode, you can navigate through your code. Kesme modunu hızlı bir şekilde almanın en yaygın yolları şunlardan biri olmalıdır:The most common ways to get into break mode quickly is to either:

  • F10 veya F11tuşlarına basarak kod adımlamasını başlatın.Begin code stepping by pressing F10 or F11. Bu, uygulamanızın giriş noktasını hızlı bir şekilde bulmanıza olanak sağlar ve ardından kod gezinmek için adım komutlarına basmaya devam edebilirsiniz.This allows you to quickly find the entry point of your app, then you can continue pressing step commands to navigate code.

  • Belirli bir konuma veya işleve, örneğin bir kesme noktası ayarlayıp uygulamanızı başlatarak çalıştırın.Run to a specific location or function, for example, by setting a breakpoint and starting your app.

    Örneğin, Visual Studio 'daki kod düzenleyicisinden, uygulamayı başlatmak, ekli hata ayıklayıcı eklemek ve kesme moduna geçmek için, daha sonra F11 tuşuna gitmek Için imlece Çalıştır komutunu kullanabilirsiniz.For example, from the code editor in Visual Studio, you can use the Run to Cursor command to start the app, debugger attached, and get into break mode, then F11 to navigate code.

    İmlece git ve koda adımlaRun to cursor and step into code

Kesme modunda bir kez, kodunuzda gezinmek için çeşitli komutlar kullanabilirsiniz.Once in break mode, you can use a variety of commands to navigate through your code. Kesme modundayken, ihlalleri veya hataları aramak için değişkenlerin değerlerini inceleyebilirsiniz.While in break mode, you can examine the values of variables to look for violations or bugs. Bazı proje türleri için kesme modundayken uygulamada ayarlamalar da yapabilirsiniz.For some project types, you can also make adjustments to the app while in break mode.

Modüller ve izleme pencereleri gibi çoğu hata ayıklayıcı penceresi yalnızca hata ayıklayıcı uygulamanıza iliştirirken kullanılabilir.Most debugger windows, like the Modules and Watch windows, are available only while the debugger is attached to your app. Yerel öğeler penceresinde değişken değerlerini görüntüleme veya Gözcü penceresindeki ifadeleri değerlendirme gibi bazı hata ayıklayıcı özellikleri yalnızca hata ayıklayıcı duraklatıldığında (yani kesme modunda) kullanılabilir.Some debugger features, such as viewing variable values in the Locals window or evaluating expressions in the Watch window, are available only while the debugger is paused (that is, in break mode).

Not

Kaynak veya sembol (. pdb) dosyaları yüklü olmayan bir kodla karşılaşırsanız, hata ayıklayıcı, dosyaları bulmanıza ve yüklemeye yardımcı olabilecek bir kaynak dosya bulunamadı veya sembol bulunamadı sayfasını görüntüler.If you break into code that doesn't have source or symbol (.pdb) files loaded, the debugger displays a Source Files Not Found or Symbols Not Found page that can help you find and load the files. Bkz. simge (. pdb) ve kaynak dosyaları belirtme.See Specify symbol (.pdb) and source files. Sembol veya kaynak dosyalarını yükleyebulamıyorsanız, ayrıştırma penceresindeki derleme yönergelerinden yine de hata ayıklaması yapabilirsiniz.If you can't load the symbol or source files, you can still debug the assembly instructions in the Disassembly window.

Kod üzerinden adımlaStep through code

Hata ayıklayıcı adım komutları, uygulama eyaletinizi incelemenize veya yürütme akışı hakkında daha fazla bilgi almanıza yardımcı olur.The debugger step commands help you inspect your app state or find out more about its execution flow.

Satıra göre kod satırına adımlaStep into code line by line

Hata ayıklama sırasında her bir ifadede durmak için, hata ayıklama > adımınıkullanın veya F11tuşuna basın.To stop on each statement while debugging, use Debug > Step Into, or press F11.

Hata ayıklayıcı, fiziksel satırlar değil kod deyimleriyle adımları.The debugger steps through code statements, not physical lines. Örneğin, bir if yan tümce tek bir satırda yazılabilir:For example, an if clause can be written on one line:

int x = 42;
string s = "Not answered";
if( int x == 42) s = "Answered!";
Dim x As Integer = 42
Dim s As String = "Not answered"
If x = 42 Then s = "Answered!"

Ancak, bu satıra adım adım hata ayıklayıcı koşulu bir adım olarak ve sonucu başka bir adım olarak değerlendirir.However, when you step into this line, the debugger treats the condition as one step, and the consequence as another. Yukarıdaki örnekte koşul doğrudur.In the preceding example, the condition is true.

İç içe geçmiş işlev çağrısında, en derin iç içe geçmiş işleve adımlayın .On a nested function call, Step Into steps into the most deeply nested function. Örneğin, gibi bir çağrıda Step Içine adımla Func1(Func2()) , hata ayıklayıcı adımları işleve Func2 .For example, if you use Step Into on a call like Func1(Func2()), the debugger steps into the function Func2.

İpucu

Her kod satırını yürüttüğünüzde, değerlerini görmek için değişkenlerin üzerine geldiğinizde, değerleri izlemek için Yereller ve İzle pencerelerini kullanabilirsiniz.As you execute each line of code, you can hover over variables to see their values, or use the Locals and Watch windows to watch the values change. Ayrıca işlevlere adımlarken çağrı yığınını görsel olarak izleyebilirsiniz.You can also visually trace the call stack while stepping into functions. (Yalnızca Visual Studio Enterprise için bkz. hata ayıklama sırasında çağrı yığınında eşleme yöntemleri).(For Visual Studio Enterprise only, see Map methods on the call stack while debugging).

Kodda adım adım ilerleyin ve bazı işlevleri atlayınStep through code and skip some functions

Hata ayıklama sırasında bir işlevle ilgilenmez veya iyi test edilmiş kitaplık kodu gibi çalıştığını bilirsiniz.You may not care about a function while debugging, or you know it works, like well-tested library code. Kod adımlaması sırasında kodu atlamak için aşağıdaki komutları kullanabilirsiniz.You can use the following commands to skip code while code stepping. İşlevler hala yürütülür, ancak hata ayıklayıcı bunların üzerinde atlar.The functions still execute, but the debugger skips over them.

Klavye komutuKeyboard command Hata ayıklama menü komutuDebug menu command DescriptionDescription
F10F10 AdımlaStep Over Geçerli satır bir işlev çağrısı içeriyorsa, üzerinde adımla kodu çalıştırır ve ardından çağrılan işlev çağrıldıktan sonra ilk kod satırında yürütmeyi askıya alır.If the current line contains a function call, Step Over runs the code, then suspends execution at the first line of code after the called function returns.
SHIFT + F11Shift+F11 Dışarı adımlaStep Out Step Out , kodu çalıştırmaya devam eder ve geçerli işlev döndüğünde yürütmeyi askıya alır.Step Out continues running code and suspends execution when the current function returns. Hata ayıklayıcı geçerli işlevden atlar.The debugger skips through the current function.

Belirli bir konuma veya işleve ÇalıştırRun to a specific location or function

Tam olarak hangi kodu incelemek istediğinizi bildiğiniz veya hata ayıklamayı başlatmak istediğinizi bildiğiniz durumlarda, doğrudan belirli bir konuma veya işleve çalıştırmayı tercih edebilirsiniz.You may prefer to run directly to a specific location or function when you know exactly what code you want to inspect, or you know where you want to start debugging.

Kodda bir kesme noktasına ÇalıştırRun to a breakpoint in code

Kodunuzda basit bir kesme noktası ayarlamak için, yürütmeyi askıya almak istediğiniz kod satırının yanındaki sol kenar boşluğuna tıklayın.To set a simple breakpoint in your code, click the far left margin next to the line of code where you want to suspend execution. Ayrıca, satırı seçip F9tuşuna basarak hata ayıklama > geçiş noktası geçişi' ni seçebilir veya sağ tıklayıp kesmenoktası Ekle kesme noktası ' nı seçebilirsiniz > Insert Breakpoint.You can also select the line and press F9, select Debug > Toggle Breakpoint, or right-click and select Breakpoint > Insert Breakpoint. Kesme noktası, kod satırının yanındaki sol kenar boşluğunda kırmızı nokta olarak görünür.The breakpoint appears as a red dot in the left margin next to the code line. Hata ayıklayıcı, satırı yürütmeden hemen önce yürütmeyi askıya alır.The debugger suspends execution just before the line executes.

Kesme noktası ayarlamaSet a breakpoint

Visual Studio 'daki kesme noktaları, koşullu kesme noktaları ve izleme noktaları gibi zengin bir ek işlevsellik kümesi sağlar.Breakpoints in Visual Studio provide a rich set of additional functionality, such as conditional breakpoints and tracepoints. Ayrıntılar için bkz. kesme noktaları kullanma.For details, see Using breakpoints.

İşlev kesme noktasına ÇalıştırRun to a function breakpoint

Hata ayıklayıcıyı, belirtilen işleve ulaşıncaya kadar çalıştırmayı söyleyebilirsiniz.You can tell the debugger to run until it reaches a specified function. İşlevi adına göre belirtebilir veya çağrı yığınından seçebilirsiniz.You can specify the function by name, or you can choose it from the call stack.

Ada göre bir işlev kesme noktası belirtmek içinTo specify a function breakpoint by name

  1. Hata ayıklama > Yeni kesmenoktası > işlev kesme noktası SeçSelect Debug > New Breakpoint > Function Breakpoint

  2. Yeni Işlev kesme noktası iletişim kutusunda işlevin adını yazın ve dilini seçin.In the New Function Breakpoint dialog, type the name of the function and select its language.

    Yeni Işlev kesme noktası iletişim kutusuNew Function Breakpoint dialog box

  3. Tamam’ı seçin.Select OK.

İşlev aşırı yüklenmişse veya birden fazla ad alanında, kesme noktaları penceresinde istediğiniz birini seçebilirsiniz.If the function is overloaded or in more than one namespace, you can choose the one you want in the Breakpoints window.

Aşırı yüklenmiş işlev kesme noktalarıOverloaded function breakpoints

Çağrı yığınından bir işlev kesme noktası seçmek içinTo select a function breakpoint from the call stack

  1. Hata ayıklama sırasında Call Stack Windows Debug > Windows > çağrı yığınıHata Ayıkla ' yı seçerek çağrı yığını penceresini açın.While debugging, open the Call Stack window by selecting Debug > Windows > Call Stack.

  2. Çağrı yığını penceresinde, bir işleve sağ tıklayın ve imlece Çalıştır' ı seçin veya CTRL + F10tuşuna basın.In the Call Stack window, right-click a function and select Run To Cursor, or press Ctrl+F10.

Çağrı yığınını görsel olarak izlemek için bkz. hata ayıklama sırasında çağrı yığınında eşleme yöntemleri.To visually trace the call stack, see Map methods on the call stack while debugging.

Bir imleç konumuna ÇalıştırRun to a cursor location

İmleç konumunu, kaynak kodu veya çağrı yığını penceresinde çalıştırmak için, kesmek istediğiniz çizgiyi seçin, sağ tıklayın ve imlece Çalıştır' ı seçin veya CTRL + F10tuşuna basın.To run to the cursor location, in source code or the Call Stack window, select the line you want to break at, right-click and select Run To Cursor, or press Ctrl+F10. Imlece Çalıştır ' ın seçilmesi geçici bir kesme noktası ayarlamaya benzer.Selecting Run To Cursor is like setting a temporary breakpoint.

Tıklanan Satıra Kadar ÇalıştırRun to Click

Hata ayıklayıcıda duraklalarken, kaynak kodda veya ayrıştırma penceresinde bir deyimin üzerine geldiğinizde, yürütmeyi buraya kadar Çalıştır yeşil ok simgesine seçebilirsiniz.While paused in the debugger, you can hover over a statement in source code or the Disassembly window, and select the Run execution to here green arrow icon. Çalıştırmak Için Çalıştır ' ı kullanmak, geçici bir kesme noktası ayarlama gereksinimini ortadan kaldırır.Using Run to Click eliminates the need to set a temporary breakpoint.

Tıklanan Satıra Kadar ÇalıştırRun to Click

Not

' İ tıklama ' de başlangıç Için çalıştırın Visual Studio 2017Visual Studio 2017 .Run to Click is available starting in Visual Studio 2017Visual Studio 2017.

Koda el ile bölmeManually break into code

Çalışan bir uygulamadaki bir sonraki kullanılabilir kod satırını kesmek için, Debug > Tümünü kesHata Ayıkla ' yı seçin veya CTRL + alt + Kes' e basın.To break in the next available line of code in a running app, select Debug > Break All, or press Ctrl+Alt+Break.

Yürütme akışını değiştirmek için işaretçiyi taşıyınMove the pointer to change the execution flow

Hata ayıklayıcı duraklatıldığında, kaynak kodu veya ayrıştırma penceresinin kenar boşluğunda sarı bir ok ucu yürütülecek sonraki deyimin konumunu işaret ediyor.While the debugger is paused, a yellow arrowhead in the margin of the source code or Disassembly window marks the location of the next statement to be executed. Sonraki ifadeyi bu ok ucunu taşıyarak yürütülecek şekilde değiştirebilirsiniz.You can change the next statement to execute by moving this arrowhead. Kodun bir bölümünü atlayabilir veya önceki bir satıra geri dönebilirsiniz.You can skip over a portion of code, or return to a previous line. İşaretçiyi taşımak, bilinen bir hata içeren kodun bir bölümünü atlama gibi durumlarda faydalıdır.Moving the pointer is useful for situations such as skipping a section of code that contains a known bug.

İşaretçiyi taşıMove the pointer

Sonraki ifadeyi yürütülecek şekilde değiştirmek için, hata ayıklayıcı kesme modunda olmalıdır.To change the next statement to execute, the debugger must be in break mode. Kaynak kodu veya ayrıştırma penceresinde, sarı ok ucunu farklı bir satıra sürükleyin veya daha sonra yürütmek istediğiniz satıra sağ tıklayıp sonraki ifadeyi ayarla' yı seçin.In the source code or Disassembly window, drag the yellow arrowhead to a different line, or right-click the line you want to execute next and select Set Next Statement.

Program sayacı doğrudan yeni konuma atlar ve eski ve yeni yürütme noktaları arasındaki yönergeler yürütülmez.The program counter jumps directly to the new location, and instructions between the old and new execution points aren't executed. Ancak, yürütme noktasını geriye doğru taşırsanız, aradaki yönergeler geri alınamaz.However, if you move the execution point backwards, the intervening instructions aren't undone.

Dikkat

  • Sonraki deyimin başka bir işleve veya kapsama taşınması genellikle çağrı yığını bozulmasıyla sonuçlanır ve bir çalışma zamanı hatasına veya özel duruma neden olur.Moving the next statement to another function or scope usually results in call-stack corruption, causing a run-time error or exception. Sonraki ifadeyi başka bir kapsama taşımaya çalışırsanız, hata ayıklayıcı uyarı içeren bir iletişim kutusu açar ve işlemi iptal etmek için size şans verir.If you try moving the next statement to another scope, the debugger opens a dialog box with a warning and gives you a chance to cancel the operation.
  • Visual Basic, sonraki ifadeyi başka bir kapsam veya işleve taşıyamazsınız.In Visual Basic, you cannot move the next statement to another scope or function.
  • Yerel C++ ' da, çalışma zamanı denetimleri etkinse sonraki ifadeyi ayarlamak, yürütme yöntemin sonuna ulaştığında bir özel durumun oluşturulmasına neden olabilir.In native C++, if you have run-time checks enabled, setting the next statement can cause an exception to be thrown when execution reaches the end of the method.
  • Düzenle ve devam et etkin olduğunda, Düzenle ve devam et ' in hemen yeniden eşlenemez olan düzenlemeler yaptıysanız sonraki Ifadeyi ayarla başarısız olur.When Edit and Continue is enabled, Set Next Statement fails if you have made edits that Edit and Continue cannot remap immediately. Bu durum, örneğin bir catch bloğu içinde kod düzenlediyseniz olabilir.This can occur, for example, if you have edited code inside a catch block. Bu durumda, işlemin desteklenmediğini bildiren bir hata mesajı görüntülenir.When this happens, an error message tells you that the operation is not supported.
  • Yönetilen kodda, şu durumlarda bir sonraki ifadeyi taşıyamazsınız:In managed code, you cannot move the next statement if:
    • Sonraki ifade, geçerli deyimden farklı bir yöntem içinde.The next statement is in a different method than the current statement.
    • Hata ayıklama tam zamanında hata ayıklama tarafından başlatıldı.Debugging was started by Just-In-Time debugging.
    • Çağrı yığınını geriye doğru izleme devam ediyor.A call stack unwind is in progress.
    • System. StackOverflowException veya System. Threading. Threadadbortexception özel durumu oluşturuldu.A System.StackOverflowException or System.Threading.ThreadAbortException exception has been thrown.

Kullanıcı olmayan kodda hata ayıklaDebug non-user code

Varsayılan olarak, hata ayıklayıcı yalnızca kendi kodumadlı bir ayarı etkinleştirerek yalnızca uygulama kodunuzda hata ayıklamaya çalışır.By default, the debugger tries to debug only your app code by enabling a setting called Just My Code. Bu özelliğin farklı proje türleri ve dilleri için nasıl çalıştığı ve nasıl özelleştirebileceği hakkında daha fazla ayrıntı için bkz. yalnızca kendi kodum.For more details about how this feature works for different project types and languages, and how you can customize it, see Just My Code.

Hata ayıklama sırasında çerçeve kodu, üçüncü taraf kitaplık kodu veya Sistem çağrılarına bakmak için Yalnızca kendi kodum devre dışı bırakabilirsiniz.To look at framework code, third-party library code, or system calls while debugging, you can disable Just My Code. Araçlar (veya hata ayıklama) > Options > hata ayıklamaseçenekleri ' nde yalnızca kendi kodum etkinleştir onay kutusunu temizleyin.In Tools (or Debug) > Options > Debugging, clear the Enable Just My Code check box. Yalnızca kendi kodum devre dışı bırakıldığında, Kullanıcı olmayan kod hata ayıklayıcı penceresinde görünür ve hata ayıklayıcı kullanıcı olmayan koda bir adım adım olabilir.When Just My Code is disabled, non-user code appears in the debugger windows, and the debugger can step into the non-user code.

Not

Yalnızca kendi kodum, cihaz projeleri için desteklenmez.Just My Code is not supported for device projects.

Hata ayıklama Sistem koduDebug system code

Microsoft Sistem kodu için hata ayıklama sembolleri yüklediyseniz ve Yalnızca kendi kodum devre dışı bırakırsanız, diğer tüm çağrılarda olduğu gibi bir sistem çağrısına de adım adım ekleyebilirsiniz.If you have loaded debugging symbols for Microsoft system code, and disabled Just My Code, you can step into a system call just as you can any other call.

Microsoft sembolleri yüklemek için bkz. simge konumlarını yapılandırma ve seçenekleri yükleme.To load Microsoft symbols, see Configure symbol locations and loading options.

Belirli bir sistem bileşenine yönelik sembolleri yüklemek için:To load symbols for a specific system component:

  1. Hata ayıklarken, Modules Windows modüllerini Hata Ayıkla > Windows > Modules' yı seçerek veya CTRL + alt + Utuşlarına basarak modüller penceresini açın.While you're debugging, open the Modules window by selecting Debug > Windows > Modules, or pressing Ctrl+Alt+U.

  2. Modüller penceresinde, sembol durumu sütununda hangi modüllerin sembol yüklendiğini anlayabilirsiniz.In the Modules window, you can tell which modules have symbols loaded in the Symbol Status column. Sembolleri yüklemek istediğiniz modüle sağ tıklayın ve sembolleri yükle' yi seçin.Right-click the module that you want to load symbols for, and select Load Symbols.

Yönetilen koddaki Özellikler ve işleçlere adımlaStep into properties and operators in managed code

Varsayılan olarak yönetilen koddaki Özellikler ve işleçler üzerinde hata ayıklayıcı adımları.The debugger steps over properties and operators in managed code by default. Çoğu durumda bu, daha iyi bir hata ayıklama deneyimi sağlar.In most cases, this provides a better debugging experience. Özellikler veya işleçlere adımlamayı etkinleştirmek için hata ayıklama > seçenekleri' ni seçin.To enable stepping into properties or operators, choose Debug > Options. Hata ayıklama > genel sayfasında, Özellikler ve işleçler üzerinde adımla (yalnızca yönetilen) onay kutusunu temizleyin.On the Debugging > General page, clear the Step over properties and operators (Managed only) check box.

Ayrıca bkz.See also