Si vous développez avec Visual Studio C++, vous avez peut-être remarqué une fonctionnalité bien pratique, mais qui peut devenir très énervant quand on n’en veut pas ; c’est le comportement par défaut de la touche F12 sous le débogueur.
En effet, quand une application est lancée sous le débogueur et que vous appuyez sur la touche F12, ça déclenche automatiquement un point d’arrêt utilisateur (__asm int3). C’est pratique si on veut arrêter rapidement un programme mais quand on veut utiliser cette touche pour déclencher un comportement précis dans l’application, ça devient vite pénible de se retrouver avec le programme bloqué.
Alors oui, une méthode simple, me direz-vous, est de ne pas utiliser la touche F12, mais quand toutes les touches de fonctions sont déjà prises et bien on a pas le choix. De plus, cette touche est bien pratique, car c’est la dernière sur le pavé des touches de fonctions et donc elle est facile d’accès.
J’ai fait le tour sur le net et je me suis aperçu que ça n’avait rien à voir avec Visual Studio, mais que c’était un comportement intrinsèque à Windows !
La bonne nouvelle c’est qu’il est possible de changer la touche qui déclenchera le point d’arrêt utilisateur. Pas mal de sites web expliquent comment faire en mettant un lien sur une page de Microsoft qui n’est plus disponible, alors après des recherches plus approfondies, j’ai enfin trouvé :
Dans la base de registre, il y a le répertoire HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug qui contient 2 variables bien pratiques :
Auto: Par défaut à 1, si on met cette clé à 0, alors le déboguer ne prendra pas la main si un programme plante. (plus d’info…)
UserDebuggerHotKey: Par défaut à 0, cette clé indique quelle touche déclenche le fameux point d’arrêt. 0x0 correspond à la touche F12, et 0x13 à la touche PAUSE qui, je trouve, est plus adaptée pour mettre le programme en pause. Pour la liste complète des touches disponibles et plus d’info, c’est là…
Ah, une dernière chose, comme vous pouvez peut-être vous en doutez, pour que la nouvelle touche soit prise en compte, il faut relancer… Windows… Bon reboot.
Désactiver le user breakpoint sur le F12

