[DCMOTO] Amélioration de la fonction "Trace"

Couvre tous les domaines de l'émulation ou de la virtualisation ainsi que les discussions sur les divers outils associés.

Modérateurs : Papy.G, fneck, Carl

Avatar de l’utilisateur
Patrice
Messages : 1474
Inscription : 14 janv. 2008 10:42
Localisation : https://www.ville-saintes.fr/
Contact :

Re: [DCMOTO] Amélioration de la fonction "Trace"

Message par Patrice »

Pour DcAlice_20210325 fonctionnement Ok. Merci Daniel pour cette nouvelle amélioration de l'émulateur vraiment très pratique. 8) :D

[EDIT 01] Le traçage est identique pour les modes inactif, statique, pas à pas et saut sous-programme, est ce normal (si oui c'est dommage car une prise en compte de ceux-ci aurait permis d'alléger, quand nécessaire, le listing résultant)?
Mais j'abuse peut-être. :lol:
Dernière modification par Patrice le 25 mars 2021 17:50, modifié 2 fois.
Avatar de l’utilisateur
6502man
Messages : 12242
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: [DCMOTO] Amélioration de la fonction "Trace"

Message par 6502man »

Impeccable Daniel ;)

Ca va rendre bien service aux programmeurs :D
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
Bentoc
Messages : 178
Inscription : 14 sept. 2019 13:35
Localisation : Var - France

Re: [DCMOTO] Amélioration de la fonction "Trace"

Message par Bentoc »

C'est une excellente idée Daniel, avec 2000 lignes c'était tendu pour retrouver le point du code ou le pc "sort des rails".
Maintenant avec la fonction trace, c'est "royal" 8)
On va gagner des heures de debug avec ça ! Merci bcp.
Avatar de l’utilisateur
adnz
Messages : 212
Inscription : 10 janv. 2010 00:07

Re: [DCMOTO] Amélioration de la fonction "Trace"

Message par adnz »

ça c'est cool merci, d'avoir plus de ligne de debug ...

Mais c'est moi bigle ;) ou, moi j'ai max en téléchargement la version dcmoto_20200429

Je ne trouve pas le lien d'une version 2021 !! :(

merci.

[EDIT] ! vu, merci :shock:
Dernière modification par adnz le 25 mars 2021 21:04, modifié 1 fois.
Zebulon
Messages : 2767
Inscription : 02 nov. 2020 14:03

Re: [DCMOTO] Amélioration de la fonction "Trace"

Message par Zebulon »

Le lien de la dernière version se trouve dans le paragraphe sous les copies d'écrans, en tout petit. :D
Daniel
Messages : 17288
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [DCMOTO] Amélioration de la fonction "Trace"

Message par Daniel »

Patrice a écrit : 25 mars 2021 17:05 Le traçage est identique pour les modes inactif, statique, pas à pas et saut sous-programme, est ce normal ?
Je l'ai conçu comme ça : la trace contient toutes les instructions sans exception.
Je prévois déjà un petit aménagement pour éviter de répéter des milliers de fois la même ligne dans le cas des instructions CWAI et SYNC. Par exemple mettre une seule ligne avec un compteur quand il y a plusieurs lignes identiques à la suite.
Avec un fichier trace contenant plus d'un million de lignes ce n'est peut-être pas nécessaire, on verra à l'usage, et on trouvera peut-être d'autres aménagements utiles. J'adapterai en fonction des demandes des développeurs, si elles me semblent justifiées.
Daniel
L'obstacle augmente mon ardeur.
nouvelhermes
Messages : 400
Inscription : 22 juil. 2020 20:56

Re: [DCMOTO] Amélioration de la fonction "Trace"

Message par nouvelhermes »

Bonjour à tous,

Merci Daniel pour cette fonctionnalité.

Malheureusement chez moi, le logiciel (dcmoto ou dcalice) plante quand je coche la case "trace", alors dcmoto et dcalice fonctionnent parfaitement (je suis sous XP SP3)

Une amélioration intéressante (mais certainement difficile à mettre en oeuvre) serait de sélectionner les instructions devant figurer dans le fichier (par ex, uniquement les JSR ou CALL PUTC par exemple).
nouvelhermes
Messages : 400
Inscription : 22 juil. 2020 20:56

Re: [DCMOTO] Amélioration de la fonction "Trace"

Message par nouvelhermes »

Serait-il possible aussi par exemple d'ajouter une case pour n'avoir dans le fichier que les adresses situées en RAM, et éventuellement d'ajouter le numéro de la banque dans laquelle on se trouve ? Et éventuellement quand on lit (écrit) une mémoire écran, l'état de A7C0 ? Je sais ça fait beaucoup.

En tout cas merci pour la fonction.
Avatar de l’utilisateur
Patrice
Messages : 1474
Inscription : 14 janv. 2008 10:42
Localisation : https://www.ville-saintes.fr/
Contact :

Re: [DCMOTO] Amélioration de la fonction "Trace"

Message par Patrice »

Daniel a écrit : 25 mars 2021 21:23 .....Je l'ai conçu comme ça : la trace contient toutes les instructions sans exception....
Cette fonction est très intéressante effectivement pour l'étude en profondeur d'un programme et donc l'analyse de toutes les couches liées au système pour lequel il a été conçu, c'est un plus indiscutable à conserver impérativement. 8) :D
Le seul handicape mineur, c'est le volume du fichier de traçage généré.
De mon point de vue, l'ajout d'une trace effectuée au niveau d'une seule couche (saut des sous-programmes) diminuerait considérablement le volume du fichier de traçage et permettrait également de mettre facilement en évidence l'enchaînement logique du programme en étude. :wink:
Daniel
Messages : 17288
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [DCMOTO] Amélioration de la fonction "Trace"

Message par Daniel »

nouvelhermes a écrit : 26 mars 2021 03:45 Malheureusement chez moi, le logiciel (dcmoto ou dcalice) plante quand je coche la case "trace", alors dcmoto et dcalice fonctionnent parfaitement (je suis sous XP SP3)
Il y a peut-être une incompatibilité des dernières versions de dcmoto avec Windows XP. Il faudrait voir à partir de quelle version ça ne marche plus pour trouver la cause de cette incompatibilité. La fonction Trace n'utilise que des fonctions très classiques, ce n'est pas forcément la cause du problème.
[Edit 10:30] En testant la version 20210325 de dcmoto dans une machine virtuelle Windows XP j'ai aussi le plantage en cliquant sur la case Trace. C'est donc bien la cause du problème. C'est assez surprenant. Je vais chercher l'erreur...
[Edit 11:45] Erreur trouvée : Si on cherche à fermer un fichier jamais ouvert, Windows 10 signale l'erreur mais ne plante pas. Windows XP plante directement. Je corrige en ajoutant un test avant l'appel de la fonction fclose().

Pour les autres sujets :

Dans chaque ligne de la trace il est possible d'ajouter d'autres informations, en particulier la page vidéo et (pour les machines à commutation de banques) la banque RAM et la banque ROM. C'est une information utile pour la mise au point des programmes.

Filtrer les lignes en fonction de différents critères dépasse l'objectif initial, qui est seulement de lister toutes les instructions exécutées. Si on veut faire plus ça va devenir trop compliqué. Les boucles aussi sont gênantes, particulièrement les temporisations avec un compteur de plusieurs milliers de boucles. L'appel répété à la même routine crée aussi beaucoup de lignes pour rien. Mais une trace n'est qu'un outil parmi d'autres et ne peut à lui seul remplacer toutes les techniques de mise au point des programmes. Je ne souhaite pas le rendre trop compliqué.

Dans un premier temps je vais seulement éviter de répéter des lignes successives identiques (CWAI et SYNC) et ajouter les banques mémoire (vidéo, RAM et ROM) à la suite des registres.
Daniel
L'obstacle augmente mon ardeur.
__sam__
Messages : 7909
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [DCMOTO] Amélioration de la fonction "Trace"

Message par __sam__ »

Tiens j'ai trouvé un usage très pratique de cette fonctionnalité pour un de mes projets:

Code : Tout sélectionner

awk '{print $1}' dcmoto_trace.txt | sort | uniq -c | sort -n
Pour ceux qui sont perplexes :shock: et se demandent ce que ca fait, l'explication est par .
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Daniel
Messages : 17288
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [DCMOTO] Amélioration de la fonction "Trace"

Message par Daniel »

A l'usage la trace se révèle bien utile mais difficile à exploiter manuellement à cause de sa taille. Développer des outils pour l'analyser est la meilleure façon d'en tirer parti.

En l'utilisant on s'aperçoit qu'il y a beaucoup de texte inutile dans chaque ligne à la suite de l'instruction (valeurs de tous les registres et numéros des banques mémoire). Je me demande s'il ne faudrait pas afficher les valeurs uniquement si elles ont changé par rapport à la ligne précédente ?

Les boucles de temporisation qui se répètent des dizaines de milliers de fois sont aussi un peu pénibles. Il y a sûrement moyen de faire un post-traitement pour enlever ce qui n'a aucun intérêt. Il faudrait y réfléchir...
Daniel
L'obstacle augmente mon ardeur.
__sam__
Messages : 7909
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [DCMOTO] Amélioration de la fonction "Trace"

Message par __sam__ »

Pour moi les lignes hyper similaires sont un plus. Le moindre changement me saute au yeux alors que si on ne fait qu'afficher le registre qui change, il me faudra lire attentivement chaque ligne pour savoir si le changement concerne le registre qui m'intéresse. Avec le mode colonne, je n'ai qu'à me concentrer sur une seule colonne fixe. Cela m'est plus facile que des lignes de longueur variables.

Je ne sais pas si je suis clair, mais disons que la version "tabulée" est ce que je trouve le plus pratique.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
__sam__
Messages : 7909
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [DCMOTO] Amélioration de la fonction "Trace"

Message par __sam__ »

Peut-être trois suggestions qui me viennent à l'idée. Je ne sais pas si c'est difficile ou pas à mettre en oeuvre, mais je les note ici pour ne pas les perdre:
  1. La limite à 100Mo est bien. Elle permet d'enregistrer 3 secondes d'execution environ. Cependant dans certaines circonstances on en aimerait plus, ou moins. Ne peut on ajouter à la fenêtre de débug la taille du fichier de trace ? (ou si c'est plus simple le nombre d'instructions à écrire dans le fichier)
  2. Alors que j'utilisais la trace pour trouver comment tricher, Bentoc a fait cette remarque
    Bentoc a écrit :Il ne manque plus que le nombre de cycles par instruction dans la trace dcmoto pour avoir un profiler de compétition !
    Et effectivement, si on pouvait avoir dans la partie droite pour le nombre de cycles dans l'instruction, je peux facilement pondérer le nombre de fois où on a exécuté une instruction pour avoir le profiler super précis pour analyser plus tard les routines à partir d'une trace d'execution réelle,
  3. Enfin, dans l'optique d'améliorer un jeu, je me suis rendu compte qu'il me manquait un outil, et que la trace pourrait peut être donner l'info qu'il me manque. Cet outil c'est le traçage des mémoires touchées par le programme (pour trouver une zone libre en ram où pouvoir mettre des patchs et autres bidouilles).

    Pour cela il faudrait que la trace affiche en plus à droite l'adresse (et éventuellement le mode d'accès) concernée par l'instruction en cours. En collectant cette colonne sur toute la trace on peut obtenir une bonne intuition des endroits utilisé par le jeu ou le programme sous analyse.

    Alors il y une subtilité. Je parle de l'adresse utilisée par une instruction comme si elle était unique (STA ,U+), mais il peux en avoir aucune (INCA) ou plusieurs (STX, PSHS). Cependant elles sont contiguës et on peut les résumer aux adresses min/max de l'instruction. Par contre avec une instruction telle que JSR [A,X], il y a 3*2=6 adresses pas forcément contigües qui entrent en jeu (l'indirection et la pile), et là la notion de zone touchée est beaucoup plus floue.

    Dans tous les cas il serait utile de pouvoir faire une cartographie des zones mémoires avec le type d'accès qu'on y a fait sur une certaine durée d'execution: lecture / écriture (/ exécution qui est déjà donné par la trace.) C'est un tableau de de 64ko avec 1 bit par type d'accès. Bon là je me rends compte que c'est presque un outil séparé de la notion de trace. Cependant, pour trouver les zones libres de la page 0 (ou en fin de ram vidéo), cela pourrait être utile.
sam .oO(qui laisse son esprit rêvasser)
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Daniel
Messages : 17288
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [DCMOTO] Amélioration de la fonction "Trace"

Message par Daniel »

Pour les deux premiers points, ce sont de bonnes idées et il n'y a pas de difficulté particulière.
Ils sont intégrés dans la version de développement 2021.06.15 : http://dcmoto.free.fr/emulateur/index.html

A noter le cas particulier des branchements relatifs longs : Le nombre de cycles est différent selon que le branchement se fait ou pas. La trace donne les deux cas, alors qu'elle pourrait savoir quelle branche est prise et retenir seulement le nombre de cycles correspondant. Je ne l'ai pas fait pour simplifier, je ne sais pas si c'est acceptable ?

Pour la taille du fichier, le principe est le suivant :
- Quand on sélectionne une taille (différente de STOP) un nouveau fichier est ouvert (l'ancien fichier est perdu).
Toutes les instructions exécutées sont tracées, jusqu'à ce que la taille maxi du fichier soit atteinte ou que le fichier soit fermé par STOP.
- Quand on sélectionne STOP la trace s'arrête et le fichier est fermé. On peut alors le retrouver dans le répertoire de travail de dcmoto.

Pour la troisième idée, c'est beaucoup moins simple et le traitement est plus lourd, on va laisser un temps de réflexion avant de tenter l'aventure.

[Edit] La version mise en ligne à 17h20 avait une erreur (boutons ARRETER et PAS à PAS inversés dans la fenêtre de l'outil de mise au point).
Elle a été corrigée à 17h40. Assurez-vous d'avoir la dernière.
Daniel
L'obstacle augmente mon ardeur.
Répondre