Quoi, tu ne connais pas PB ? Va falloir parcourir tout le forum alors !

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.

#1 30-09-2014 08:59:40

legagneur  
Membre Geek
Lieu: Yaoundé
Date d'inscription: 02-10-2013
Messages: 81
Pépites: 395
Banque: 0

Trace d'execution dans un fichier

Bonjour cher tous,
Est t'il possible, pendant que l'application est en train de tourner de pouvoir rediriger toutes les différentes traces d'execution dans un fichier que l'on aura au préalable définie de telle en sorte qu'en parcourant ce fichier l'on puisse avoir une idée de ce qui s'est passée depuis le lancement de l'éxecution.
Si cela est possible, comment procéder?
Bonne journée à vous

Hors ligne

 

#2 30-09-2014 09:43:04

buck  
Modérateur
Lieu: Dijon
Date d'inscription: 31-07-2008
Messages: 747
Pépites: 1,028,843
Banque: 171,170,849,654

Re: Trace d'execution dans un fichier

Bonjour,

Il suffit de lancer l’exécutable en ligne de commande en ajoutant /PBDEBUG.

Hors ligne

 

#3 30-09-2014 10:38:50

legagneur  
Membre Geek
Lieu: Yaoundé
Date d'inscription: 02-10-2013
Messages: 81
Pépites: 395
Banque: 0

Re: Trace d'execution dans un fichier

Bonjour buck,
J'ai essayé ce que tu m'as demandé, j'obtiens un fichier avec une extension .dbg. En l'ouvrant avec un éditeur de texte, les résultats contenu ne sont pas ceux auquelles je m'attendais.
Si je fais une requette par exemple

Code: pb

   INSERT INTO MA_TABLE(nom,prenom) values (:nom, :prenom) using transac;

Je voudrais pouvoir avoir à peu près ceci dans le fichier de trace   INSERT INTO MA_TABLE(nom, prenom) values (Dupont, fabrice) using transac;

Merci

Hors ligne

 

#4 30-09-2014 10:54:14

seki  
0x73656B69
Award: bf
Lieu: Laquenexy & Luxembourg
Date d'inscription: 20-11-2008
Messages: 1118
Pépites: 4,296,080,204
Banque: 9,223,372,036,854,776,000
Site web

Re: Trace d'execution dans un fichier

buck a écrit:

Bonjour,

Il suffit de lancer l’exécutable en ligne de commande en ajoutant /PBDEBUG.

ça produit un fichier texte indenté énorme et pas forcément utilisable si on cherche à tracer quelque chose assez longtemps après le démarrage de l'appli : PB doit avoir un bug et seuls les quelques derniers milliers d'évènements seront présents mais l'indentation risque d'être cassée et illisible. De plus cela ralentit énormément l'application car PB ouvre / ajoute un évènement / referme le fichier à chaque ligne qu'il essaie de tracer... à tout hasard, xlat a fait un viewer pour les pbtraces qui rend la lecture un peu moins fastidieuse.

Il y a une autre possibilité : on peut utiliser l'api PB de profiling (ce qu'on voit dans l'onglet Tools / System options / Profiling de l'IDE) pour démarrer et arrêter le profiling pour un moment de l'exécution qu'on souhaite analyser :
- création d'un fichier .pbp
- sélection d'un type de timer + les types de traces qu'on veut
http://i.imgur.com/P20aNFe.png

On peut analyser les résultats avec 3 viewers différents, qu'on ouvre à partie de File / New / Tool :
- Profiling Class View : liste de toutes les classes utilisées avec le nombre de fois, et les méthodes appelées
http://i.imgur.com/ReyTWCq.png
- Profiling Routine view : profiling "traditionnel", on peut voir ne nombre de fois où on est passé sur chaque ligne de code, et les appels de fonctions associés avec le temps que ça a pris
http://i.imgur.com/1owMXeg.png
- Profiling Trace view : la liste des évènement un peu comme /PBDEBUG, exemple de Trace view (je n'ai pas sélectionné toutes les traces possibles) :http://i.imgur.com/wx6PUqt.png

Exemple d'utilisation depuis pbscript (dans mon appli j'ai une interface de pilotage qui ressemble à ça :http://i.imgur.com/PVXzJXt.png

Ouverture du fichier :

Code: pb

timerkind timer
string ls_tracefile
errorreturn lerr

ls_tracefile = sle_tracefile.text
if ls_tracefile = "" then return
if not gb_tracepending then
  choose case ddlb_tracetimertype.text
    case "Clock!"; timer = clock!
    case "Process!"; timer = process!
    case "Thread!"; timer = thread!
    case "TimerNone!"; timer = timernone!
  end choose
  
  lerr = TraceOpen(ls_tracefile, timer)
  if lerr <> success! then
    debug_message(classname() + "::cb_profilestart.clicked()", "TraceOpen failed")
  else
    gb_tracepending = true
    //ICI on rend possible le choix du type de trace
  end if
end if


On choisit le type des traces qu'on veut collecter (exemple pour une checkbox qui représente un type)

Code: pb

if this.checked then
  TraceEnableActivity( ActLine! )
  debug_message(classname(), "ActLine activity enabled")
else
  TraceDisableActivity( ActLine!)
  debug_message(classname(), "ActLine activity disabled")
end if


Lorsqu'on le désire, on démarre la collecte des traces

Code: pb

errorreturn lret

if gb_tracepending then 
  lret = TraceBegin("Manual Tracing block")
  if lret <> success! then debug_message(classname() + "::cb_profilebegin.clicked()", "TraceBegin() failed")
end if


Plus tard, on arrête la collecte

Code: pb

errorreturn lret

if gb_tracepending then 
  lret = TraceEnd()
  if lret <> success! then debug_message(classname() + "::cb_profileend.clicked()", "TraceEnd() failed")
end if


Et surtout, on n'oublie pas oublier de fermer le fichier de traces

Code: pb

if gb_tracepending then 
  lret = traceclose()
  if lret <> success! then debug_message(classname() + "::cb_profilestop.clicked()", "TraceClose() failed")
end if

The best programs are the ones written when the programmer is supposed to be working on something else. - Melinda Varian

Mes réponses PB sur StackOverflow
http://stackoverflow.com/users/flair/317266.png

Hors ligne

 

#5 30-09-2014 10:58:22

seki  
0x73656B69
Award: bf
Lieu: Laquenexy & Luxembourg
Date d'inscription: 20-11-2008
Messages: 1118
Pépites: 4,296,080,204
Banque: 9,223,372,036,854,776,000
Site web

Re: Trace d'execution dans un fichier

legagneur a écrit:

J'ai essayé ce que tu m'as demandé, j'obtiens un fichier avec une extension .dbg. En l'ouvrant avec un éditeur de texte, les résultats contenu ne sont pas ceux auquelles je m'attendais.
Si je fais une requette par exemple

Code: pb

   INSERT INTO MA_TABLE(nom,prenom) values (:nom, :prenom) using transac;

Je voudrais pouvoir avoir à peu près ceci dans le fichier de trace   INSERT INTO MA_TABLE(nom, prenom) values (Dupont, fabrice) using transac;

Merci

Pour tracer les opérations de la base de données, il faut que tu regardes comment activer les traces spécifique à ton driver.

Par exemple avec ODBC, il faut ajouter ceci dans la ConnectString :

Code:

ConnectOption='SQL_OPT_TRACE,SQL_OPT_TRACE_ON;SQL_OPT_TRACEFILE,traces_odbc.log'

The best programs are the ones written when the programmer is supposed to be working on something else. - Melinda Varian

Mes réponses PB sur StackOverflow
http://stackoverflow.com/users/flair/317266.png

Hors ligne

 

#6 02-10-2014 07:48:50

Geo  
Membre completement Geek
Lieu: Binche
Date d'inscription: 15-12-2008
Messages: 119
Pépites: 378
Banque: 0

Re: Trace d'execution dans un fichier

legagneur a écrit:

Je voudrais pouvoir avoir à peu près ceci dans le fichier de trace   INSERT INTO MA_TABLE(nom, prenom) values (Dupont, fabrice) using transac;

Si c'est juste les opérations DB que tu veux, tu peux simplement préfixer le paramètre DBMS =... avec TRACE.
Ex : DBMS = TRACE O10 Oracle10g (10.1.0)


Rien ne sert de courir, il faut partir à point .

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22