Les détails du fonctionnement d'un débogueur dépendent de ce que vous déboguez et du système d'exploitation. Pour le débogage natif sur Windows, vous pouvez trouver quelques détails sur MSDN: API de débogage Win32 .
L'utilisateur indique au débogueur à quel processus se connecter, soit par nom, soit par ID de processus. S'il s'agit d'un nom, le débogueur recherchera l'ID de processus et lancera la session de débogage via un appel système; sous Windows, ce serait DebugActiveProcess .
Une fois attaché, le débogueur entrera dans une boucle d'événements un peu comme pour n'importe quelle interface utilisateur, mais au lieu d'événements provenant du système de fenêtrage, le système d'exploitation générera des événements en fonction de ce qui se passe dans le processus en cours de débogage - par exemple une exception se produisant. Voir WaitForDebugEvent .
Le débogueur est capable de lire et d'écrire la mémoire virtuelle du processus cible, et même d'ajuster ses valeurs de registre via les API fournies par le système d'exploitation. Consultez la liste des fonctions de débogage pour Windows.
Le débogueur peut utiliser les informations des fichiers de symboles pour traduire des adresses en noms et emplacements de variables dans le code source. Les informations du fichier de symboles constituent un ensemble distinct d'API et ne font pas partie intégrante du système d'exploitation en tant que tel. Sur Windows, c'est via le SDK Debug Interface Access .
Si vous déboguez un environnement géré (.NET, Java, etc.), le processus sera généralement similaire, mais les détails sont différents, car l'environnement de la machine virtuelle fournit l'API de débogage plutôt que le système d'exploitation sous-jacent.