about_Debuggers

Kısa açıklama

PowerShell hata ayıklayıcısını açıklar.

Uzun açıklama

Hata ayıklama, betik yönergelerindeki hataları belirlemek ve düzeltmek için çalışırken betiği inceleme işlemidir. PowerShell hata ayıklayıcısı betiklerinizde, işlevlerinizde, komutlarınızda, PowerShell İstenen Durum Yapılandırması (DSC) yapılandırmalarınızda veya ifadelerinizde hataları ve verimsizlikleri incelemenize ve tanımlamanıza yardımcı olabilir.

PowerShell 5.0'dan başlayarak PowerShell hata ayıklayıcısı, uzak bilgisayarlarda konsolda veya Windows PowerShell Tümleşik Betik Ortamı'nda (ISE) çalışan betiklerin, işlevlerin, komutların, yapılandırmaların veya ifadelerin hatalarını ayıklanacak şekilde güncelleştirilmiştir.

Not

Windows PowerShell ISE yalnızca Windows PowerShell'i destekler. PowerShell 6 ve üzeri için Visual Studio Code'un PowerShell uzantısını kullanmanız gerekir. Daha fazla bilgi için bkz . Visual Studio Code ile hata ayıklama.

Hata ayıklayıcısı cmdlet'leri

PowerShell hata ayıklayıcısı aşağıdaki cmdlet'leri içerir:

  • Set-PSBreakpoint: Satır, değişken ve komutlardaki kesme noktalarını ayarlar.
  • Get-PSBreakpoint: Geçerli oturumdaki kesme noktalarını alır.
  • Disable-PSBreakpoint: Geçerli oturumdaki kesme noktalarını kapatır.
  • Enable-PSBreakpoint: Geçerli oturumdaki kesme noktalarını yeniden etkinleştirir.
  • Remove-PSBreakpoint: Geçerli oturumdan kesme noktalarını siler.
  • Get-PSCallStack: Geçerli çağrı yığınını görüntüler.

Hata ayıklayıcıyı başlatma ve durdurma

Hata ayıklayıcıyı başlatmak için bir veya daha fazla kesme noktası ayarlayın, ardından hata ayıklamak istediğiniz betiği, komutu veya işlevi çalıştırın.

Kesme noktasına ulaştığınızda yürütme durdurulur ve denetim hata ayıklayıcıya devredilir.

Hata ayıklayıcıyı durdurmak için betiği, komutu veya işlevi tamamlanana kadar çalıştırın. Alternatif olarak, veya tyazınstop.

Hata ayıklayıcı komutları

PowerShell konsolunda hata ayıklayıcısını kullandığınızda, yürütmeyi denetlemek için aşağıdaki komutları kullanın. Windows PowerShell ISE'de Hata Ayıklama menüsündeki komutları kullanın.

Not

Diğer konak uygulamalarında hata ayıklayıcının nasıl kullanılacağı hakkında bilgi için konak uygulama belgelerine bakın.

  • s, StepInto: Sonraki deyimi yürütür ve sonra durur.

  • v, StepOver: Sonraki deyimi yürütür, ancak işlevleri ve çağrıları atlar. Atlanan deyimler yürütülür, ancak adım atlanmaz.

  • Ctrl+Break: (Tümünü ISE'de Kes) PowerShell konsolunda veya Windows PowerShell ISE'de çalışan bir betike bölünur. Windows PowerShell 2.0, 3.0 ve 4.0'da Ctrl+Break'in programı kapattığını unutmayın. Tümünü Kes, hem yerel hem de uzaktan etkileşimli çalışan betiklerde çalışır.

  • o, StepOut: Geçerli işlevin dışına çıkar; iç içe yerleştirilmişse bir düzey yukarı. Ana gövdede ise, sona veya bir sonraki kesme noktasına devam eder. Atlanan deyimler yürütülür, ancak adım atlanmaz.

  • c, Continue: Betik tamamlanana kadar veya bir sonraki kesme noktasına ulaşılana kadar çalışmaya devam eder. Atlanan deyimler yürütülür, ancak adım atlanmaz.

  • l, List: Betiğin yürütülen bölümünü görüntüler. Varsayılan olarak, geçerli satırı, beş önceki satırı ve sonraki 10 satırı görüntüler. Betiği listelemeye devam etmek için ENTER tuşuna basın.

  • l <m>, List: tarafından <m>belirtilen satır numarasıyla başlayan betiğin 16 satırını görüntüler.

  • l <m> <n>, List: tarafından belirtilen satır numarasından başlayarak betiğin satırlarını <m>görüntüler<n>.

  • q, Stop, Exit: Betiği yürütmeyi durdurur ve hata ayıklayıcıdan çıkar. Cmdlet'ini çalıştırarak Debug-Job bir işin hatalarını ayıklarsanız, Exit komut hata ayıklayıcıyı ayırır ve işin çalışmaya devam etmesine izin verir.

  • k, Get-PsCallStack: Geçerli çağrı yığınını görüntüler.

  • <Enter>: (), (sv) StepOver veya List (l ise Step son komutu yineler. Aksi takdirde, gönderme eylemini temsil eder.

  • ?, h: Yardım hata ayıklayıcısı komutunu görüntüler.

Hata ayıklayıcıdan çıkmak için (q kullanabilirsiniz Stop .

PowerShell 5.0'dan başlayarak, veya Debug-Runspaceçalıştırarak başlattığınız iç içe hata ayıklama oturumundan çıkmak için Exit komutunu çalıştırabilirsinizDebug-Job.

Bu hata ayıklayıcı komutlarını kullanarak bir betik çalıştırabilir, bir sorun üzerinde durabilir, değişkenlerin değerlerini ve sistem durumunu inceleyebilir ve bir sorun belirleyene kadar betiği çalıştırmaya devam edebilirsiniz.

Not

gibi >bir yeniden yönlendirme işleciyle bir deyime adım atarsanız, PowerShell hata ayıklayıcısı betikteki kalan tüm deyimler üzerinde adım atar.

Betik değişkenlerinin değerlerini görüntüleme

Hata ayıklayıcıdayken komut girebilir, değişkenlerin değerini görüntüleyebilir, cmdlet'leri kullanabilir ve komut satırında betikleri çalıştırabilirsiniz. Aşağıdaki otomatik değişkenler dışında, hata ayıklanan betikteki tüm değişkenlerin geçerli değerini görüntüleyebilirsiniz:

$_
$Args
$Input
$MyInvocation
$PSBoundParameters

Bu değişkenlerden herhangi birinin değerini görüntüdüğünüzde, hata ayıklayıcının kullandığı bir iç işlem hattı için bu değişkenin değerini alırsınız, betikteki değişkenin değerini değil.

Hata ayıklanan betik için bu değişkenlerin değerini görüntülemek için betiğinize satırlar ekleyerek bu değerleri yeni bir değişkene kaydedin. Kesme noktanızı bu yeni satırlardan sonra ayarlayın. Ardından yeni değişkenin değerini görüntüleyebilirsiniz.

Örneğin,

$scriptArgs = $Args
$scriptname = $MyInvocation.PSCommandPath

Hata ayıklayıcı ortamı

Bir kesme noktasına ulaştığınızda hata ayıklayıcı ortamına girersiniz. Komut istemi, "[DBG]:" ile başlayacak şekilde değişir. Ayrıca, PowerShell konsolu gibi bazı konak uygulamalarında hata ayıklama için iç içe bir istem açılır. komut isteminde görüntülenen yinelenen büyüktür karakterleri (ASCII 62) iç içe istemi algılayabilirsiniz.

İstemi özelleştirme hakkında daha fazla bilgi için bkz . about_Prompts.

otomatik değişkenini kullanarak $NestedPromptLevel iç içe yerleştirme düzeyini bulabilirsiniz. otomatik değişkeni, $PSDebugContextyerel kapsamda tanımlanır. Hata ayıklayıcı içinde $PSDebugContext çalışıp çalışmadığını belirlemek için değişkenin varlığını kullanabilirsiniz.

Örneğin:

if ($PSDebugContext) {"Debugging"} else {"Not Debugging"}

Hata ayıklamanızda değişkenin $PSDebugContext değerini kullanabilirsiniz.

[DBG]: PS>>> $PSDebugContext.InvocationInfo

Name   CommandLineParameters  UnboundArguments  Location
----   ---------------------  ----------------  --------
=      {}                     {}                C:\ps-test\vote.ps1 (1)

Hata ayıklama ve kapsam

Hata ayıklayıcıya girmek, içinde çalıştığınız kapsamı değiştirmez, ancak bir betikte kesme noktasına ulaştığınızda betik kapsamına geçersiniz. Betik kapsamı, hata ayıklayıcısını çalıştırdığınız kapsamın alt öğesidir.

Betik kapsamında tanımlanan değişkenleri ve diğer adları bulmak için veya Get-Variable cmdlet'lerinin Get-Alias Scope parametresini kullanın.

Örneğin, aşağıdaki komut yerel (betik) kapsamındaki değişkenleri alır:

Get-Variable -scope 0

Bu, yalnızca betikte tanımladığınız ve hata ayıklama sırasında tanımladığınız değişkenleri görmenin kullanışlı bir yoludur.

Komut satırında hata ayıklama

Değişken kesme noktası veya komut kesme noktası ayarladığınızda, kesme noktasını yalnızca bir betik dosyasında ayarlayabilirsiniz. Ancak, kesme noktası varsayılan olarak geçerli oturumda çalışan herhangi bir şey üzerinde ayarlanır.

Örneğin, değişkende $name bir kesme noktası ayarlarsanız hata ayıklayıcı, kesme noktasını devre dışı bırakıncaya veya kaldırana kadar çalıştırdığınız herhangi bir $name betik, komut, işlev, betik cmdlet'i veya ifadedeki herhangi bir değişkende son bulur.

Bu, betiklerinizin oturumdaki ve kullanıcı profilindeki işlevlerden, değişkenlerden ve diğer betiklerden etkilenebileceği daha gerçekçi bir bağlamda hata ayıklamanıza olanak tanır.

Satır kesme noktaları betik dosyalarına özgü olduğundan yalnızca betik dosyalarında ayarlanır.

İş akışlarında hata ayıklama

Hata ayıklayıcısı, PowerShell konsolunda veya Windows PowerShell ISE'de PowerShell iş akışlarında hata ayıklamak için kullanılabilir. İş akışlarında hata ayıklamak için PowerShell hata ayıklayıcısını kullanmayla ilgili bazı sınırlamalar vardır.

  • Hata ayıklayıcıdayken iş akışı değişkenlerini görüntüleyebilirsiniz, ancak iş akışı değişkenlerini hata ayıklayıcının içinden ayarlamak desteklenmez.
  • İş akışı hata ayıklayıcısında durdurulduğunda sekme tamamlama kullanılamaz.
  • İş akışı hata ayıklama yalnızca bir PowerShell betiğinden iş akışlarının zaman uyumlu çalıştırılmasıyla çalışır. İş olarak çalışıyorlarsa (AsJob parametresiyle) iş akışlarında hata ayıklayamazsınız.
  • Başka bir iş akışını çağıran iş akışı veya betik çağıran bir iş akışı gibi diğer iç içe geçmiş hata ayıklama senaryoları uygulanmaz.

Aşağıdaki örnekte bir iş akışında hata ayıklama gösterilmektedir. Hata ayıklayıcı iş akışı işlevine adım attığında, hata ayıklayıcısı istemi olarak [WFDBG]değişir.

PS C:> Set-PSBreakpoint -Script C:\TestWFDemo1.ps1 -Line 8
ID Script           Line Command    Variable     Action
-- ------           ---- -------    --------     ------
0 TestWFDemo1.ps1   8
PS C:> C:\TestWFDemo1.ps1
Entering debug mode. Use h or ? for help.
Hit Line breakpoint on 'C:\TestWFDemo1.ps1:8'
At C:\TestWFDemo1.ps1:8 char:5
+     Write-Output -InputObject "Now writing output:"
# ~~~~~
[WFDBG:localhost]: PS C:>> list
# 3:
4:  workflow SampleWorkflowTest
5:  {
6:      param ($MyOutput)
# 7:
8:*     Write-Output -InputObject "Now writing output:"
9:      Write-Output -Input $MyOutput
# 10:
11:      Write-Output -InputObject "Get PowerShell process:"
12:      Get-Process -Name powershell
# 13:

14:      Write-Output -InputObject "Workflow function complete."
15:  }
# 16:
17:  # Call workflow function
18:  SampleWorkflowTest -MyOutput "Hello"
[WFDBG:localhost]: PS C:>> $MyOutput
Hello
[WFDBG:localhost]: PS C:>> stepOver
Now writing output:
At C:\TestWFDemo1.ps1:9 char:5
+     Write-Output -Input $MyOutput
# +!INCLUDE[]~
[WFDBG:localhost]: PS C:>> list
4:  workflow SampleWorkflowTest
5:  {
6:      param ($MyOutput)
# 7:
8:      Write-Output -InputObject "Now writing output:"
9:*     Write-Output -Input $MyOutput
# 10:
11:      Write-Output -InputObject "Get PowerShell process:"
12:      Get-Process -Name powershell
# 13:
14:      Write-Output -InputObject "Workflow function complete."
15:  }
# 16:
17:  # Call workflow function
18:  SampleWorkflowTest -MyOutput "Hello"
# 19:
[WFDBG:localhost]: PS C:>> stepOver
Hello
At C:\TestWFDemo1.ps1:11 char:5
+     Write-Output -InputObject "Get PowerShell process:"
# +!INCLUDE[]~~~~~~~~~
[WFDBG:localhost]: PS C:>> stepOut
Get PowerShell process:
Handles  NPM(K)    PM(K)    WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----    ----- -----   ------     -- -----------
    433      35   106688   128392   726     2.67   7124 powershell
    499      44   134244   172096   787     2.79   7452 powershell
Workflow function complete.

Hata ayıklama işlevleri

, processve end bölümleri olan beginbir işlevde kesme noktası ayarladığınızda, hata ayıklayıcı her bölümün ilk satırında kesilir.

Örneğin:

function test-cmdlet {
    begin {
        write-output "Begin"
    }
    process {
        write-output "Process"
    }
    end {
        write-output "End"
    }
}

C:\PS> Set-PSBreakpoint -command test-cmdlet

C:\PS> test-cmdlet

Begin
Entering debug mode. Use h or ? for help.

Hit Command breakpoint on 'prompt:test-cmdlet'

test-cmdlet

[DBG]: C:\PS> c
Process
Entering debug mode. Use h or ? for help.

Hit Command breakpoint on 'prompt:test-cmdlet'

test-cmdlet

[DBG]: C:\PS> c
End
Entering debug mode. Use h or ? for help.

Hit Command breakpoint on 'prompt:test-cmdlet'

test-cmdlet

[DBG]: C:\PS>

Uzak betiklerde hata ayıklama

Uzak bilgisayarda kesme noktaları ayarlayabileceğiniz ve betik dosyalarının ve komutlarının hatalarını ayıklayabileceğiniz etkileşimli bir uzak PowerShell oturumu başlatmak için komutunu çalıştırabilirsiniz Enter-PSSession . Enter-PSSession uzak bilgisayarda betik veya komut çalıştıran bağlantısı kesilmiş bir oturumu yeniden bağlamanıza olanak tanır. Çalışan betik bir kesme noktasına isabet ederse istemci oturumunuz otomatik olarak hata ayıklayıcıyı başlatır. Betiği çalıştıran bağlantısı kesilmiş oturum zaten bir kesme noktasına isabet ettiyse, Enter-PSSession oturuma yeniden bağlandığınızda komut satırı hata ayıklayıcısını otomatik olarak başlatır.

Aşağıdaki örnekte bunun nasıl çalıştığı gösterilmektedir. Kesme noktaları betiğin 6, 11, 22 ve 25. satırlarında ayarlanmıştır. Hata ayıklayıcı başlatıldığında, istemde iki tanımlayıcı değişiklik yapılır:

  • Oturumun çalıştığı bilgisayarın adı
  • Hata ayıklama modunda olduğunuzu bilmenizi sağlayan DBG istemi
Enter-PSSession -Cn localhost
[localhost]: PS C:\psscripts> Set-PSBreakpoint .\ttest19.ps1 6,11,22,25

ID Script          Line     Command          Variable          Action
-- ------          ----     -------          --------          ------
0 ttest19.ps1          6
1 ttest19.ps1          11
2 ttest19.ps1          22
3 ttest19.ps1          25

[localhost]: PS C:\psscripts> .\ttest19.ps1
Hit Line breakpoint on 'C:\psscripts\ttest19.ps1:11'

At C:\psscripts\ttest19.ps1:11 char:1
+ $winRMName = "WinRM"
# + ~

[localhost]: [DBG]: PS C:\psscripts>> list

6:      1..5 | foreach { sleep 1; Write-Output "hello2day $_" }
7:  }
# 8:

9:  $count = 10
10:  $psName = "PowerShell"
11:* $winRMName = "WinRM"
12:  $myVar = 102
# 13:

14:  for ($i=0; $i -lt $count; $i++)
15:  {
16:      sleep 1
17:      Write-Output "Loop iteration is: $i"
18:      Write-Output "MyVar is $myVar"
# 19:

20:      hello2day
# 21:


[localhost]: [DBG]: PS C:\psscripts>> stepover
At C:\psscripts\ttest19.ps1:12 char:1
+ $myVar = 102
# + ~

[localhost]: [DBG]: PS C:\psscripts>> quit
[localhost]: PS C:\psscripts> Exit-PSSession
PS C:\psscripts>

Örnekler

Bu test betiği PowerShell sürümünü algılar ve sürüme uygun bir ileti görüntüler. İşlev, işlev çağrısı ve değişken içerir.

Aşağıdaki komut, test betiği dosyasının içeriğini görüntüler:

PS C:\PS-test>  Get-Content test.ps1

function psversion {
  "PowerShell " + $PSVersionTable.PSVersion
  if ($PSVersionTable.PSVersion.Major -lt 7) {
    "Upgrade to PowerShell 7!"
  }
  else {
    "Have you run a background job today (start-job)?"
  }
}

$scriptName = $MyInvocation.PSCommandPath
psversion
"Done $scriptName."

Başlamak için betiğin ilgilendiği bir noktada satır, komut, değişken veya işlev gibi bir kesme noktası ayarlayın.

Geçerli dizindeki Test.ps1 betiğinin ilk satırında bir satır kesme noktası oluşturarak başlayın.

PS C:\ps-test> Set-PSBreakpoint -line 1 -script test.ps1

Komut bir System.Management.Automation.LineBreakpoint nesnesi döndürür.

Column     : 0
Line       : 1
Action     :
Enabled    : True
HitCount   : 0
Id         : 0
Script     : C:\ps-test\test.ps1
ScriptName : C:\ps-test\test.ps1

Şimdi betiği başlatın.

PS C:\ps-test> .\test.ps1

Betik ilk kesme noktasına ulaştığında kesme noktası iletisi hata ayıklayıcının etkin olduğunu gösterir. Kesme noktasını açıklar ve bir işlev bildirimi olan betiğin ilk satırının önizlemesini gösterir. Komut istemi, hata ayıklayıcının denetimine sahip olduğunu gösterecek şekilde de değişir.

Önizleme satırı, betik adını ve önizlemede görüntülenen komutun satır numarasını içerir.

Entering debug mode. Use h or ? for help.

Hit Line breakpoint on 'C:\ps-test\test.ps1:1'

test.ps1:1   function psversion {
DBG>

Betikteki ilk deyimi yürütmek ve sonraki deyimin önizlemesini görüntülemek için Step komutunu (ler) kullanın. Sonraki deyim, değişkenin $MyInvocation değerini betik dosyasının $scriptName yoluna ve dosya adına ayarlamak için otomatik değişkeni kullanır.

DBG> s
test.ps1:11  $scriptName = $MyInvocation.PSCommandPath

Bu noktada, $scriptName değişken doldurulmamıştır, ancak değerini görüntüleyerek değişkenin değerini doğrulayabilirsiniz. Bu durumda, değeri olur $null.

DBG> $scriptname
DBG>

Geçerli deyimi yürütmek ve betikteki sonraki deyimin önizlemesini görüntülemek için başka bir Step komut (s) kullanın. Sonraki deyim işlevi çağırır psversion .

DBG> s
test.ps1:12  psversion

Bu noktada değişken $scriptName doldurulur, ancak değerini görüntüleyerek değişkenin değerini doğrularsınız. Bu durumda, değer betik yoluna ayarlanır.

DBG> $scriptName
C:\ps-test\test.ps1

İşlev çağrısını yürütmek için başka bir Adım komutu kullanın. ENTER tuşuna basın veya Adım için "s" yazın.

DBG> s
test.ps1:2       "PowerShell " + $PSVersionTable.PSVersion

Hata ayıklama iletisi, işlevdeki deyiminin önizlemesini içerir. Bu deyimi yürütmek ve işlevindeki sonraki deyimin önizlemesini görüntülemek için bir Step komut kullanabilirsiniz. Ancak bu durumda StepOut komutunu (o) kullanın. İşlevin yürütülmesini (kesme noktasına ulaşmadığı sürece) tamamlar ve betikteki sonraki deyimin adımlarını uygular.

DBG> o
Windows PowerShell 2.0
Have you run a background job today (start-job)?
test.ps1:13  "Done $scriptName"

Betikteki son deyimde olduğumuzdan Step, StepOut ve Continue komutları aynı etkiye sahiptir. Bu durumda StepOut (o) kullanın.

Done C:\ps-test\test.ps1
PS C:\ps-test>

StepOut komutu son komutu yürütür. Standart komut istemi, hata ayıklayıcının çıkış yapıp komut işlemcisine denetim döndürdüğünü gösterir.

Şimdi hata ayıklayıcısını yeniden çalıştırın. İlk olarak, geçerli kesme noktasını silmek için ve Remove-PsBreakpoint cmdlet'lerini Get-PsBreakpoint kullanın. (Kesme noktasını yeniden kullanabileceğinizi düşünüyorsanız, yerine cmdlet'ini Disable-PsBreakpointRemove-PsBreakpointkullanın.)

PS C:\ps-test> Get-PSBreakpoint| Remove-PSBreakpoint

Bu komutu şu şekilde kısaltabilirsiniz:

PS C:\ps-test> gbp | rbp

Veya aşağıdaki işlev gibi bir işlev yazarak komutunu çalıştırın:

function delbr { gbp | rbp }

Şimdi değişkende $scriptname bir kesme noktası oluşturun.

PS C:\ps-test> Set-PSBreakpoint -variable scriptname -script test.ps1

Komutu şu şekilde kısaltabilirsiniz:

PS C:\ps-test> sbp -v scriptname -s test.ps1

Şimdi betiği başlatın. Betik değişken kesme noktasına ulaşır. Varsayılan mod Yazma'dır, bu nedenle yürütme değişkenin değerini değiştiren deyiminden hemen önce durur.

PS C:\ps-test> .\test.ps1
Hit Variable breakpoint on 'C:\ps-test\test.ps1:$scriptName'
(Write access)

test.ps1:11  $scriptName = $MyInvocation.PSCommandPath
DBG>

değişkeninin geçerli değerini $scriptName (olan $null) görüntüleyin.

DBG> $scriptName
DBG>

Değişkeni dolduran deyimi yürütmek için bir Step komut (s) kullanın. Ardından değişkenin yeni değerini $scriptName görüntüleyin.

DBG> $scriptName
C:\ps-test\test.ps1

Betikteki bir sonraki deyimin önizlemesini görüntülemek için Bir Adım komutu (ler) kullanın.

DBG> s
test.ps1:12  psversion

Sonraki deyim işlevine psversion yapılan bir çağrıdır. İşlevi atlamak ancak yine de yürütmek için bir StepOver komut (v) kullanın. kullanırken StepOverzaten işlevin içindeyseniz, bu geçerli değildir. İşlev çağrısı görüntülenir, ancak yürütülemez.

DBG> v
Windows PowerShell 2.0
Have you run a background job today (start-job)?
test.ps1:13  "Done $scriptName"

StepOver komutu işlevi yürütür ve betikteki son satırı yazdıran sonraki deyimin önizlemesini gösterir.

Hata ayıklayıcıdan çıkmak için bir Stop komut (t) kullanın. Komut istemi standart komut istemine geri döner.

C:\ps-test>

Kesme noktalarını silmek için ve Remove-PsBreakpoint cmdlet'lerini Get-PsBreakpoint kullanın.

PS C:\ps-test> Get-PSBreakpoint| Remove-PSBreakpoint

İşlevde psversion yeni bir komut kesme noktası oluşturun.

PS C:\ps-test> Set-PSBreakpoint -command psversion -script test.ps1

Bu komutu şu şekilde kısaltabilirsiniz:

PS C:\ps-test> sbp -c psversion -s test.ps1

Şimdi betiği çalıştırın.

PS C:\ps-test> .\test.ps1
Hit Command breakpoint on 'C:\ps-test\test.ps1:psversion'

test.ps1:12  psversion
DBG>

Betik, işlev çağrısında kesme noktasına ulaşır. Bu noktada işlev henüz çağrılmamıştır. Bu, kesme noktasının yürütülmesi için koşullar ayarlamak veya günlük başlatma ya da tanılama ya da güvenlik betiği çağırma gibi hazırlık veya tanılama görevlerini gerçekleştirmek için 'in Action parametresini Set-PSBreakpoint kullanma fırsatı verir.

Eylem ayarlamak için, komut dosyasından çıkmak için Devam komutu (c) ve geçerli kesme noktasını silmek için bir Remove-PsBreakpoint komut kullanın. (Kesme noktaları salt okunur olduğundan, geçerli kesme noktasına eylem ekleyemezsiniz.)

DBG> c
Windows PowerShell 2.0
Have you run a background job today (start-job)?
Done C:\ps-test\test.ps1

PS C:\ps-test> Get-PSBreakpoint| Remove-PSBreakpoint
PS C:\ps-test>

Şimdi bir eylemle yeni bir komut kesme noktası oluşturun. Aşağıdaki komut, işlev çağrıldığında değişkenin değerini $scriptName günlüğe kaydeden bir eylemle bir komut kesme noktası ayarlar. break Anahtar sözcük eylemde kullanılmadığından yürütme durmaz. Backtick (`), satır devamlılığı karakteridir.

PS C:\ps-test> Set-PSBreakpoint -command psversion -script test.ps1  `
-action { add-content "The value of `$scriptName is $scriptName." `
-path action.log}

Kesme noktası için koşullar ayarlayan eylemler de ekleyebilirsiniz. Aşağıdaki komutta, komut kesme noktası yalnızca yürütme ilkesi RemoteSigned olarak ayarlandığında yürütülür ve bu ilke betikleri çalıştırmanıza izin veren en kısıtlayıcı ilkedir.

PS C:\ps-test> Set-PSBreakpoint -script test.ps1 -command psversion `
-action { if ((Get-ExecutionPolicy) -eq "RemoteSigned") { break }}

break Eylemdeki anahtar sözcük hata ayıklayıcıyı kesme noktasını yürütmeye yönlendirir. Hata ayıklayıcısını continue kesmeden yürütmeye yönlendirmek için anahtar sözcüğünü de kullanabilirsiniz. Varsayılan anahtar sözcük olduğundan continue, yürütmeyi durdurmak için belirtmeniz break gerekir.

Şimdi betiği çalıştırın.

PS C:\ps-test> .\test.ps1
Hit Command breakpoint on 'C:\ps-test\test.ps1:psversion'

test.ps1:12  psversion

Yürütme ilkesi RemoteSigned olarak ayarlandığından, işlev çağrısında yürütme durdurulur.

Bu noktada, çağrı yığınını denetlemek isteyebilirsiniz. cmdlet'ini Get-PsCallStackGet-PsCallStack veya hata ayıklayıcı komutunu (k kullanın. Aşağıdaki komut geçerli çağrı yığınını alır.

DBG> k
2: prompt
1: .\test.ps1: $args=[]
0: prompt: $args=[]

Bu örnekte, PowerShell hata ayıklayıcısını kullanmanın birkaç yolu gösterilmektedir.

PowerShell'deki Diğer Hata Ayıklama Özellikleri

PowerShell hata ayıklayıcısına ek olarak, PowerShell betiklerde ve işlevlerde hata ayıklamak için kullanabileceğiniz diğer birçok özellik içerir.

  • Cmdlet, Set-PSDebug adımlama ve izleme de dahil olmak üzere çok temel betik hata ayıklama özellikleri sunar.

  • Başlatılmamış değişkenlere başvuruları algılamak, bir nesnenin Set-StrictMode var olmayan özelliklerine başvurular ve geçerli olmayan işlev söz dizimi için cmdlet'ini kullanın.

  • Değişkenlerin değerini görüntüleyen deyimler, komut satırından girişi okuyan deyimler veya geçerli yönergeyi raporlayan deyimler gibi bir betike tanılama deyimleri ekleyin. Bu görev için Yazma fiilini içeren , , Write-Warningve Write-Verbosegibi Write-HostWrite-Debugcmdlet'leri kullanın.

Ayrıca bkz.