Comment trouver et corriger les Bogues dans les Logiciels commerciaux sous Windows
Selon Wikipedia, « Un bogue logiciel est une erreur, un défaut, une défaillance ou un défaut dans un programme informatique ou un système qui le fait produire un résultat incorrect ou inattendu, ou se comporter de manière involontaire, éventuellement planter l’application. Le processus de correction des bogues est appelé « débogage » et utilise souvent des techniques ou des outils formels pour identifier les bogues. »
La plupart du temps, les bogues peuvent être reproduits dans un environnement de développement et corrigés avant d’envoyer une version en production. Mais parfois, les bogues dépendent de l’environnement ou du profil particulier des utilisateurs — par exemple, en utilisant des caractères spéciaux dans un nom de dossier — ce qui rend plus difficile la compréhension de la cause première d’un bogue. Les pires bogues nécessiteront un support utilisateur pour configurer une session de partage d’écran afin de regarder un utilisateur reproduire un bogue.
Chez Dashlane, l’équipe Windows utilise plusieurs outils pour trouver et reproduire les bugs:
- Journaux techniques pour repérer les problèmes et aider à les résoudre, nécessitant parfois plusieurs itérations et une interaction avec l’utilisateur rencontrant un problème
- Microsoft Process Monitor et Process Explorer, deux outils gratuits qui identifient les mauvaises installations ou un environnement corrompu
Récemment, Microsoft a introduit une nouvelle version d’un autre outil de développement, WinDbg. Cette application a été portée dans une application UWP, est disponible gratuitement sur Microsoft Store et est livrée avec une fonctionnalité très agréable et utile: TTD, ou Débogage de voyage dans le temps. Pensez à un moment où vous avez dû corriger un bogue très difficile à reproduire qui ne se produisait que sur une machine spécifique. Ou pensez au temps que vous avez passé à installer un environnement de développeur sur cette machine — si vous le pouviez. Et puis pensez au nombre de fois que vous avez dû lancer votre application en mode débogage afin de reproduire le bogue, puis vous avez manqué la ligne corrompue en frappant accidentellement F5 au lieu de F11. TTD transforme cela en un morceau de gâteau, car vous n’avez besoin d’enregistrer le bogue qu’une seule fois pour vous permettre de le rejouer encore et encore, à la fois en avant et en arrière.
Débogage de voyage dans le temps avec WinDbg
TTD est une solution de débogage inverse. Il se compose de 3 étapes:
- Enregistrez l’application ou le processus sur la machine qui peut reproduire le bogue. Utilisez WinDbg avec les droits d’administrateur et lancez un exécutable, ou attachez-le à un déjà en cours d’exécution pour enregistrer sa trace. Le résultat est un fichier (.exécuter l’extension) contenant toutes les informations pour reproduire le bogue. Pour cette raison, chez Dashlane, nous ne pouvons l’utiliser que pour déboguer les bogues qui se produisent avant la connexion afin de ne pas collecter les informations sensibles des utilisateurs.
- Rejouez la trace enregistrée en avant et en arrière autant de fois que nécessaire pour comprendre le problème. Une fois chargé, WinDbg crée un index de la trace, qui fournit une recherche de mémoire complète et rapide. Le fichier enregistré peut être chargé sur n’importe quelle machine; nous l’ouvrons généralement sur une machine de développement, où nous pouvons charger le code source et les symboles PDB. De cette façon, nous pouvons rejouer la trace lorsque nous exécutons du code dans notre EDI avec des enregistrements de processus et de mémoire de la machine enregistrée. (Assurez-vous que le code source et les symboles correspondent à la version du processus enregistré.)
- Analysez en ajoutant des points d’arrêt, exécutez des requêtes pour identifier les problèmes de code courants et obtenez un accès complet à la mémoire et aux locaux pour comprendre ce qui se passe.
Exemple
Supposons que vous ayez écrit et construit une application console simple.
void
GuiltyFunction(
int
a,
int
b,
int
c)
{
int
x = a + b + c;
int
y = 0;
y = x / b;
}
int
main()
{
int
a = 10;
int
b = 0;
int
c = 3;
GuiltyFunction(a, b, c);
return
0;
}
Supposons l’application construite (TestTTD.exe) et le fichier symbole (TestTTD.pdb) sont en C:\TestTTD\bin , et le code source est dans C:\TestTTD\src .
Enregistrement
- Open WinDbg avec droits élevés.
- Dans l’onglet Fichier, choisissez Lancer l’exécutable (avancé). Dans le champ Exécutable, entrez C:\TestTTD\TestTTD .EXE. Vérifiez le processus d’enregistrement avec le débogage de voyage dans le temps, définissez le répertoire de sortie sur un chemin d’accès accessible en écriture et existant, puis cliquez sur OK.
- Lorsque l’application se bloque, WinDbg enregistre un fichier de trace (.exécuter l’extension) et enregistre l’emplacement lors du chargement.
- Arrêtez le débogueur et ouvrez l’emplacement du fichier de trace.
Replay
- Ouvrez WinDbg.
- Dans l’onglet Fichier, sélectionnez Paramètres dans la barre latérale gauche. Sélectionnez Paramètres de débogage, ajouter C:\TestTTD\src vers le champ Chemin source et C:\TestTTD\bin au champ Chemin du symbole. Cliquez sur OK pour enregistrer les modifications.
- Dans l’onglet Fichier, sélectionnez Ouvrir le fichier de trace et accédez au fichier de trace créé à l’étape Enregistrement.
Analyser
- Une fois le fichier de trace enregistré chargé dans WinDbg, ajoutez un point d’arrêt pour arrêter et analyser l’état de l’application. Chargez un fichier de script à partir de l’onglet Source, puis cliquez sur le côté gauche de la ligne du point d’arrêt souhaité. Appuyez sur F5 pour atteindre le point d’arrêt.
- Maintenant, appuyez sur F10 pour passer au-dessus, comme dans une session de débogage Visual Studio. Cliquez sur Revenir en arrière pour revenir en arrière.
Conclusions
Lors du débogage de code de production et de bugs difficilement reproductibles, WinDbg et son débogage de voyage dans le temps sont un excellent outil pour les développeurs qui peuvent aider à gagner du temps et des ressources en enregistrant l’application défectueuse uniquement sur l’environnement affecté et en vous donnant la possibilité de la rejouer n’importe où. Pour plus d’informations, veuillez visiter le blog de Microsoft ou regarder leur démo sur le site Web de MSDN Channel 9.