45 votes

Comment exécuter GetLastError () lors du débogage dans Visual Studio

Vous parcourez le code C / C ++ et venez d'appeler une API Win32 qui a échoué (généralement en renvoyant un code d'erreur générique inutile, tel que 0). Votre code ne fait pas un appel ultérieur à GetLastError () dont vous pouvez inspecter la valeur de retour pour rechercher des informations d'erreur supplémentaires.

Comment obtenir la valeur d'erreur sans recompiler et reproduire l'échec? La saisie de "GetLastError ()" dans la fenêtre de surveillance ne fonctionne pas ("erreur de syntaxe").

61voto

Michael Burr Points 181287

Comme mentionné à quelques reprises, l' @err de 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 en $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.

Certains 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 additionnelle $clk=0 montre. 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.

6voto

QBziZ Points 1556

ERR,hr dans une fenêtre de surveillance fait habituellement l'affaire

0voto

gbjbaanb Points 31045

"edit and continue" ajoute le code pour que vous puissiez voir l'erreur (ne créez pas de nouvelle variable globale pour la stocker). Cela fonctionne vraiment bien si vous pouvez rapidement appeler une fonction préexistante qui exécute ce type de code de traitement des erreurs.

En prime, vous pouvez également laisser le nouveau code à l'avenir.

Si vous ne pouvez pas faire cela, alors QBziZ a raison "ERR, hr" le fait.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X