Comment exécuter GetLastError() lors du débogage dans Visual Studio
Vous êtes parcourant le code C/C++ et viens d'appeler une API Win32 qui a échoué (généralement en les rendant inutiles code d'erreur générique, comme le 0). Votre code n'est pas de faire une autre GetLastError() appel dont la valeur de retour vous pourrait inspecter pour de plus amples informations sur l'erreur.
Comment pouvez-vous obtenir la valeur de l'erreur sans avoir à recompiler et à la reproduction de l'échec? En entrant "GetLastError()" dans la fenêtre Watch ne fonctionne pas ("erreur de syntaxe").
Vous devez vous connecter pour publier un commentaire.
Comme mentionné à quelques reprises, le
@err
pseudo-registre pour afficher la dernière valeur de l'erreur, et@err,hr
affiche l'erreur comme une chaîne de caractères (si il peut).Selon Andy Pennell, un membre de l'équipe Visual Studio, en commençant par VS 7 (Visual Studio .NET 2002), en utilisant le caractère '@' pour indiquer le pseudo-registres est obsolète - ils préfèrent utiliser '$' (comme dans
$err,hr
). Les deux $ et @ sont pris en charge pour le moment.Vous pouvez également utiliser le $err pseudo-s'inscrire dans un point d'arrêt conditionnel; de sorte que vous pouvez briser sur une ligne de code seulement si la dernière erreur est non nulle. Cela peut être un très astuce bien pratique.
Quelques autres pseudo-registres que vous pouvez trouver à portée de main (à partir de John Robbins livre exceptionnel, "Le débogage des Applications pour Microsoft .NET et Microsoft Windows"):
$tib
- affiche les informations de thread bloc$clk
- affiche une horloge de comptage (utile pour des fonctions de temporisation). Pour utiliser plus facilement, placez une$clk
regarder puis un supplément$clk=0
regarder. La deuxième montre clairement le pseudo-registre après l'affichage de la valeur actuelle, la prochaine étape ou étape au-dessus de vous faire vous donne le temps de cette action. Notez que ceci est une ébauche de calendrier qui comprend un peu juste de la débogueur dessus, mais il peut encore être très utile.ERR,hr
dans une fenêtre d'observation fait habituellement le tourERR
variable dans la portée et ce serait d'imprimer vous quelque chose de différent que le dernier code d'erreur."modifier et continuer", ajoutez le code de sorte que vous pouvez voir l'erreur (il suffit de ne pas créer une nouvelle variable globale pour stocker). Il fonctionne vraiment bien si vous pouvez rapidement mettre un appel à une pré-existante de la fonction qui s'exécute ce genre de code de gestion d'erreur.
Comme un bonus, vous pouvez laisser le nouveau code pour l'avenir aussi.
Si vous ne pouvez pas faire cela, alors QBziZ est droit "ERR,hr" le fait.