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 t
yazı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ırarakDebug-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>
: (), (s
v
)StepOver
veyaList
(l
iseStep
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, $PSDebugContext
yerel 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
, process
ve end
bölümleri olan begin
bir 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-PsBreakpoint
Remove-PsBreakpoint
kullanı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 StepOver
zaten 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-PsCallStack
Get-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-Warning
veWrite-Verbose
gibiWrite-Host
Write-Debug
cmdlet'leri kullanın.
Ayrıca bkz.
PowerShell
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin