FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» Problème de math
par papydall Aujourd'hui à 1:53

» A propos des attributs de fichier
par papydall Hier à 14:33

» Problème de math
par Marc37 Sam 21 Oct 2017 - 23:04

» I Love You
par papydall Sam 21 Oct 2017 - 19:22

» Un petit "coucou" à tous les Panoramiciens !
par mindstorm Sam 21 Oct 2017 - 17:06

» MARK_ON déclenche un événement ON_CLICK à la place de ...
par Jean Claude Mer 18 Oct 2017 - 18:08

» mise a jour calculatrice
par joeeee2017 Mer 18 Oct 2017 - 15:57

» [solved] 3D_LINE How to ?
par Jicehel Mer 18 Oct 2017 - 11:01

» Convertisseur de base 10 de 2 à 36
par gigi75 Mar 17 Oct 2017 - 18:49

» calculatrice avec touches movibles
par joeeee2017 Dim 15 Oct 2017 - 1:11

» CORTANA
par gigi75 Sam 14 Oct 2017 - 16:32

» Calculatrice
par Jean Claude Sam 14 Oct 2017 - 12:30

» Compilateur FBPano
par jean_debord Jeu 12 Oct 2017 - 9:53

» KGF_dll - nouvelles versions
par Klaus Mar 10 Oct 2017 - 18:49

» à propos de Panoramic_Editor [Résolu]
par Klaus Mar 10 Oct 2017 - 3:19

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Octobre 2017
LunMarMerJeuVenSamDim
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
CalendrierCalendrier

Partagez | 
 

 Une trace paramétrable en 100 % Panoramic

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Klaus

avatar

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

MessageSujet: Une trace paramétrable en 100 % Panoramic   Sam 16 Jan 2016 - 3: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
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
 
Une trace paramétrable en 100 % Panoramic
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Mode TRACE
» [Résolu] Paramétrer historique de navigation
» EDI réalisé entièrement en Panoramic
» EDI réalisé entièrement en Panoramic
» pas un panoramic mais utilitaires delphi.

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: