Outils pour utilisateurs

Outils du site


dev:powershell:debogage_des_scripts

Ceci est une ancienne révision du document !


PowerShell : Débogage des scripts

Un script ou une fonction peut se comporter comme une cmdlet compilée si on lui ajoute l'attribut CmdletBinding. On ajoute l'attribut en utilisant le décorateur [CmdletBinding()] dans le bloc Param(). Une fois l'attribut spécifié, on peut utiliser les options existantes sur les cmdlets compilées comme -Verbose et -Debug.

Param(
   [CmdletBinding()]
   [Parameter(Mandatory)]
   [ValidateSet("Low","Average","High")]
   [String] $BatteryLevel
)
 
 
Write-Host "Niveau de batterie : ${1}", $SBatteryLevel
 
# Ce message n'est affiché que si l'option -Verbose est spécifiée lors de l'appel
Write-Verbose 'Ceci est un message supplémentaire pour mode verbeux'
 
# Ce message n'est affiché que si l'option -Debug est spécifiée lors de l'appel
Write-Debug 'Ceci est un message de debogage de script'

L'appel du script sans option :

.\aTestScript.ps1 -BatteryLevel Low
Niveau de batterie :  Low

Si le script est appelé avec l'option -Verbose :

.\aTestScript.ps1 -BatteryLevel Low -Verbose
Niveau de batterie :  Low
COMMENTAIRES : Ceci est un message supplémentaire pour mode verbeux

Si le script est appelé avec l'option -Debug :

.\aTestScript.ps1 -BatteryLevel Low -Debug
Niveau de batterie :  Low
DÉBOGUER : Ceci est un message de debogage de script

Exécution du débogueur

L'appel de la cmdlet Wait-Debugger dans le script permet de basculer l’exécution du script en mode débogage.

# L'execution sera stoppée à partir d'ici
Wait-Debugger

Une console en mode interactif est disponible dans le débogueur, le prompt contient [DBG], saisir ? pour afficher les commandes disponibles.

Utiliser les points d'arrêts

Le point d'arrêt suspend l'exécution du script et bascule en mode débogage : une invite de commande en mode interactif est disponible dans le contexte d'exécution du script. On peut ainsi afficher les valeurs des variables taper des commandes de débogage et analyser le comportement du script pas à pas.

Plusieurs options existent pour la création de points d'arrêts notamment :

  • -Line : stoppe l'exécution à la ligne spécifiée ;
  • -Variable : stoppe l’exécution lors de l'accès en lecture/écriture ;
  • -Command : stoppe l'exécution sur une commande spécifiée.
# Depuis la console on peut définir un ou plusieurs points d'arrêts
 
# Stoppera l'execution du script à la ligne 10
Set-PSBreakpoint -Script '.\aTestScript.ps1' -Line 10
 
# Stoppera l'exécution du script à la lecture de la la variable BatteryLevel
Set-PSBreakpoint -Script .\aTestScript.ps1 -Variable BatteryLevel -Mode Read
 
# Stoppera l'execution du script lors d'un appel a Write-Verbose
Set-PSBreakpoint -Script .\aTestScript.ps1 -Command Write-Verbose

A ce stade les points d'arrêts sont définis mais le script n'a pas été lancé. Pour lister les points d'arrêts :

# Lister les points d'arrêts existants
Get-PSBreakpoint
 
  ID Script                                 Line Command                                Variable                               Action
  -- ------                                 ---- -------                                --------                               ------
   1 aTestScript.ps1                          10
   2 aTestScript.ps1                                                                    BatteryLevel
   3 aTestScript.ps1                             Write-Verbose

On appelle le script depuis la console, il bascule en mode débogage dès qu'un point d'arrêt est rencontré:

.\aTestScript.ps1 -BatteryLevel High
Appuyez sur Point d'arrêt de ligne sur « C:\Users\yoann\dev\aTestScript.ps1:10 »
 
Au caractère C:\Users\yoann\dev\aTestScript.ps1:10 : 6
+ For ($i=0; $i -lt 3; $i++) {
+      ~~~~
[DBG]: PS C:\Users\yoann\dev>>

Supprimer les points d'arrêts

Chaque point d'arrêt a un identifiant affiché par Get-PSBreakpoint. Utiliser la cmdlet Remove-PSBreakpoint pour supprimer les points d'arrêts après utilisation.

Remove-PSBreakpoint -Id 1
Remove-PSBreakpoint -Id 2 
Remove-PSBreakpoint -Id 3

Références

dev/powershell/debogage_des_scripts.1688461633.txt.gz · Dernière modification : 2023/07/04 09:07 de yoann