Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » liblog, une lib pour débugger efficacement
Milang Hors ligne Membre Points: 488 Défis: 2 Message

liblog, une lib pour débugger efficacement

Posté le 18/09/2019 17:33

Je vous présente une lib de log simple d'utilisation basée sur gint. Si vous n'avez pas gint, allez voir de ce côté ci : gint, un noyau pour développer des add-ins
L'utilisation se rapproche fortement de printf, à ça près que l'on peut également choisir la priorité du message que l'on souhaite envoyer !

On peut si besoin afficher ce log en cas d'erreur, ou simplement pour consulter l'état d'éxécution du programme à un moment donné. Le reste du temps, ce log est invisible, mais néanmoins stocké. La lib fournit notamment la possibilité d'afficher le log en cas d'exception (system error), avec la possibilité de faire défiler le continu avec les flèches.

En plus, la librairie est construite pour être multiplateforme, donc elle fonctionne aussi bien sur les fx9860g que les fxcg50. . En voici un exemple sur la famille des fx9860g :

La compatibilité avec fxcg50 reste toutefois à tester, mais je n'ai pas le matériel pour Il faut noter également que la librairie peut être installée simultanément pour les deux plateformes, il suffit juste de l'installer 2 fois, une fois par plateforme.

Tutoriel d'installation et d'utilisation : https://gitea.planet-casio.com/Milang/liblog/src/branch/master/README.md

Voilà, je vous laisse essayer et debugger, et vous pouvez poser vos questions sur ce topic si vous n'avez pas bien compris quelque chose

La lib est sous la GNU General Public License 3


1, 2 Suivante
Lephenixnoir Hors ligne Administrateur Points: 24678 Défis: 170 Message

Citer : Posté le 18/09/2019 21:02 | #


Ooh, ça a l'air intéressant ça.

Petite note, sur la branche dev du fxSDK se trouve une autre version du système de compil' dans laquelle il y a notamment une variable LIBS dédiée pour les bibliothèques, et -lgint-<fx,cg> est ajouté automatiquement à la fin donc il suffira d'écrire LIBS = -llog. C'est pas encore sur la branche master mais je te le dis en avance !

À voir le code je suppose qu'il n'y a pas encore de quoi scroller ?

Tu peux essayer de t'en servir comme gestionnaire d'exceptions depuis peu, si ça t'intéresse :

#include <gint/exc.h>
#include <gint/keyboard.h>
#include <gint/defs/attributes.h>
#include <liblog.h>

GNORETURN void system_error(uint32_t code)
{
  ll_display();
  while(1) getkey();
}

/* In a function */
gint_panic_set(system_error);

Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Milang Hors ligne Membre Points: 488 Défis: 2 Message

Citer : Posté le 18/09/2019 21:08 | # | Fichier joint


Pour l'instant les lignes de log non visibles ne sont pas stockées en mémoire, mais je le ferai peut être avec une liste chainée dans le futur. Actuellement, ll_display affiche l'équivalent d'un tty, sans scroll donc.

Quant à l'utilisation avec le gestionnaire d'exception, je comptais justement le faire

Et pour la variable LIBS, c'est une très bonne idée, je vais la tester sur la branche dev en attendant sa sortie officielle alors
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 19/09/2019 21:41 | #


Oh, génial ça

Bon, manque plus que le debug/logging USB maintenant
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Milang Hors ligne Membre Points: 488 Défis: 2 Message

Citer : Posté le 20/09/2019 07:51 | #


Bon, j'ai testé le message de panic, merci beaucoup, cela marche très bien, je ne vais pas tarder à l'ajouter dans master

Par contre j'aurais besoin d'informations supplémentaires sur l'écran de la graph 90 E, notamment au niveau de la largeur et de las hauteur en caractères histoire de faire le portage propre de cette lib
Lephenixnoir Hors ligne Administrateur Points: 24678 Défis: 170 Message

Citer : Posté le 20/09/2019 07:54 | #


Milang a écrit :
Bon, j'ai testé le message de panic, merci beaucoup, cela marche très bien, je ne vais pas tarder à l'ajouter dans master

Content de l'entendre ! Comme tu es hors d'une interruption tu peux utiliser toutes les fonctions que tu veux sans limites.

Par contre j'aurais besoin d'informations supplémentaires sur l'écran de la graph 90 E, notamment au niveau de la largeur et de las hauteur en caractères histoire de faire le portage propre de cette lib

La taille canonique est 8x9, mais la police est à taille variable, ce qui est très important : https://gitea.planet-casio.com/Lephenixnoir/gint/src/branch/compat/src/font8x9.png


Je te conseille de la laisser en taille variable et d'utiliser dsize() pour connaître la taille d'une chaîne. À moins que tu produises des choses en 2D dans tes logs, c'est mieux parce que c'est plus joli d'une part et plus serré d'une autre. Aussi, les caractères 0-9 et A-F ont tous la même largeur (7 pixels) pour pouvoir écrire de l'hexa sans la contrainte taille variable.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Milang Hors ligne Membre Points: 488 Défis: 2 Message

Citer : Posté le 20/09/2019 10:03 | #


dsize fournit la taille de la chaine en pixels, c'est bien ça ?
Lephenixnoir Hors ligne Administrateur Points: 24678 Défis: 170 Message

Citer : Posté le 20/09/2019 10:05 | #


Yup. La hauteur des lignes tu peux la choisir constante (je conseille entre 12 et 14 pixels), et dsize() te donnera la largeur.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Milang Hors ligne Membre Points: 488 Défis: 2 Message

Citer : Posté le 20/09/2019 10:22 | #


Le nom de la police par défaut est bien default sur les 2 modèles, n'est-ce pas ?
Lephenixnoir Hors ligne Administrateur Points: 24678 Défis: 170 Message

Citer : Posté le 20/09/2019 10:49 | #


Nope normalement il n'y a pas de nom public. Si tu veux l'utiliser, tu peux appeler dfont(NULL), et si tu veux son adresse tu peux récupérer la valeur de dfont(NULL) au début du programme.

Edit : si tu y tiens elles s'appellent gint_font5x7 et gint_font8x9.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Milang Hors ligne Membre Points: 488 Défis: 2 Message

Citer : Posté le 20/09/2019 11:15 | #


En fait je comptais déterminer dynamiquement la taille de l'écran en fonction de la taille de la police, mais c'est une très mauvaise idée.
A la place, je vais faire en sorte que l'on puisse compiler 2 versions de la librairie, c'est plus flexible
Pour le faire il faut que je fasse un dossier de build et une lib avec des noms qui différent selon la cible, c'est bien ça ?
(build-fx | build-cg, et liblog-fx | liblog-cg)
Lephenixnoir Hors ligne Administrateur Points: 24678 Défis: 170 Message

Citer : Posté le 20/09/2019 12:07 | #


Oh, si tu parles des retours à la ligne, je pense qu'il faut les faire dynamiquement (ie. selon le contenu), et pas compter un nombre de caractères fixe.

C'est une possibilité oui.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Milang Hors ligne Membre Points: 488 Défis: 2 Message

Citer : Posté le 20/09/2019 13:34 | #


Bon, j'ai ajouté le support sur les graph 90+E, il ne demande qu'à être testé
(Je n'ai pas de g90+e pour tester)

En plus, j'ai restructuré le code pour permettre le scrolling dans le futur

Euh, afin d'optimiser le poids du log en RAM (alloué dynamiquement), est ce quelqu'un peut me dire le nombre maximal de caractères que l'on peut loger sur une ligne ?

Ajouté le 20/09/2019 à 13:44 :
Bon, sitôt dit, sitôt fait, le scrolling est ajouté

Il marche sur les graph 35+E, à voir sur la gamme des fxcg50
Lephenixnoir Hors ligne Administrateur Points: 24678 Défis: 170 Message

Citer : Posté le 20/09/2019 15:43 | #


Euh, afin d'optimiser le poids du log en RAM (alloué dynamiquement), est ce quelqu'un peut me dire le nombre maximal de caractères que l'on peut loger sur une ligne ?

132.

Edit : Avec cette police.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Milang Hors ligne Membre Points: 488 Défis: 2 Message

Citer : Posté le 20/09/2019 18:13 | #


Merci

D'ailleurs, j'ai l'impression que le gestionnaire d'exceptions ne fonctionne pas sur le casio fx9860g sdk. Est-ce normal ?
Lephenixnoir Hors ligne Administrateur Points: 24678 Défis: 170 Message

Citer : Posté le 20/09/2019 20:42 | #


Je ne l'ai pas testé du tout, de façon générale les émulateurs m'échappent. Je sais que sur l'émulateur Graph 35+E II il fonctionne [#168970], mais je n'ai pas été plus loin. Si tu en as besoin pour développer, je peux prendre le temps de regarder.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Milang Hors ligne Membre Points: 488 Défis: 2 Message

Citer : Posté le 20/09/2019 20:46 | #


En fait, lorsque normalement il y a une exception, le programme s'arrête, et le sdk affiche un message sur l'erreur à l'adresse FF000024. Après ce n'est pas une priorité, j'étais simplement surpris de ne pas voir s'afficher le log, c'est tout
Lephenixnoir Hors ligne Administrateur Points: 24678 Défis: 170 Message

Citer : Posté le 20/09/2019 20:47 | #


Le SDK fait ça quand le processeur crashe... right? S'il le fait pour toutes les exceptions alors il n'y a aucun moyen de le contourner, et mon gestionnaire mémoire qui rattrape parfois des adress error ne marchera plus.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Milang Hors ligne Membre Points: 488 Défis: 2 Message

Citer : Posté le 20/09/2019 20:58 | #


Bon, bah tant pis alors, ce n'est pas une grande perte

Ajouté le 21/09/2019 à 10:56 :
J'ai mis à jour le topic sur les fonctions disponibles et les instructions d'installation

Merci de tester lib est fonctionnelle pour les g90+E
De mon côté je vais essayer de tester sur émulateur, mais il faut que j'installe les outils supplémentaires, et une vm donc je ne le ferai pas tout de suite
Kirafi Hors ligne Membre Points: 2180 Défis: 10 Message

Citer : Posté le 21/09/2019 10:58 | #


Si tu veux je teste sur l'émulateur des graph Monochrome .
iPod
Pour des parties rapides
Jusqu'où pourras-tu aller dans ce jeu "partie rapide" qu'est Dextris (élu Jeu Du Mois)
Pourras-tu survivre plus de 20 secondes dans ce fameux tunnel appelé Graviton
Rebondis entre les murs en évitant les piques dans SpikeBird
Pourras-tu éviter de te faire écraser dans FallBlocs (élu Jeu Du Mois)
Autres
Franchement ils valent le coups
Deviens l'amiral de la marine dans SeaRush (jeu concours) (élu Jeu Du Mois)
La version 2048 tactile amélioré au plus haut point : 2048 Delux !
Pars à la recherche des morceaux d'étoile dans Lumyce (élu Jeu Du Mois)
Milang Hors ligne Membre Points: 488 Défis: 2 Message

Citer : Posté le 21/09/2019 11:01 | #


Tu peux essayer
Elle marche avec le scrolling sur ma g35+E.
Elle marche sur l'émulateur du sdk, à l'exception du panic mais cela est du au sdk qui a un comportement différent en cas de crash

Ajouté le 21/09/2019 à 12:51 :
Bon, j'ai ajouté la fonction ll_pause() qui permet de suspendre l’exécution du programme, avoir la possibilité d'inspecter le log et reprendre l’exécution ensuite

De plus, à la suite d'une suggestion de @Kirafi, Il est possible d'envoyer plusieurs messages sur une seule ligne, et pour finir une ligne, on ajoute '\n'
1, 2 Suivante

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 109 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd