Vous parcourez le code C / C ++ et vous venez d’appeler une API Win32 qui a échoué (généralement en renvoyant un code d’erreur générique inutile, comme 0). Votre code ne fait pas un appel GetLastError () suivant dont vous pouvez vérifier la valeur de retour pour plus d’informations sur les erreurs.
Comment pouvez-vous obtenir la valeur d’erreur sans recomstackr et reproduire l’échec? La saisie de “GetLastError ()” dans la fenêtre Watch ne fonctionne pas (“erreur de syntaxe”).
Comme mentionné à quelques resockets, le pseudo-registre @err
affichera la dernière valeur d’erreur, et @err,hr
affichera l’erreur sous forme de chaîne (si possible).
Selon Andy Pennell, membre de l’équipe Visual Studio, à partir de VS 7 (Visual Studio .NET 2002), utiliser le caractère ‘@’ pour indiquer que les pseudo-registres sont obsolètes – ils préfèrent utiliser ‘$’ (comme dans $err,hr
). Les deux $ et @ sont supportés pour le moment.
Vous pouvez également utiliser le pseudo-registre $ err dans un point d’arrêt conditionnel; vous pouvez donc casser une ligne de code uniquement si la dernière erreur est non nulle. Cela peut être un tour très pratique.
Quelques autres pseudo-registres que vous pouvez trouver utiles (tirés du livre remarquable de John Robbins, “Debugging Applications for Microsoft .NET and Microsoft Windows” ):
$tib
– affiche le bloc d’informations sur les threads $clk
– montre un compte d’horloge (utile pour les fonctions de synchronisation). Pour l’utiliser plus facilement, placez une montre $clk
puis une montre $clk=0
supplémentaire. La seconde montre effacera le pseudo-registre après l’affichage de la valeur actuelle, donc la prochaine étape ou étape vous laissera le temps de cette action uniquement. Notez que c’est un moment difficile qui inclut un peu de surcharge du débogueur, mais cela peut quand même être très utile. ERR,hr
dans une fenêtre de surveillance fait généralement le tour
“edit and continue” ajoute le code pour que vous puissiez voir l’erreur (mais ne créez pas une nouvelle variable globale pour le stocker). Cela fonctionne très bien si vous pouvez rapidement appeler une fonction préexistante qui exécute ce type de code de gestion des erreurs.
En prime, vous pouvez aussi laisser le nouveau code pour le futur.
Si vous ne pouvez pas faire cela, alors QBziZ a raison “ERR, hr” le fait.