Je vous propose d'échanger ici sur un nouveau concept de debugger indépendant.
L'idée est d'utiliser un socle technique simple pour inspecter la mémoire d'un émulateur lors de son exécution.
Un premier exemple avec DCMOTO :
Fichier(s) joint(s):
WDDebug.png [ 45.39 Kio | Vu 19070 fois ]
L'exemple affiche :
- quelques variables du personnage principal
- un fenêtre de recherche qui permet de saisir un symbole et de visualiser la valeur correspondante en mémoire en temps réel
En entrée du debugger on passe un fichier .map généré par lwasm à la compilation et qui liste les symboles
Le deuxième effet kisscool ... c'est la simplicité de mise en oeuvre :
Code:
public void process() {
if (Emulator.pid == 0) {
ImGui.text("Waiting for process <"+Emulator.processName+">");
Emulator.pid = OS.getProcessId(Emulator.processName);
Emulator.process = OS.openProcess(OS.PROCESS_VM_READ|OS.PROCESS_VM_OPERATION, Emulator.pid);
return;
}
if (Emulator.process != null) {
ImGui.text("image_set:"+Emulator.getShort(s, "MainCharacter","image_set"));
ImGui.text("x_pos:"+Emulator.getShort(s, "MainCharacter","x_pos"));
ImGui.text("y_pos:"+Emulator.getShort(s, "MainCharacter","y_pos"));
ImGui.text("x_vel:"+Emulator.getShort(s, "MainCharacter","x_vel"));
ImGui.text("y_vel:"+Emulator.getShort(s, "MainCharacter","y_vel"));
if (ImGui.begin("Search", ImGuiWindowFlags.AlwaysAutoResize)) {
ImGui.inputText("symbol", str, ImGuiInputTextFlags.CallbackResize);
ImGui.text("value: " + Emulator.getShort(s, str.get()));
}
}
ImGui.end();
}
C'est tout ce qui faut écrire pour implémenter les fenêtres de debug présentées dans la capture d'écran.
Le lancement de l'outil est indépendant de l'émulateur, on peut laisser l'émul tourner, ajouter des infos de debug, recompiler et relancer le debugger et hop il reprend la lecture de la ram.
Ainsi on ne perd pas le contexte de test.
La lib graphique c'est :
https://github.com/SpaiR/imgui-javaEn quelques heures de travail c'est plutôt sympa d'arriver à ce résultat ! Le plus long a été la mise en place de la lecture de la mémoire d'un processus.
Pour l'instant le processus est récupéré par le titre de la fenetre de l'émulateur, mais je remplacerai ça par une sélection dans une liste.
Je rajouterai également la gestion de teo et probablement theodore dans un avenir proche.