Logicielsmoto.com
http://www.logicielsmoto.com/phpBB/

Outil de debug indépendant
http://www.logicielsmoto.com/phpBB/viewtopic.php?f=2&t=688
Page 1 sur 1

Auteur:  Bentoc [ 16 Nov 2022, 23:17 ]
Sujet du message:  Outil de debug indépendant

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
WDDebug.png [ 45.39 Kio | Vu 14667 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-java

En 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.

Auteur:  Samuel Devulder [ 17 Nov 2022, 10:43 ]
Sujet du message:  Re: Outil de debug indépendant

Suggestion: au lieu d'avoir tout en statique, peut-on faire que le search cherche un symbole et si trouvé l'ajoute dans la liste à afficher dans la boucle principale.

La magie de lire la mémoire d'un autre process est faite par la classe OS que je ne connaissais pas. Google ne semble pas non plus la connaitre. D'où est-ce que ca sort ? Est-ce une surcouche perso aux API windows fournies par SWT ou JNA ?

Auteur:  Bentoc [ 17 Nov 2022, 11:12 ]
Sujet du message:  Re: Outil de debug indépendant

Tout est décrit ici :

https://stackoverflow.com/questions/18849609/how-to-manipulate-memory-from-java-with-jna-on-windows

la classe OS est une classe que j'ai créé et qui reprend le contenu de SolitaireHack du tuto ci dessus.

La démo ci-dessus est juste un exemple, effectivement on peut construire quelque chose de plus dynamique avec gestion d'une liste.

Auteur:  Bentoc [ 21 Nov 2022, 15:48 ]
Sujet du message:  Re: Outil de debug indépendant

Une vidéo qui montre l'avancement :

phpBB [video]


https://youtu.be/AzdKC9fqfzA

Auteur:  Yoann Riou [ 21 Nov 2022, 16:14 ]
Sujet du message:  Re: Outil de debug indépendant

C'est super cool, je suis sur que ca va booster le debugging :bien:

Auteur:  Samuel Devulder [ 21 Nov 2022, 18:30 ]
Sujet du message:  Re: Outil de debug indépendant

Ca commence à prendre forme! :bien:

Une suggestion: dans la liste symbole-adresse, si tu mets les adresses (4 lettres) en premier tu aura un bel alignement dans la liste.

Auteur:  Bentoc [ 21 Nov 2022, 18:41 ]
Sujet du message:  Re: Outil de debug indépendant

c'est fait !
Fichier(s) joint(s):
002.png
002.png [ 15.5 Kio | Vu 14590 fois ]


J'ai également aligné la liste filtrée à défaut de pouvoir l'afficher "par dessus" au moins c'est pile en dessous.
Fichier(s) joint(s):
003.png
003.png [ 9.62 Kio | Vu 14590 fois ]


(possible en c++ mais pas encore dans la version java)

Auteur:  Samuel Devulder [ 21 Nov 2022, 19:18 ]
Sujet du message:  Re: Outil de debug indépendant

j'ai pas vu dans la vidéo s'il y a moyen d'afficher les watch-points en binaire.

Idée 1: prédéfinir les registres moniteurs (ou les sortir dans les *.map) au format binaire ?

Idée 2: un truc à considérer avec les watch-point comme dans éclipse: passer en rouge une valeur qui est différente de celle du cycle d'affichage précédent. Idem avec la carto mémoire à plat (mais c'est peut-être trop couteux car il y a 512ko à scanner). Par contre le cycle d'affichage étant très rapide visuellement, ca peut flashouiller un max rapidement.

Auteur:  Bentoc [ 21 Nov 2022, 20:40 ]
Sujet du message:  Re: Outil de debug indépendant

Il n'y a pas encore d'affichage en binaire pour les watches (à venir, bonne idée).
Par contre c'est présent dans l'éditeur hexa quand on clique sur une valeur.

Je vais faire des fenêtres dédiées pour les registres particuliers (moniteur, palette, ...)

Pour la mise en couleur je vais faire des essais pour voir, il y a un autre truc sympa pour les watches :
(Evidement c'est animé, il suffit d'historiser les valeurs.)

Fichier(s) joint(s):
004.png
004.png [ 39.93 Kio | Vu 14584 fois ]

Auteur:  Bentoc [ 23 Nov 2022, 14:02 ]
Sujet du message:  Re: Outil de debug indépendant

J'ai ajouté une boite de dialogue pour suivre l'allocation des objets dans le moteur de jeu.
Il n'y a pas de spécifique à la démo Sonic, on utilise des étiquette "standard" du moteur de jeu.
Y compris pour retrouver les noms des objets (étiquettes commençant par ObjID_)
Donc ça fonctionne pour n'importe quelle démo déjà réalisée avec ce moteur.

https://youtu.be/GDq_b3KsrZQ
phpBB [video]


Suite à ça on voit qu'on peut améliorer l'instanciation des objets :
- ajout d'un test de position verticale pour allouer/désallouer les objets (actuellement uniquement fait sur l'axe x) => ça je le savais déjà
- diminution de la proximité d'allocation à mettre en place pour certains objets (immobiles, ...) => c'est là ou l'outil de debug va aider a tester / valider la distance d'allocation en fonction de la position camera.
A la fin de la vidéo on a une belle collection d'objets ... clairement c'est trop, il faut désallouer ces pics avec une distance plus petite à la camera.
On voit aussi la capacité des slots, pour le moment il en reste ... mais on n'a pas encore tous les objets.

Pour certains objets (ennemis se déplaçant) il est cependant nécessaire de conserver une désallocation un peu "lâche", ce qui permet de les faire se déplacer en bordure d'écran sans qu'il perde son "action/déplacement" en cours dès qu'il n'est plus affiché.

Auteur:  Samuel Devulder [ 23 Nov 2022, 17:06 ]
Sujet du message:  Re: Outil de debug indépendant

Wahou c'est super ce moniteur du moteur de jeu. :love:

Par contre le FPS à 45+imgs/sec, ne me semble pas réaliste. Tu fais tourner l'émul à x4 ?

Je vois aussi qu'il y a un objet "spring", or je ne l'ai jamais vu à l'écran. Il se planque où dans le décors ?

Auteur:  Bentoc [ 23 Nov 2022, 17:19 ]
Sujet du message:  Re: Outil de debug indépendant

le fps c'est celui du debugger (boucle de rendu DearImGui) :D
ça me permet de voir le taux de refresh des données de debug, l'emul tourne bien a la vitesse normale.

L'objet spring est instancié mais le code est "vide", je n'ai pas chargé encore les graphismes (les .png sont prêts).

Auteur:  Bentoc [ 24 Mar 2023, 08:42 ]
Sujet du message:  Re: Outil de debug indépendant

J'ai ajouté un nouvel outil de visualisation dans le debugger :

Fichier(s) joint(s):
2023-03-24 08_39_19-DCMOTO  - Mise au point.png
2023-03-24 08_39_19-DCMOTO - Mise au point.png [ 41.24 Kio | Vu 12732 fois ]


Il parle de lui même ... :sol:

Auteur:  Bentoc [ 24 Mar 2023, 08:43 ]
Sujet du message:  Re: Outil de debug indépendant

ps : la petite coche en haut permet de visualiser le buffer video de travail, très pratique

Auteur:  Samuel Devulder [ 24 Mar 2023, 09:07 ]
Sujet du message:  Re: Outil de debug indépendant

Cool :cool: Elle permet décidément plein de choses cette bibliothèque ImGui-Java

Page 1 sur 1 Heures au format UTC + 1 heure
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/