FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Logiciel de planétarium.
Une trace paramétrable en 100 % Panoramic Emptypar Pedro Aujourd'hui à 8:08

» Un autre pense-bête...
Une trace paramétrable en 100 % Panoramic Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
Une trace paramétrable en 100 % Panoramic Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Une trace paramétrable en 100 % Panoramic Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
Une trace paramétrable en 100 % Panoramic Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
Une trace paramétrable en 100 % Panoramic Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
Une trace paramétrable en 100 % Panoramic Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
Une trace paramétrable en 100 % Panoramic Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
Une trace paramétrable en 100 % Panoramic Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
Une trace paramétrable en 100 % Panoramic Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
Une trace paramétrable en 100 % Panoramic Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
Une trace paramétrable en 100 % Panoramic Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
Une trace paramétrable en 100 % Panoramic Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
Une trace paramétrable en 100 % Panoramic Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
Une trace paramétrable en 100 % Panoramic Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
Le deal à ne pas rater :
LEGO Icons 10331 – Le martin-pêcheur
35 €
Voir le deal

 

 Une trace paramétrable en 100 % Panoramic

Aller en bas 
AuteurMessage
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Une trace paramétrable en 100 % Panoramic Empty
MessageSujet: Une trace paramétrable en 100 % Panoramic   Une trace paramétrable en 100 % Panoramic EmptySam 16 Jan 2016 - 1:53

J'ai commencé un petit outil permettant de tracer l'exécution d'un source Panoramic en suivant l'état de certaines variables en mode pas à pas. Le petit programme posté ci-après est un début. Il ne tient pas encore compte des labels et des SUB, mais ça viendra. Pour le moment, je montre le principe, pour voir s'il y a un intérêt. Voici le code:
Code:
' build_debug_version.bas

' Ce programme prend en entrée un fichier x.BAS et le transforme en
' un fichier debug_x.bas, x étant le nom du fichier source. Ce fichier
' généré peut ensuite être exécuté par Panoramic.exe. Si ce programme
' est appelé en mode commande, le nom et chemin du fichier source est
' pris par le premier paramètre. Si ce paramètre manque ou est invalide,
' le programme ouvre un dialogie d'ouverture de fichiers.
'
' Un deuxième paramètre en entrée désigne un fichier x.VAR qui contient
' la liste des noms de variables à tracer, à chaque pas d'exécution. Il
' faut spécifier un nom de variable par ligne, pas de tableau indicé.
' Si ce paramètre manque, le programme ouvre un dialogie d'ouverture de fichiers.
'
' Un troisième paramètre en entrée désigne le programme d'exécution de
' Panoramic (Panoramic.exe) avec son chemin d'accès. Si ce paramètre manque,
' le programme ouvre un dialogie d'ouverture de fichiers.
'
' Chaque ligne source sera remplacée par un appel à une sub debug(lig%),
' avec le code source de la ligne en commentaire, pour la lisibilité.
' La procédure debug commence par créer une form avec un mémo recevant la
' trace de l'exécution, si ces objets n'eistent pas encore. Donc, ceci
' se fait automatiquement, au premier appel (à la première ligne du code).
' Ensuite, cette sub va logger le numéro e ligne et le code source de
' cette ligne, puis appeler une procédure debug_variables. Cette procédure
' contient une ligne par variable à suivre. Cette ligne place le contenu
' de la variable dans la trace, si la variable est définie.
'
' La version actuelle sait gérer:
'  - des lignes normales
'  - des lignes miltiples
'  - des lignes vides
'  - les commentaires
'  - la commande terminate
'  - des labels (et goto/gosub/on_xxx)
' A venir:
'  - SUB


dim bas$, var$, i%, s$, p%, s1$, exe$, direxe$, dirdef$
dirdef$ = dir_current$ + "\"

' ===== vérifier ou choisir le fichier source d'origine
if param_number=0
  open_dialog 11 : filter 11,"Source Panoramic (*.bas)|*.bas"
  bas$ = file_name$(11)
  delete 11
  if bas$="_" then terminate
else
  bas$ = trim$(param_value$(1))
  if bas$="" then terminate
end_if
if lower$(right$(bas$,4))<>".bas" then message "Extension invalide" : terminate
if file_exists(bas$)=0 then message "Fichier source non trouvé" : terminate

' ===== vérifier ou choisir le fichier de la liste des variables
if param_number<2
  open_dialog 11 : filter 11,"Liste de variables (*.var)|*.var"
  var$ = file_name$(11)
  delete 11
  if var$="_" then terminate
else
  var$ = trim$(param_value$(2))
  if var$="" then terminate
end_if
if lower$(right$(var$,4))<>".var" then message "Extension invalide" : terminate
if file_exists(var$)=0 then message "Fichier variables non trouvé" : terminate

' ===== charger le fichier source d'origine
dlist 1              : ' fichier source en entrée
file_load 1,bas$
if count(1)=0 then message "Fichier source vide" : ' terminate

' ===== générer le début du fichier source debug, avec le code d'origine modifié
dlist 2              : ' fichier source debug généré
for i%=1 to count(1)
  s$ = trim$(item_read$(1,i%))
  if right$(s$,1)=":"
    if instr(s$," ")=0
      item_add 2,s$
      s$ = " label <"+s$+">"
    end_if
  end_if
  item_add 2,"debug("+str$(i%)+") : ' "+s$
  if instr(lower$(s$),"terminate")>0  then item_add 2,"terminate"
next i%
item_add 2,"message "+chr$(34)+"Oups... programme pas terminé"+chr$(34)+" : terminate"
item_add 2,""

dlist 3
file_load 3,var$

' ===== générer la procédure de debug pour chaque ligne
item_add 2,"sub debug(lig%)"
item_add 2,"  if variable("+chr$(34)+"KGF_debug%"+chr$(34)+")=0"
item_add 2,"    dim KGF_debug%"
item_add 2,"    for KGF_debug%=9000 to 10000"
item_add 2,"      if (object_exists(KGF_debug%)=0) and (object_exists(KGF_debug%+1)=0) and (object_exists(KGF_debug%+2)=0) then exit_for"
item_add 2,"    next KGF_debug%"
item_add 2,"    form KGF_debug% : width KGF_debug%,300 : height KGF_debug%,screen_x : left KGF_debug%,screen_y-300"
item_add 2,"    memo KGF_debug%+1 : parent KGF_debug%+1,KGF_debug% : full_space KGF_debug%+1 : bar_both KGF_debug%+1"
item_add 2,"    dlist KGF_debug%+2 : file_load KGF_debug%+2,"+chr$(34)+"KGF_debug.bas"+chr$(34)
item_add 2,"  end_if"
item_add 2,"  item_add KGF_debug%+1,"+chr$(34)+" "+chr$(34)
item_add 2,"  item_add KGF_debug%+1,str$(lig%)+"+chr$(34)+": "+chr$(34)+"+item_read$(KGF_debug%+2,lig%)"
item_add 2,"  debug_variables()"
item_add 2,"  select lig%"
for i%=1 to count(1)
  s$ = trim$(item_read$(1,i%))
  if right$(s$,1)=":"
    if instr(s$," ")=0
      s$ = "' "+s$
    end_if
  end_if
  if instr(lower$(s$),"terminate")>0
    s1$ = s$
    s$ = ""
    if p%>1 then s$ = left$(s1$,p%-1)
    s$ = s$ + "message "+chr$(34)+"<terminate>"+chr$(34)
    if len(s1$)>(p%+9) then s$ = s$ + mid$(s1$,p%+9,len(s1$))
  end_if
  if s$="" then s$ = "'"
  item_add 2,"    case "+str$(i%)+": "+s$
next i%

item_add 2,"  end_select"
item_add 2,"end_sub"


' ===== générer la procédure de traçage des variables, en fonction du fichier de liste des variables
item_add 2,"sub debug_variables()"
if count(3)>0
  for i%=1 to count(3)
  s$ = item_read$(3,i%)
  if right$(s$,1)="$"
    item_add 2,"if variable("+chr$(34)+s$+chr$(34)+")=1 then item_add KGF_debug%+1,"+chr$(34)+"  "+s$+"="+chr$(34)+"+"+s$
  else
    item_add 2,"if variable("+chr$(34)+s$+chr$(34)+")=1 then item_add KGF_debug%+1,"+chr$(34)+"  "+s$+"="+chr$(34)+"+str$("+s$+")"
 end_if
  next i%
end_if
item_add 2,"end_sub"

' ===== afficher le source généré dans un mémo
memo 10 : full_space 10 : bar_both 10
file_save 2,"x.txt"
file_load 10,"x.txt"
file_delete x.txt
 
' ===== générer le fichier source version debug et le fichier de commande
dir_change dirdef$
file_save 2,dirdef$+"KGF_debug.bas"

direxe$ = file_extract_path$(exe$)
file_open_write 1,"KGF_debug.bat"
file_writeln 1," "+chr$(34)+exe$+chr$(34)+" "+chr$(34)+direxe$+"KGF_debug.bas"+chr$(34)+" "
file_writeln 1,"pause"
file_close 1

' ===== lancer l'exécuteur de Panoramic
if message_confirmation_yes_no("Exécuter ?")<>1 then end
if param_number<3
  open_dialog 11 : filter 11,"Exécuteur Panoramic|*.exe"
  exe$ = file_name$(11)
  delete 11
  if exe$="_" then terminate
else
  exe$ = trim$(param_value$(3))
  if exe$="" then terminate
end_if
if lower$(right$(exe$,4))<>".exe" then message "Extension invalide" : terminate
if file_exists(exe$)=0 then message "Exécuteur Panoramic non trouvé" : terminate
execute "KGF_debug.bat"
end

Un petit programme d'essai (test_debug.bas):
Code:
label boucle
dim x%, a$
message "a"
x% = 17
message "b"
a$ = "coucou"
message "c"
boucle:
a$ = message_input$("nouvelle valeur","A$:","")
if a$<>"stop" then goto boucle
terminate

Et un fichier contenant la liste des variables à afficher à chaque itération (test_debug.var):
Code:
x%
a$

Le programme à test_debug.bas n'a pas de vraie utilité, il ne sert qu'à montrer le principe. On peut lancer le programme build_debug_version.bas directement à partir de l'éditeur Panoramic. Les fichiers test_debug.bas et test_debug.var doivent être enregistrés sur disque. Le programme fait la conversion, affiche le source résultant dans un mémo, puis demande confirmation pour l'exécution. Dans l'affirmative, celle-ci est lancée via un fichier *.BAT généré pour l'occasion.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
 
Une trace paramétrable en 100 % Panoramic
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Mode TRACE pour Panoramic
» Tracé d'ellipse / tracé d'arcs de cercle
» xmenu: menu paramétrable dynamiquement
» Menu paramétrable à laisser sur le bureau
» Nouvelle DLL: ouvrir une fenêtre de messages paramétrable

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: