Question [Fonction]Cmt recupérer la pile d'appel/callstack?
- Laurent Dardenne
- Auteur du sujet
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 17 ans 8 mois #2506
par Laurent Dardenne
Tutoriels PowerShell
Pour récupérer la pile d'appel on utilisera la fonction suivante :
[code:1]function Get-CallStack{
#Auteur Bruce Payette
#Erreur : Get-Variable : The scope number '5' exceeds the number of active scopes
trap { continue }
0..100 | foreach {
$var = Get-Variable -scope $_ myinvocation
#le dernier élément du tableau est vide
$var.Value.PositionMessage -replace \"`n\"
}
}[/code:1]
Pour afficher, à partir de la pile d'appel, uniquement le nom de la fonction/script en cours d'exécution :
[code:1]
function ParseStack([string[]] $Stack)
{ #On analyse des chaînes du type: At line:48 char:7+ NomDeScriptOuNomDeFonction <<<<
#Tableau de chaînes provenant d'un appel à Get-CallStack
$Result=new-object System.Text.StringBuilder
#le premier élément du tableau contient l'appel à Get-CallStack
#Parcours inverse
for($i=$Stack.Count-1; $i -ge 1;$i--)
{
if ($Stack[$i] -match \"^(.*)\+(.*) <<<<\"«»)
{ #Ajoute un séparateur sauf pour le premier
if ($i -ne $Stack.Count-2)
{[void]$Result.Append(\":\"«»)}
[void]$Result.Append($Matches[2].Trim())
}
}
$Result.ToString();
}[/code:1]
Code à ajouter dans la fonction ou dans un script :
[code:1]$Stack=Get-CallStack
ParseStack $Stack
write-Debug (\"CallStack {0}\" -F (ParseStack $Stack) )[/code:1]
[code:1]function Get-CallStack{
#Auteur Bruce Payette
#Erreur : Get-Variable : The scope number '5' exceeds the number of active scopes
trap { continue }
0..100 | foreach {
$var = Get-Variable -scope $_ myinvocation
#le dernier élément du tableau est vide
$var.Value.PositionMessage -replace \"`n\"
}
}[/code:1]
Pour afficher, à partir de la pile d'appel, uniquement le nom de la fonction/script en cours d'exécution :
[code:1]
function ParseStack([string[]] $Stack)
{ #On analyse des chaînes du type: At line:48 char:7+ NomDeScriptOuNomDeFonction <<<<
#Tableau de chaînes provenant d'un appel à Get-CallStack
$Result=new-object System.Text.StringBuilder
#le premier élément du tableau contient l'appel à Get-CallStack
#Parcours inverse
for($i=$Stack.Count-1; $i -ge 1;$i--)
{
if ($Stack[$i] -match \"^(.*)\+(.*) <<<<\"«»)
{ #Ajoute un séparateur sauf pour le premier
if ($i -ne $Stack.Count-2)
{[void]$Result.Append(\":\"«»)}
[void]$Result.Append($Matches[2].Trim())
}
}
$Result.ToString();
}[/code:1]
Code à ajouter dans la fonction ou dans un script :
[code:1]$Stack=Get-CallStack
ParseStack $Stack
write-Debug (\"CallStack {0}\" -F (ParseStack $Stack) )[/code:1]
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.037 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Contributions à la communauté
- [Fonction]Cmt recupérer la pile d'appel/callstack?