Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Les points d’arrêt conditionnels dans WinDbg et d’autres débogueurs Windows sont utiles lorsque vous devez interrompre le programme uniquement si une condition particulière est remplie.
Un point d’arrêt conditionnel est créé avec le paramètre « /w » sur le bp (Définir le point d’arrêt) ou une autre commande de point d’arrêt. La syntaxe de base de la commande est la suivante :
0:000> bp /w "(Condition)" Address
Le point d'arrêt provoquera seulement une interruption dans le débogueur lorsque la condition spécifiée est vraie. Le « w » est une abréviation de « quand ». L’expression de condition peut être tout ce qui peut être utilisé avec la commande dx (Display Debugger Object Model Expression). Cela inclut la plupart des expressions de style C++, notamment des comparaisons, des opérations arithmétiques, des opérations de pointeur et d’autres. Par exemple, un point d’arrêt conditionnel de base qui s’arrête uniquement lorsqu’une variable est supérieure à 20 peut être écrite comme suit :
0:000> bp /w "MyVar > 20" `mysource.cpp:143`
Étant donné que la condition est évaluée à l’aide du modèle objet du débogueur, vous pouvez également tirer parti des éléments tels que la prise en charge NatVis. Par exemple, en supposant que myVec est un std::vector<int>, vous pouvez créer une condition telle que :
0:000> bp /w "myVec.Count() == 4" `mysource.cpp:143`
Cela se décompose lorsque la ligne 143 de mysource.cpp est exécutée alors que la variable myVec a 4 éléments.
Au-delà de natvis, vous pouvez également appeler une fonction JavaScript. Si vous chargez un script à l’aide de la fenêtre de script WinDbg ou de la commande .scriptload (Load Script) qui contient une fonction appelée « myFunc », vous pouvez définir un point d’arrêt comme suit :
0:000> bp /w "@$scriptContents.myFunc()" `mysource.cpp:143`
Pour plus d’informations sur l’écriture de fonctions et d’extensions JavaScript dans le débogueur, consultez Script du débogueur JavaScript
Bien que les expressions de niveau supérieur soient généralement les plus utiles, il est également possible d’évaluer les registres à l’aide de ces expressions. Par exemple, vous pouvez créer un point d’arrêt qui se déclenche uniquement lorsque le pointeur de pile atteint un seuil :
0:000> bp /w "@esp < 0x6ff9f8" `mysource.cpp:143`
Syntaxe de point d’arrêt conditionnel héritée
Avant la disponibilité du paramètre « /w » aux commandes de point d’arrêt, la méthode recommandée pour définir des points d’arrêt conditionnels était d’utiliser la commande j (Execute If - Else) ou le jeton .if, suivi de la commande gc (Aller à partir du point d’arrêt conditionnel). Bien que ces méthodes de définition de points d’arrêt conditionnels ne soient plus recommandées, elles fonctionnent toujours et vous pouvez voir cette syntaxe référencée dans d’autres sources.
La syntaxe de base d’un point d’arrêt conditionnel à l’aide de la commande j est la suivante :
0:000> bp Address "j (Condition) 'OptionalCommands'; 'gc' "
Syntaxe de base d’un point d’arrêt conditionnel à l’aide du jeton .if est la suivante :
0:000> bp Address ".if (Condition) {OptionalCommands} .else {gc}"