Aide en ligne - Girollet Info

Transcription

Aide en ligne - Girollet Info
o
Documentation HookTrack
(version 1.3)
1 HookTrack en une page
HookTrack est un outil (pour les clients NatStar version 2.60 à 5.00 sous Windows (XP / Seven).
o
o
o
o
d'aide au débogage
d'analyse des temps d'exécution
d'anticipation/analyse des erreurs d'exécution
d'amélioration de la productivité pour les développements NatStar™
Les principales fonctionnalités :
o
o
o
o
o
o
o
o
o
o
débogueur 'client' multithread (pas à pas, points d'arrêt, pile des appels)
browser de code
interception des traces NatStar (activable/désactivable/filtrables en cours d'exécution)
interception des appels de fonction/instruction/méthodes
traces des requêtes SQL, des allocations mémoire, des buffers tuxedo
détection d'erreurs tuxedo sur TpCall, SQL, NatStar (Things_Set_Error), Windows (Kernel32.SetError)
détection des fuites mémoire (segments, objets, séquences, buffers, curseurs DB)
détection des échecs de chargement de dll
détection des écrasements mémoire (écrasement de 'pile')
(En savoir plus )
Installation
o Si le framework Microsoft Net 2.0 n'est pas installé sur votre PC, téléchargez ce framework depuis le site
Microsoft.
o Il vous faudra peut être mettre à jour Windows Installer (version 3.1 ou plus : à télécharger ici).
o Puis lancez setup.exe
o (En savoir plus)
Prise en main : 1re utilisation
o Renseignez, le chemin vers le dictionnaire NatStar™ dans la première IHM lors du 1er lancement.
o Vérifiez que le nom d'exécutable ('sample' par défaut) est bien le nom de votre exécutable NatStar à
'HookTracker' : si tel n'est pas le cas, changez-le, faites 'OK'
o Vous lancez votre application (compilée en mode 'Debug'* c'est mieux) : elle sera alors automatiquement
détectée par HookTrack (sous Windows 7 : lisez ceci) qui affichera une petite bulle d'information au niveau
de la barre des tâches.
o (En savoir plus)
En cas de problèmes
o Si HookTrack se ferme (!), il faudra fermer votre application NatStar (vérifiez dans le gestionnaire des
tâches que le process est bien absent), avant de le relancer.
o L'arrêt 'inopiné' de HookTrack peut provoquer un plantage de votre application (pas forcément
immédiatement) : il vaut alors mieux la relancer.
o Merci de faire remonter tout problème à : [email protected]
Le site des utilisateurs d'HookTrack :
http://hooktrack.girollet.com
*
Case à cocher 'Debug' dans la fenêtre de génération NatStar™.
© 2007, Girollet Info-Conseils
1/55
Sommaire
1
HookTrack en une page................................................................................................................................ 1
2
Fonctionnalités clefs ...................................................................................................................................... 3
2.1 Les traces .................................................................................................................................................. 4
2.2 Le débogueur ............................................................................................................................................ 5
2.3 Le 'browser' de code ................................................................................................................................. 6
2.4 La visualisation de variables .................................................................................................................... 7
2.5 L'analyse des temps de réponse................................................................................................................ 8
2.6 La détection de bugs au plus tôt ............................................................................................................... 9
2.7 Principe de fonctionnement .................................................................................................................... 11
3
Installation ................................................................................................................................................... 12
3.1 Premier lancement .................................................................................................................................. 13
3.2 La vérification de licence ....................................................................................................................... 14
4
Utilisation ..................................................................................................................................................... 16
4.1 Quand lancer HookTrack, comment détecter l'application à déboguer ................................................. 16
4.2 Le paramétrage de HookTrack ............................................................................................................... 18
4.2.1
Paramètres généraux ....................................................................................................................... 19
4.2.2
Paramètres spécifiques à l'application à déboguer 'Trace & Debug settings' ................................. 20
4.3 L'IHM principale de HookTrack (après détection d'une application) .................................................... 30
4.3.1
Détail des menus ............................................................................................................................. 31
4.3.2
Zone de visualisation du source ...................................................................................................... 33
4.3.3
Zone de visualisation des variables................................................................................................. 35
4.3.4
Zone de visualisation des traces ...................................................................................................... 37
4.4 Les outils de HookTrack ........................................................................................................................ 39
4.4.1
Le 'browser' de code ........................................................................................................................ 39
4.4.2
Le 'dump' d'objets en mémoire ....................................................................................................... 41
4.4.3
Le suivi des fuites mémoire ............................................................................................................ 43
4.4.4
La pile des appels ............................................................................................................................ 46
4.4.5
L'analyse des temps de réponse ...................................................................................................... 47
4.4.6
Les messages de débogage et alertes dans HookTrack ................................................................... 49
4.5 Comment détecter des écrasements mémoire ........................................................................................ 51
4.6 Comment lire la trace ............................................................................................................................. 52
4.7 Annexe : syntaxe des expressions régulières ......................................................................................... 54
© 2007, Girollet Info-Conseils
2/55
2 Fonctionnalités clefs
HookTrack est le fruit de 13 ans d'expériences de débogage d'applications NatStar™.
Il a pour objectif de vous faire gagner du temps... beaucoup de temps. Il s'utilise directement sur vos
applications clientes NatStar™ sous Windows™, sans modifier vos lanceurs.
HookTrack est un outil de développeur à développeur : l'ergonomie a été particulièrement soignée :
ergonomie = productivité !
o
o
o
o
o
o
o
Les traces
Le débogueur
Le 'browser' de code
La visualisation de variables
L'analyse des temps de réponse
La détection de bugs au plus tôt
Principe de fonctionnement
© 2007, Girollet Info-Conseils
3/55
2.1
Les traces
Le temps perdu à écrire des traces est divisé par un facteur 20 en utilisant HookTrack. De plus,
plus en les voyant
défiler à l'écran, vous pouvez avoir – même sans lancer l'outil d'analyse (profiler) – une petite idée du
d temps
perdu dans un appel.
Vous avez enn plus le choix entre différents types de trace :
o aucune
o la trace classique (Things_Trace)
o la trace des appels de méthodes,, de 'ressources'
o les traces des paramètres d'appels
o les buffers Tuxedo
o les requêtes SQL
o ...
Tout cela étant activable/désactivable à la volée, sans arrêter votre application cliente et sans polluer votre
application avec une nième variable d'environnement.
Dans la zone de trace, un simple clic droit vous fera gagner du temps :
o Aller sur la trace d'appel / de sortie
o Afficher le source correspondant
o Rechercher dans la trace (avec comme résultat une liste 'cliquable' des lignes trouvées)
(Voir aussi : Le paramétrage des traces)).
(Voir aussi : Comment lire la trace).
© 2007, Girollet Info-Conseils
4/55
2.2
Le débogueur
L'ergonomie du débogueur a été travaillée
travaillé tout particulièrement pour vous permettre d'analyser le plus
efficacement possible le comportement du code, la visualisation du code vous permet d'avoir des bulles d'aide
sur tous les éléments significatifs du code, et des liens hypertextes sur toutes les ressources/méthodes.
o Sur un point d'arrêt,, par un clic sur le bouton 'Break' ou lors d'un problème détecté : HookTrack affiche le
code source et surligne le code sur le point d'être exécuté.
exécuté
o Vous avez accès aux valeurs des variables locales/paramètres/objets par simple survol avec la souris,
souris mais
vous pouvez aussi les afficher dans une liste : leurs valeurs seront alors
alors mises à jour à chaque arrêt.
o Les ressources et les méthodes sont accessibles par simple clic droit.
droit
o Vous pouvez aussi afficher la pile des appels et pour chaque appel, voir le source correspondant, les
paramètres et les variables locales.
o Si votre client plante (Dr Watson), vous pouvez voir où, et encore accéder aux valeurs des variables.
variables
o Les pointeurs non valides (ne correspondant pas à une zone mémoire allouée) sont signalés comme tel dans
les bulles d'aide.
o Le débogueur est 'multithread' : il gère de manière transparente les différents threads que vous auriez pu
démarrer au sein de votre application.
application
o Le mode debug est désactivable en cours d'exécution.
d'exécution
© 2007, Girollet Info-Conseils
5/55
2.3
Le 'browser' de code
C'est un des composants de base de HookTrack,
HookTrack il permet de naviguer dans le code du dictionnaire 'NatStar' de
manière très intuitive, son ergonomie est le fruit des retours des développeurs qui l'utilisent.
o
o
o
o
o
o
Browser de code vous permettant de 'naviguer'
'
dans votre code comme vous le feriez sur un site internet
Affichage de toutes les entités et de tous les liens du dictionnaire
Bulles d'aide descriptives sur
ur les ressources, méthodes ...
Liens hypertextess dans le code source
Affichage pertinent des TypeDefs
Positionnement/Suppression
Suppression des points d'arrêts
(Pour plus de détails : Utilisation : Le browser de code).
code
© 2007, Girollet Info-Conseils
6/55
2.4
La visualisation de variables
HookTrack intègre un système de visualisation qui s'adapte de manière transparente à la catégorie de la variable
(locale, globale, variable de classe, paramètre) et à son type (types de bases, tableaux, segments, objets).
Affichage des types complexes (segments, typedefs, objets, tableaux) sous forme
forme arborescente
Détection et affichage des pointeurss vers des zones de mémoire non allouées
Interprétation automatique des handles d'objets en tant qu'objets
Interprétation des index 'littéraux'
éraux' (par exemple 'monTableau[i%]',
'monTableau[i%]' et pas seulement 'monTableau[0]')
Interprétation du caractères NCL '@' (par exemple '@monTableau[1]' correspond à l'adresse du 2e élément
de la variable 'monTableau[1]')
o Possibilité de 'caster' (trans-typer)
typer) une variable comme vous le feriez
fe
en NCL (par
par exemple
'S_Segment(hd_segment%)') pour n'importe quel type de segment
o Possibilité de 'caster' avec des typess simples (ou tableaux) (par
par exemple CSTRING(10)[5](hd_segment%),
CSTRING(10)[5](hd_segment%)
affichera un tableau de 5 chaînes
nes de 10 caractères dont l'adresse sera la valeur de hd_segment%)
o
o
o
o
o
(Pour plus de détails : Utilisation : Zone de visualisation de variables).
variables
© 2007, Girollet Info-Conseils
7/55
2.5
L'analyse des temps de réponse
HookTrack intègre également un profileur de code, il permet d'afficher les statistiques des temps d'exécution de
votre application et ainsi de déterminer très aisément les parties du code sur lesquels doivent porter vos efforts
d'optimisation des temps de réponse.
o Affichage du nombre d'appels pour une ressource/méthode/service tuxedo/requête SQL
o Du temps total et moyen par appel
o Du temps total et moyen 'propre' par appel (i.e. le temps hors appels internes vers d'autres
ressources/méthodes…)
(Pour plus de détails : Outils : L'analyse des temps de réponse).
© 2007, Girollet Info-Conseils
8/55
2.6
La détection de bugs au plus tôt
HookTrack intègre un mécanisme d'alertes,
d'alertes sous forme de boîte 'pop-up'
up' qui vous signale les bugs potentiels
avant que ceux-ci n'aient eu de conséquences.
conséquence
Par exemple sur une erreur SQL :
o l'erreur a été interceptée.
Un descriptif de l'erreur est affichée, ainsi que l'état de la pile des appels au moment où
Le bouton 'Debug' permet de basculer directement en mode débogage à la ligne où a eu lieu le problème.
(Pour plus de détails : Outils : Les messages de débogage et d'alertes).
© 2007, Girollet Info-Conseils
9/55
Le tableau qui suit donne, par catégorie de bug, la réponse de HookTrack
Catégorie de bug
Problème de chargement de dll
Alerte HookTrack
Pop-up
Procédure à suivre
Utilisez un logiciel comme
'Depends', pour connaître la raison
précise du non chargement de la dll
Handle d'objet nul ou invalide
Erreur Tuxedo™
Débordement d'une chaîne de
caractère
Pop-up
Pop-up
Message en rouge 'Cstring not
terminated by 0' lors de la
visualisation de la variable
Index en dehors des limites d'un
Message en rouge 'invalid index'
tableau
lors de la visualisation de la
variable
Pointeur/Handle invalide
Message en rouge 'Invalid
pointer' lors de la visualisation
de la variable
Un écrasement de 'pile' mémoire
Pop-up en sortie de fonction 1
Erreur NatStar™ (things_set_error) Pop-up ou Warning (au choix)
Erreur Windows™
Pop-up ou Warning (au choix)
(Kernel32.SetError)
Fuites mémoire (segment, objets,
non
séquences) ou de curseurs de base
de données
Problème de performance
non
Boucle infinie
non
Appel récursif infini
non
Autres plantages (dans la mesure
où vous avez une alerte de l'OS du
genre de la boîte de dialogue avec
croix blanche sur fond rouge)
non (mais message windows)
1
Utilisez les IHM HookTrack de
suivi des fuites mémoire
Utilisez l'IHM d'analyse des temps
de réponse de HookTrack
Utilisez l'IHM de pile des appels de
HookTrack pour voir où votre
programme est bloqué
Consultez le buffer de trace de
HookTrack pour repérer les
indentations d'appels auxquelles ne
correspondent pas de retours
Gardez la boîte de message de
plantage ouverte.
Utilisez l'IHM de pile des appels de
HookTrack, sur le dernier appel
faites 'clic droit' [View Source],
vous pourrez, dans la plupart des
cas, consulter la valeurs des
variables au moment du plantage,
et la dernière ligne exécutée
Si compilation avec Microsoft VC++8.0 : voir Détection des écrasements mémoire
© 2007, Girollet Info-Conseils
10/55
2.7
Principe de fonctionnement
Au lancement de HookTrack (ou lorsqu'on utilise le menu Global Action>Force New application detection),
l'outil recherche et démarre en leur sein un thread (un 'sous-process') qui a pour but d'intercepter certains appels
d'API et de transmettre les informations ainsi récupérées à HookTrack.
Détection du démarrage de
l'application cible
HookTrack
1 fenêtre fille
par
application
détectée
NatStar Application
Thread créé par HookTrack
Canal de communication
Interception d'appels
Threads applicatifs
(votre code et autres dll)
Application cible
© 2007, Girollet Info-Conseils
11/55
3 Installation
Pré-requis
Internet Explorer en version 6 ou 7
Windows Installer 3.1
Le Framework .NET 2.0 pour une architecture
32bits
Le Framework .NET 2.0 pour une architecture
64bits
Les Dll de l'IDE NatStartm
Un accès internet
Un accès aux fichiers de votre dictionnaire NatStar™
Télécharger Windows Installer 3.1
Télécharger le Framework .NET 2.0 (x86)
Télécharger
arger le Framework .Net2.0 (x64)
Celles qu'utilise votre application
Pour accéder à la validation de licence
Pour pouvoir afficher le code source
Lancer "Setup.exe"
Faire "Suivant", cochez "J'accepte" le cas échéant la boîte de dialogue de la licence, puis "Suivant" et
"Terminer".
Un raccourci "HookTrack"
rack" est créé sur votre bureau,
bureau voir également 'Premier lancement' :
© 2007, Girollet Info-Conseils
12/55
3.1
Premier lancement
Lors du premier lancement une IHM vous invite à renseigner les paramètres essentiels au bon fonctionnement
de HookTrack :
Renseignez le chemin vers le répertoire 'dict' de votre dictionnaire NatStar™ (N.B.:: 'dict' n'est pas à inclure dans
le nom du répertoire, voir ci-dessus).
Renseignez également le nom de l'exécutable de votre application NatStar (sans spécifier l'extension .exe), dans
l'exemple il s'agit de l'exécutablee 'sample.exe', donc 'sample' dans le champ de saisie.
Puis cliquez sur 'Ok'.
© 2007, Girollet Info-Conseils
13/55
3.2
La vérification de licence
Une vérification de licence a lieu automatiquement au démarrage de HookTrack, et nécessite une connexion
Internet, une fois la licence vérifiée une nouvelle vérification via Internet se fera à nouveau après 30 jours.
En cas d'échec de celle-ci
ci vous disposerez encore de 15j supplémentaires d'utilisation (et HookTrack essayera
alors à chaque lancement de valider
er sa licence).
Ceci permet aux PC ne pouvant accéder
er à Internet qu'avec des paramètres réseaux incompatibles avec le test
d'application NatStar (configuration VPN spécifiques …) de n'avoir à valider leur licence qu'une fois tous les
30 jours.
Lors de cette vérification, les adresses ip et identifiants
identifiant Windows™ sont transmis (cryptés) au serveur : ces
données sont conservées de manière confidentielle et ne sont utilisées que lors de la vérification de licence
proprement dite.
1. En cas d'échec injustifié de la vérification de licence, merci de contacter [email protected]
Si votre PC est placé derrière un proxy et/ou un pare-feux
pare feux nécessitant une authentification,
authentification HookTrack va
essayer de s'authentifier
hentifier suivant toutes les procédures
procédure connues ... il vous sera alors peut-être
peut
demandé de
ressaisir votre login et 'mot de passe' (password) window : votre 'mot de passe' n'est pas conservé,
conservé ni transmis à
l'extérieur : il faudra donc le ressaisir à chaque
chaqu validation de licence.
Écrans d'authentification à un proxy :
internet vous désirez être averti avant que
2. Si, pour des raisons dues à la configuration de votre connexion internet,
HookTrack ne tente
te de se connecter à internet,
internet allez dans le menu 'Application
Application detection/Define Settings..'
Settings..
Et cocher 'Inform me before HookTrack connection to the licence server'
Avant une tentative de vérification de licence le message suivant apparaîtra :
© 2007, Girollet Info-Conseils
14/55
© 2007, Girollet Info-Conseils
15/55
4 Utilisation
o
o
o
o
o
o
o
o
4.1
Quand lancer HookTrack, comment détecter l'application à déboguer
Le paramétrage de HookTrack
L'IHM principale de HookTrack
Points de trace et points d’arrêt
Les outils de HookTrack
Comment détecter les écrasements mémoire
Comment lire la trace
Annexe : syntaxe des expressions régulières
Quand lancer HookTrack, comment détecter l'application à déboguer
• (1) HookTrack détecte les applications dont le nom d'exécutable est renseigné dans ses paramètres (voir :
paramètres généraux), cette application est en principe une application compilée avec NatStar (… bien que cela
ne soit pas requis).
• (2) Idéalement vous pouvez lancer HookTrack avant de lancer votre application (d'ailleurs vous pouvez
laisser HookTrack tourner en permanence).
• (3) Sous XP la détection de toute nouvelle application sera immédiate et automatique, si le menu
'Application detection>Automatic application start detection' est coché.
•
(4) Sous Windows 7 , modifier votre lanceur : lancez votre application avec l’utilitaire hookstart.exe
Par exemple votre ancien lanceur (.bat) était :
Set PATH=…
MonappliNatStar.exe x y z
Modifiez le en :
Set PATH=…
HookStart MonappliNatStar.exe x y z
..n’oubliez pas de copier HookStart.exe qui est dans le répertoire d’installation de HookTrack (par défaut
C:\Program Files\GIC\HookTrack ) dans le répertoire qui contient votre exécutable d’application NatStar
(MonappliNatStar.exe dans l’exemple)
HookStart.exe signalera à HookTrack qu’une nouvelle application est sur le point d’être lancée, elle sera alors
détectée immédiatement par HookTrack, sous réserve que son nom est dans les paramètres comme au (1) et que
la détection automatique est activé comme au (3).
• Il n'est pas possible d'utiliser plusieurs instances de HookTrack en même temps : si vous relancez
HookTrack une seconde fois un message vous le signalera. Cependant HookTrack peut détecter plusieurs
instances d'application ayant le même nom d'exécutable : chacune sera alors gérée dans une fenêtre fille de
HookTrack.
•
Si votre application tournait déjà lorsqu' HookTrack est lancé, il la détectera automatiquement.
© 2007, Girollet Info-Conseils
16/55
Si vous venez de modifier le nom de l'application à détecter dans les paramètres et que celle-ci est déjà
démarrée, il suffit alors d'utiliser le menu 'Force application detection' :
HookTrack apparaît également dans la barre des tâches sous la forme d'un petit icône
menu contextuel, qui permet aussi d'avoir accès à 'Force application detection' :
auquel est associé un
Après quelques fractions de secondes HookTrack aura fini sa phase de détection et affichera une bulle :
Le nom de l'exécutable est affiché ainsi que le numéro de process : ces informations seront reprises dans la
barre de titre de HookTrack (PiD = process Id dans le Gestionnaire de tâches) :
Ces process sont affichés dans des fenêtres filles, tant qu'ils sont présents. Une fois le process fermé, il reste
toujours dans une fenêtre fille de HookTrack (heureusement car cela est bien utile quand un process a planté).
Le fait de fermer une fenêtre fille correspondant à un process actif, ne fait que la masquer : elle réapparaîtra
quand vous ferez 'Force application detection', ou quand vous la rappellerez via le menu 'Windows'(ce menu
liste toutes les fenêtres filles correspondants aux process qui ont été détectés).
• Pour ne plus voir de process qui correspond à une application terminée, fermez la fenêtre fille concernée
dans HookTrack et faites simplement 'Force application detection' (cf. ci-dessus).
© 2007, Girollet Info-Conseils
17/55
4.2 Le paramétrage de HookTrack
HookTrack permet un paramétrage relativement poussé de son fonctionnement. Une telle souplesse ne va pas
sans une certaine complexité.
Pour cette raison le paramétrage se fait en utilisant des 'profils' de paramétrage. Certains sont prédéfinis pour les
différents
fférents 'modes' d'utilisation de l'outil.
On accède à l'écran de définition du paramétrage et des profils par le menu :
La fenêtre de définition des paramètres ainsi ouverte concerne les paramètres qui seront utilisés
utilisé initialement
lors de la détection d'une nouvelle application,
application elle comporte 2 onglets :
- 'General Settings' pour les paramètres généraux de HookTrack ;
- 'Trace & Debug settings' pour
ur les définitions
définition du profil à utiliser au lancement, ainsi que la définition de tous
les profils utilisables.
• Une fois une application détectée,, ses paramètres initiaux sont copiés. Ill existe donc une copie de
paramètres par application détectée.
• Chaque copie peut être modifiée indépendamment : il est donc possible d'avoir plusieurs instances
instance
d'application détectéess utilisant des paramétrages différents à un moment donné.
donné
© 2007, Girollet Info-Conseils
18/55
4.2.1
Paramètres généraux
Il y a deux paramètres essentiels à définir pour utiliser HookTrack :
o
Le nom de l'exécutable à déboguer
oguer (= le nom de l'exécutable de votre application NatStar™), sans
l'extension .exe : si vous devez tester des exécutables de noms
nom différents, vous pouvez les saisir en les
séparant par une virgule.
o Le chemin vers le répertoire de votre glob NatStar – c'est-à-dire – le chemin vers le répertoire 'dict'
contenant le fichier NsThings.dat (ou double-cliquer
double
dans le champ pour naviguer vers ce répertoire).
Par exemple, si le fichier du dictionnaire est c:\glob\dict\NsTings.dat il faudra renseigner c:\glob.
HookTrack pourra ainsi accéder à votre
otre code source référencé dans le dictionnaire NatStar™ 1
o
Sur cet onglet d'autres
autres paramètres concernent
concerne la police ett la couleur de la trace, ainsi que l'exécutable
utilisé pour éditer la trace de manière externe (notepad.exe, uedit32.exe, ...).
...)
o
Vous pouvez également demander à être averti, avant la tentative de connexion via internet, lors de la
vérification de licence (voir : la vérification de licence).
licence
1
La dll utilisée pour charger le dictionnaire est nsw2ldct.dll est celle qui se trouvera dans le chemin (variable PATH) de chargement
cha
des DLL de
l'application cliente : il est donc impératif que cette DLL soit accessible (en principe elle doit se trouver au même endroit que les DLL NatSystem™
utilisées par votre application, et cela est 'transparent' pour vous).
© 2007, Girollet Info-Conseils
19/55
4.2.2
o
o
o
o
o
Paramètres spécifiques à l'application à déboguer 'Trace & Debug settings'
Les profils de paramétrage
Le paramétrage des traces
Le paramétrage du débogueur
Le paramétrage de la détection de bug
Les paramétrages avancés
4.2.2.1 Les profils de paramétrage
La définition des profils de paramétrage est stockée dans le répertoire d'installation de HookTrack (fichier
'settingsProfiles.ini', qui n'a pas vocation à être édité manuellement,, mais pourra être copié d'un PC à un autre)
autre :
pour revenir à une configuration
uration par défaut des profils,
profil il est possible de supprimer ce fichier ; en relançant
HookTrack il sera recréé avec des valeurs par défaut.
Par défaut un profil 'Personal Settings' est
e créé et est modifiable :
Les autres profils (non modifiables, ils sont précédés d'un ':' dans la liste) correspondent à différents
différent modes
d'utilisation prédéfinis : comme leurs paramétrages ne sont pas modifiables les onglets correspondants
corre
sont
grisés.
Il est possible de créer de nouveaux profils
profil (bouton 'New'), de créer de nouveaux profils
profil par copie (bouton
'Copy') et bien sûr, de supprimer les profils créés (bouton 'Delete').
Sur la fenêtre principale de HookTrack il est possible de choisir un profil de paramétrage à tout moment en le
sélectionnant dans la combo-box des profils
profil (voir : 'IHM principale de HookTrack' pour localiser cette combocombo
box).
4.2.2.1.1 Profil prédéfini:Unactivate spying
Ce profil permet la désactivation
ésactivation de tous les paramètres : pas de trace, pas de débogage,
déb age, pas de détection de bug
(autres que la détection de bug entraînant un plantage assuré). Il est utile pour revenir à un fonctionnement le
plus proche possible de l'application sans HookTrack, ou pour limiter au maximum le temps perdu dans les
interceptions d'appel d'API.
© 2007, Girollet Info-Conseils
20/55
• On l'utilise classiquement pour arriver rapidement à la procédure que l'on souhaite déboguer (on repassera
alors dans un autre mode de fonctionnement, en sélectionnant un autre profil, juste avant de commencer ladite
procédure).
4.2.2.1.2 Profil prédéfini : Client Trace
Ce profil permet de récupérer les traces NatStar™ (Things_Trace et traces du moteur NatStar™), les appels de
méthodes, de fonction/instruction/événements, de tracer les paramètres d'appels, les buffers Tuxedo, les appels
tuxedo (TpCall), les chargements de DLL.
Il permet également de détecter les erreurs Tuxedo™ suite à un appel TpCall, d'intercepter les messages de
debug Microsoft™, les erreurs de type 'sever' émises par le moteur NatStar.
• On l'utilise classiquement pour produire des traces, la détection de bug est limitée à des problèmes graves. Il
n'ouvre pas accès aux fonctions de 'debug', sauf cas particulier, on utilisera de préférence 'Client Debug trace'.
4.2.2.1.3 Profil prédéfini : Client Debug trace
Ce profil rajoute aux fonctionnalités activées par 'Client Trace', toutes les fonctionnalités de débogage (à
l'exception de l'interception des erreurs Windows™, souvent trop 'bavardes' et ne correspondant que rarement à
de véritables problèmes).
•
C'est en principe un paramétrage basé sur ce profil qui est à utiliser lorsqu'il y a un bug avéré.
4.2.2.1.4 Profil prédéfini : Bug Auto Detect
Ce profil permet de détecter des bugs et de déboguer mais il n'utilise pas la trace (et ne perd donc pas de temps à
'tracer').
•
On l'utilise classiquement en phase de test d'intégration pour vérifier le bon comportement de l'application.
© 2007, Girollet Info-Conseils
21/55
4.2.2.2 Le paramétrage des traces
Trace & Debug settings'
settings :
Ce paramétrage peut être défini en accédant au sous-onglet 'Traces' de 'Trace
Un ensemble de cases à cocher permet de définir les types
type de traces que l'on désire récupérer :
Ceci permet
ermet d'activer ou de désactiver de manière globale
global l'ensemble des traces ci-après.
après.
(Cette case à cocher est également rappelée sur l'IHM principale de HookTrack).
Ceci permet de tracer les appels de méthodes,
méthode sous la forme :
Call
NomDeClasse.NomDeMéthode(Handle De L'Objet)
…
EndCall NomDeClasse.NomDeMéthode(Handle
NomDeMéthode(Handle De L'Objet)
'Call' est tracé avant l'appel
'EndCall' est tracé après être ressorti de l'appel.
l'appel
(Ce qui est différent de 'Enter'/'Leave' : cf. ci-dessous).
'Trace Enter/Leave' permet de tracer les appels dans les librairies et les classes, mais ceci ne fonctionne que si la
ressource en question a été compilée en cochant l'option 'Debug' dans la fenêtre du générateur de NatStar™.
Les appels seront alors tracés sous laa forme :
Enter Type.[Conteneur.]Ressource
]Ressource
…
Leave Type.[Conteneur.]Ressource
]Ressource
Avec :
Type
Conteneur
Ressource
= M (méthode), I (instruction),
struction), F (fonction), W (événement
(événement de fenêtre)
= la classe si Type='M',
le nom de fenêtre suivi du nom de control si Type='W',
Type=
sinon rien
= le nom de la méthode ou ressource appelée
(méthode,
hode, fonction, instruction, événement)
évé
Attention : il y a une différence entre Call et Enter,
Enter EndCall et Leave :
'Enter' est tracé (depuis le code appelé) avant l'exécution de la première
première ligne de code de la méthode/ressource ;
'Leave' est tracé (toujours depuis le code appelé) juste avant de quitter la méthode/ressource appelée.
(Voir aussi : ‘Comment lire la trace’).
Si 'Trace Enter/Leave' est activé et que la dll concernée est compilée en ayant coché 'Debug' dans le générateur
NatStar™, alors 'Trace
Trace Input/Output params'
params permettra de tracer les valeurs de paramètres d'appel.
Ceci peut être très utile mais rend la trace évidemment
évidem
plus 'verbeuse' et plus lente.
Permet de tracer les allocations/désallocation
désallocations de segments/buffers NCL (instruction New et Dispose).
© 2007, Girollet Info-Conseils
22/55
Avant l'allocation on trace le type et la taille du segment demandé, puis juste après l'allocation
l'allocatio le pointeur (en
base 10 et en hexadécimal) obtenu.
Avant la désallocation on trace également le pointeur concerné.
concerné
Exemple de trace :
New segment kind=0 size=15187 Name=
->Allocated
>Allocated pointer = 276240146 (0x10771712)
(
…
Dispose segment 276240146 (0x10771712
10771712)
Permet de tracer les allocations/désallocations/'Lock'
allocations/désallocation
d'objets NatStar™.
Exemple de trace :
New Instance LIST 274353682(0x105a4e12)
105a4e12)
…
Dispose object LIST 274353682(0x
0x105a4e12),lock=0 allocated in
M.CT1A_GEST_IHM.GERER_USER10_WCCT1(line=10)
…
Lock object CT1C_GEST_CTT 275821906(0x1070b552)
275821906( 1070b552) lock=1 , allocated in
M.CONTRAT.DISPLAY_VIEW(line=5)
Permet de tracer tous les ordres SQL issus de la partie cliente de l'application.
l'application
Comme HookTrack permet d'évaluer les temps de traitements, il sera aussi possible d'obtenir des statistiques sur
les temps dee traitement des requêtes SQL.
SQL (Pour plus de détails : 'L'analyse des temps de réponse').
réponse'
Exemple de trace :
SQL_OpenCursor% cursor opened=2
SQL_EXEC (cursor=2) select A.ROO_IMA_REF,A.POBJ_CLASS,A.POBJ_EXTRACT from LANGUES A
where A.POBJ_CLASS = 'LANGUE' and A.CC_LNG = : and A.ROO_IMA_REF > : order by
A.ROO_IMA_REF
var0="DE"
var1="00000000000000000000000"
SQL_EXEC (cursor=2) fetch into : ,: ,:
var0="0000000AAA0000000404000"
var1="LANGUE"
var2="Allemandde"
SQL Warning=100 ,NSSQLW100 ** NO ROW WAS FOUND OR LAST ROW REACHED
SQL_EXEC (cursor=2) fetch into : ,: ,:
var0="0000000AAA0000000404000"
0="0000000AAA0000000404000"
var1="LANGUE"
var2="Allemandde"
SQL_CloseCursor cursor closed=2 (opened in source M.LANGUE.CHERCHER_OBJET@line10)
© 2007, Girollet Info-Conseils
23/55
Permet de tracer les appels tuxedo (TpCall) et les buffers d'entrée et de sortie (fml, fml32, Carray,
Carray view,
view32).
Une trace Call TpCall est générée avant l'appel.
Une autre EndCall TpCall est générée après l'appel.
l'appel
Si vous utilisez Tuxedo pour véhiculer vos appels 'remote' NatStar™, vous verrez alors les paramètres d'appel
tels que 'plié/déplié' par le moteur NatStar™. De plus la fonction/méthode remote appelée sera identifiée et
pourra faire l'objet d'une analyse de temps de traitement (…très intéressant pour détecter vos appels remote trop
lent !).
Comme HookTrack permet d'évaluer
aluer les temps de traitements, il sera aussi possible d'obtenir des statistiques sur
les temps d'appel des services tuxedo. (Pour
(
plus de détails : 'L'analyse des temps de réponse').
réponse'
Format de la trace :
Call Tuxedo.TpCall NomDuServiceTuxedo[:LibrairieRemote.Ressource]
NomDuServiceTuxedo
**Begin Tuxedo Input Buffer**
Service=NomDuServiceTuxedo information sur le buffer
[Trace du buffer (par champ pour FML , dump mémoire pour les autres]
**End Tuxedo Input Buffer**
EndCall Tuxedo.TpCall NomDuServiceTuxedo[:LibrairieRemote.Ressource]
NomDuServiceTuxedo
]
**Begin Tracing Output Buffer**
Service=NomDuServiceTuxedo information sur le buffer
[Trace du buffer (par champ pour FML , dump mémoire pour les autres]
**End Tuxedo Output Buffer**
Exemple :
Call Tuxedo.TpCall
TpCall GCC_DEV_TMA_NXA:LKIT_CASTOR.SEARCH_BAEN7C@line=9
**Begin Tuxedo Input Buffer**
Service=GCC_DEV_TMA_NXA BufferAddress=0305B260 type=FML stype= len=61440 Fields(Sizeof=61440 Number=180
MemoryUsed=1156 MemoryUnused=58844 IndexMemoryUsed=1440)
-------------------------------------|?(Occ.)|Id
|N° |Name |Kind/length|Value ...
-------------------------------------|ok(0) |218 |218|(null)|short/2
|=50
|ok(0) |8295 |103|(null)|long/4
|=170
|ok(0) |41061|101|(null)|string/4
|='1.0'
|ok(0) |41153|193|(null)|string/12 |='LKIT_CASTOR'
|ok(0) |41154|194|(null)|string/14 |='SEARCH_BAEN7C'
|ok(0) |41167|207|(null)|string/11 |='I_INT_NAME'
|ok(0) |41168|208|(null)|string/28 |='DELEGATION POLICE ESPAGNOLE'
-------------------------------------**End Tuxedo Input Buffer**
EndCall tuxedo.TpCall
TpCall GCC_DEV_TMA_NXA:LKIT_CASTOR.SEARCH_BAEN7C@line=9 ¹15
**Begin Tracing Output Buffer**
Service=GCC_DEV_TMA_NXA BufferAddress=0306D970 type=FML stype=
stype= len=4096 Fields(Sizeof=4096 Number=167
MemoryUsed=1088 MemoryUnused=1672 IndexMemoryUsed=1336)
-------------------------------------|?(Occ.)|Id
|N° |Name |Kind/length|Value ...
-------------------------------------|ok(0) |204 |204|(null)|short/2
|=0
|ok(0) |207 |207|(null)|short/2
|=1
|ok(0) |360 |360|(null)|short/2
|=0
|ok(0) |8295 |103|(null)|long/4
|=161
|ok(0) |41170|210|(null)|string/24 |='0000000CTM0064621355000'
|ok(0) |41220|260|(null)|string/28 |='DELEGATION POLICE ESPAGNOLE'
|ok(0) |41270|310|(null)|string/11 |='BAENU_TYPE'
|ok(0) |49352|200|(null)|carray/1
|=03 '
'
-------------------------------------**End Tuxedo Output Buffer**
© 2007, Girollet Info-Conseils
24/55
Cette option vous permettra d'enrichir la trace d'informations sur les temps de traitement avec un maximum de
précision. Ceci est indépendant de la notion de "chronométrage" et d'analyse, proprement dite, des temps de
réponse.
En fait vous pouvez utiliser le "chronométrage" et/ou les traces des temps de réponse … selon ce qui vous
convient le mieux.
Le "chronométrage" est utilisé –classiquement
classiquement– sans les traces pour optimiser les temps de traitement.
L'option de trace des temps de réponse, elle, est
e utilisée –classiquement– pour surveiller les temps d'exécution.
Si cette option est activée vous pourrez voir apparaître dans les traces de sortie un complément sous la forme :
…
exec:[tempsExecution]
] own:[tempsExecutionPropre]
own:[
lost:[tempsPerdu
tempsPerdu]
[tempsExecution] : le temps total d'exécution de l'appel (hors temps perdu dans hooktrack)
[tempsExecutionPropre] : le temps total d'exécution de l'appel hors temps d'exécution des appels internes
[tempsPerdu] : le temps perdu dans hooktrack : ceci est fournit
fournit à titre d'indication : il a déjà été retranché des
temps ci-dessus.
Les valeurs nulles ne sont pas tracées
Exemple:
a5c:Enter I.BT_TEST_SQL
a5c: Enter I.DB
a5c: Leave I.DB exec.:336(ms) own:336(ms)
own:
lost:1(ms)
a5c:Leave I.BT_TEST_SQL exec.:337(ms)
337(ms) own:1(ms)
on a ici 337 =336+1
c'est-à-dire 'temps total I.BT_TEST_SQL
BT_TEST_SQL'='temps
'='temps des appelés (I.DB)'+'temps propre I.BT_TEST_SQL'
I.
(remarquons que les temps sont ici arrondis
arrondi à la milli-seconde)
Ceci permet la récupération des traces du moteur NatStar™ et la récupération des traces produites par
l'instruction 'Things_Trace' : c'est ce que vous obtenez dans le fichier de trace classique NatStar™, lorsque vous
n'utilisez pas HookTrack.
Ces traces sont encadrées par des 'pipes
pipes' (voir aussi : 'Comment lire la trace').
Dans le lanceur de votre application si vous ne positionnez pas la variable d'environnement 'NSTRACE' vous
n'aurez pas les traces du moteur NatStar™,
NatStar™ par contre – dans tous les cas – en cochant 'NatStar™ trace
(Things_Trace)' vous pourrez récupérer les traces produites par vos propres appels à l'instruction Things_Trace.
Il est possible grâce au champ de saisie situé sous la case à cocher
coch de saisir une expression régulière, qui
permettra d'exclure les traces correspondantes : elles ne seront alors pas récupérées par HookTrack.
(Voir aussi : 'Syntaxe des expressions
ns régulières').
régulières
© 2007, Girollet Info-Conseils
25/55
4.2.2.3 Le paramétrage du débogueur
eur
Ce paramétrage peut être défini en accédant au sous-onglet
sous
'Debugger' de 'Trace
Trace & Debug settings'
settings :
Cette option permet de fonctionner en mode débogueur
déb
(point d'arrêt, visualisation de variables, de paramètres,
pas à pas).
Mais elle aussi très importante pour qu'en cas de bug/fuite mémoire vous puissiez avoir un maximum
d'informations sur le code source concerné.
Le fait de cocher cette option dégrade légèrement les performances,
performances, mais vous constaterez probablement que
cela est négligeable par rapport au service rendu : en dehors de cas spécifiques et de gros problèmes
problème de
performance, il est conseillé de garder cette option active.
Rappelons une fois de plus que le mode débogueur ne fonctionne qu'avec les dll compilées en mode 'Debug'
sous NatStar™ : rien n'empêche d'avoir des dll non compilées en mode 'Debug' parmi vos dll,
dll simplement
aucune information concernantt leur source ne pourra être affiché.
Ce tableau représente la liste des points d'arrêts actifs pour votre application.
En cochant 'Activate
Activate Below Break Points'
Points vous autorisez HookTrack à arrêter l'application sur les points d'arrêt
du tableau qui sont cochés 'IsActive'.
'Line' : lee numéro de ligne est le numéro dans le source NatStar™ (au moment où
o vous avez compilé la
ressource concernée).
'Scope' : est une identification du source concerné de la forme :
Type
= M (méthode), I (instruction),
nstruction), F (fonction), W (événement
(év nement de fenêtre)
Conteneur
= la classe si Type='M',
le nom de fenêtre suivi du nom de 'control' si Type='W',
sinon rien
Ressource
= le nom de la méthode ou ressource appelée
(méthode,
hode, fonction, instruction, événement)
évé
Vous pouvez facilement supprimer des lignes en les sélectionnant et en appuyant sur 'Suppr'.
En pratique, il est plus facile de positionner les point d'arrêt en affichant le source (clic
(cli droit 'view source' dans
la plupart des IHM ou via le menu 'Debug>Co
Debug>Code Browser') en positionnantt la souris sur la ligne concernée et
en appuyant sur F9 (voir : 'Le browser de code').
code'
4.2.2.4 Le paramétrage de la détection de bug
Ce paramétrage peut être défini en accédant au sous-onglet
sous
'Bug auto. detection' de 'Trace
'
& Debug settings' :
© 2007, Girollet Info-Conseils
26/55
Cette option permet d'activer ou de désactiver de manière générale
général la détection automatique de bug (c'est-à-dire
(c'est
les fonctionnalités ci-après).
Rappelons
elons que la localisation d'un bug sera d'autant plus précise que la dll concernée sera compilée en mode
'Debug' sous NatStar™ et vraiment effective
effec
pour la détection de problèmes
mes mémoire en utilisant les options
option
/RTC du compilateur Microsoft™ VC++ 8.0.
8.0
(Pour plus de détails voir : 'Comment détecter des écrasements
écrasement mémoire').
L'option 'Activate
Activate below memory leaking detection'
detection permet l'activation/désactivation des fonctionnalités
fonction
de
détection de fuite mémoire.
o 'Track NCL segment memory leak' : l'allocation de segment NCL ou de buffer mémoire par l'instruction
New sera mémorisée par HookTrack.
o 'Track Object memory leak' : l'allocation
'allocation d'objet par l'instruction !New (ou Things_New) sera mémorisée
mémorisé
par HookTrack.
o 'Track
Track Things_Alloc segment memory leak'
leak : l'allocation
'allocation de buffer par l'instruction Things_Alloc sera
mémorisée par HookTrack.
o 'Track Things_Sequence_Allocmemory
memory leak'
leak : l'allocation
'allocation de séquences par l'instruction
Things_Sequence_Alloc sera mémorisée
mémorisé par HookTrack.
Les séquences ramenées depuis le serveur seront également détectéess (dans la mesure où
o une instruction de
manipulation de séquence Things_*Sequence* est utilisée).
Pour chacune dee ces options (dans la mesure où la dll à l'origine de l'allocation est compilée
compilé en mode 'Debug') la
ligne du source à l'origine de l'allocation.
De plus, un warning sera affiché si une désallocation ne correspond pas à une allocation précédemment
mémorisée.
(Pour plus de détails : 'Le suivi des fuites mémoire').
© 2007, Girollet Info-Conseils
27/55
Activation de la détection d'erreur Tuxedo™ après un appel TpCall.
En cas d'erreur, une alerte HookTrack sera affichée.
affiché
Activation de la détection d'erreur après l'utilisation d'une des fonction/instruction
fonction/in uction SQL :
o Sql_Exec, Sql_ExecLongStr
o Sql_InitMultiple, Sql_StopMultiple
o Sql_Create, Sql_Delete
o Sql_Open, Sql_Close
o Sql_OpenCursor, Sql_CloseCursor
o Sql_OpenTheCursor, Sql_CloseTheCursor
En cas d'erreur, une alerte HookTrack sera affichée.
Cette option permettra d'intercepter les messages de débogage MicroSoft
Soft (les fameux messages
Retry/Ignore/Continue) et de les faire afficher ou tracer par HookTrack.
Suivant l'option choisie :
o 'Display a debug message' sera affiché par HookTrack (qui pourra alors vous donner la ligne du source
concerné).
o 'Display
Display a debug message, except for error on cast to smaller var'
var idem ci-dessus,
dessus, mais dans le cas d'une
conversion en un type de taille inférieure,
inférieur seul un 'warning' sera tracé.
o 'Trace the message' une ligne de 'warning
warning' sera simplement écrite dans la trace et l'exécution
l'
ne sera pas
interrompue.
Ces options sont surtout utiles pour détecter les écrasements mémoire,
mémoire ce qui nécessite une compilation avec
MicroSoft VC++2005 et des options de compilation de type /RTC*.
/RTC*
(Pour plus de détails : 'Comment détecter les écrasements
écrasement mémoire').
Ces options permettent d'intercepter immédiatement un appel à l'instruction de positionnement d'erreur du
moteur NatStar™ Things_Set_Error.
o 'Intercept NatStar™ Things_Set_Error in case of an error, and display a debug message'
message permet d'afficher
une alerte HookTrack, si Things_Set_Error est
e appelé, sans que cela soit pour un 'Warning' (voir
documentation NatStar™).
o 'Intercept NatStar™ Things_Set_Error in case of a warning, and trace it'
it permet de tracer les appels de type
'Warning' à Things_Set_Error.
© 2007, Girollet Info-Conseils
28/55
Ces options permettent d'intercepter les appels à l'instruction
l'instructi windows 'SetError()',, il est probable que votre
code n'y fasse pas appel directement, mais les API windows appelées par les dll NatStar™ l'utilisent.
Ces appels peuvent rendre compte de problèmes de connexion,
conne ion, de fichier inexistant, de clef de registre absente,
de variables d'environnement absentes …
Cependant, dans la plupart des cas, cela ne correspond probablement pas pour votre application à de véritables
problèmes.
Si par exemple pour tester l'existence d'un fichier vous essayez
essay de l'ouvrir, SetError() sera appelée (message
'fichier inexistant'), ce n'est pas a priori un bug, simplement le fichier est absent.
À l'utilisation, cette option peut donc générer beaucoup de warning ou de message de debug : ce 'bruit' la rend
peu pertinente.
Il n'en demeure pas moins qu'elle peut s'avérer extrêmement intéressante dans certains cas particuliers
particulier de
problèmes remontés par les API Windows™.
Windo
o 'Display a debug message' affichera un message de debug dans HookTrack.
o 'Trace the message' affichera simplement un warning dans la trace.
4.2.2.5 Les paramétrages avancés
Dans le champ de saisie il est possible de saisir une valeur (en secondes) qui forcera la valeur du timeout
Tuxedo™ pour les appels TpCall depuis le client (i.e. : les appels remote si vous utilisez Tuxedo™).
Tuxedo™
Si vous laissez cette valeur à 0, aucune modification
modification ne sera apportée par HookTrack.
© 2007, Girollet Info-Conseils
29/55
4.3
L'IHM principale de HookTrack (après détection d'une application)
Voir aussi : [Détail des menus] [Zone de visualisation du source] [Zone de visualisation des variables] [Zone de visualisation des traces]
© 2007, Girollet Info-Conseils
30/55
4.3.1
Détail des menus
Menu 'Application detection'
Voir aussi : [Comment détecter une application]
[Paramétrage]
Menu 'Windows'
Liste les fenêtres filles de HookTrack correspondant aux différentes applications détectées.
© 2007, Girollet Info-Conseils
31/55
Menu 'Debug'
Voir aussi : [La pile des appels]
Menu 'Trace Buffer'
Voir aussi : [La zone de visualisation des traces]
© 2007, Girollet Info-Conseils
32/55
Menu 'Tools'
Voir aussi : [Le 'browser' de code]
4.3.2
[L'analyse des temps de réponse]
[Le suivi des fuites mémoire]
Zone de visualisation du source
La partie supérieure d'une fenêtre fille permet d'afficher le code source, soit parce qu'on est en mode debug ou
'pas à pas', soit parce qu'à partir d'une autre IHM (trace, pile des appels, analyse des temps d'exécution, listing
d'allocation) on a utilisé le menu contextuel (clic droit) 'View Source'.
Les différentes pages de code sont affichées sous forme d'onglet, un survol de l'onglet avec la souris affiche le
nom complet du source.
Le glyphe
permet d'afficher la liste des sources ouvertes, le glyphe
permet de fermer le source courant.
© 2007, Girollet Info-Conseils
33/55
o Le code source est colorisé, un survol avec la souris d'une variable locale
local ou d'un paramètre ou d'une
expression de type segment séléctionée, permet d'afficher son type, son origine (locale,
(local globale ou
paramètre) et sa valeur (cadre sur fond blanc).
o L'indentation est marquée par une ligne grisée à droite et correspond à du code masquable/affichable en
cliquant sur les icônes [-] et [+], ceci
ci permet une lecture aisée que le code soit indenté correctement ou non.
o Les différents commentaires de source et d'interface sont systématiquement rappelé dans l'entête.
o Le menu contextuel permet de :
o rechercher dans la source
o positionner/supprimer un point d'arrêt
o développer/réduire les indentations
o d'ajouter une variable à la liste des variables
surveillées
o d'ouvrir le code source dans une IHM de type
code 'browser'
o copier dans le presse papier le code indenté
(ce menu n'est actif que si la souris est sur une ligne
: c'est-à-dire
dire si le pointeur est de type 'curseur').
o Un point d'arrêt est représenté par un point rouge à gauche du source.
o Le numéro de ligne survolé par la souris est indiqué
ind
en bas à droite.
Les différentes significations de surlignage dans le code source :
© 2007, Girollet Info-Conseils
34/55
Si vous accédez au source grâce à un menu contextuel 'View Source', la ligne concernée sera surlignée en vert
clair (sans encadrement).
Si vous êtes en mode 'débogueur', la ligne sur le point d'être exécutée sera surlignée en jaune foncé avec
encadrement noir.
Si vous êtes en mode 'débogueur' et si à l'exécution on s'apprête à sortir du source (ici à cause du 'Return' qui est
sur le point d'être exécuté), alors la ligne sera surlignée en jaune clair avec encadrement noir.
Ceci permet de vous rendre compte 'visuellement' que vous quittez ce code et vous laisse une dernière occasion
de jeter un œil aux variables, mais surtout aux paramètres de sortie !!!
Enfin, toujours en mode 'débogueur', une fois sortie du source, la dernière ligne exécutée reste surlignée en
jaune clair (sans encadrement).
Signalons enfin que si le source est sur fond gris, c'est qu'il ne correspond pas à du source qui n'a pas été
compilé en mode 'debug' dans NatStar™ : c'est le cas par exemple si, dans la fenêtre de trace, vous faites clic
droit/'View source' sur une ligne de type Call/EndCall.
4.3.3
Zone de visualisation des variables
La zone centrale de HookTrack permet de visualiser des variables locales, des paramètres, des variables
globales, des objets ou des expressions (adresses, 'cast', éléments de tableaux).
Les intitulés des colonnes de la liste des variables surveillées sont :
Name : nom ou expression de la variable
Scope : source dans lequel la variable à un sens (rappel : vos dll doivent être compilées en mode 'debug' dans la
fenêtre de génération NatStar™), si le source en question n'est pas dans la pile des appels (= son code n'est pas
en cours d'exécution) alors la variable sera grisée et sa valeur sera '<out of scope>'.
Value : valeur de la variable (ou message d'erreur)
© 2007, Girollet Info-Conseils
35/55
o Il est possible d'afficher l'adresse d'une variable en la faisant précèder
préc
d'un @ (comme dans
da le code NCL).
Exemple : @racineLocale.Feuille_basses[i%]
o Il est aussi possible d'utiliser des variables pour représenter des index dans les tableaux.
Exemple : S_FEUILLE(P_feuille).CHAINE_3D[i%][j%][k%]
© 2007, Girollet Info-Conseils
36/55
o Il est possible de 'caster' un pointeur dans un segment en utilisant la syntaxe classique NCL :
nom_segment(nom_pointeur) ;
Exemple : S_FEUILLE(P_feuille)
ou en utilisant en lieu et place de 'nom_segment',
'nom_segment' un type simple ou un tableau de type simple :
Exemple : CHAR[5](2)(P_feuille)
o Il est possible de 'caster' directement en
e utilisant une adresse mémoire.
Exemple : S_FEUILLE(123456).CHAINE_3D
o Il est possible d'extraire d'un arbre (segment/tableau) des champs par glisser/déposer
glisser/déposer.
o Le menu contextuel (clic droit) permet de sauvegarder/charger/effacer/rafraîchir des variables visualisées.
o Les erreurs de valorisation sont signalées en rouge.
Exemple : <Cstring not terminated by 0>
o Les valeurs nouvelles ou modifiées sont signalées en bleu.
o Les valeurs non accessibles (i.e. dont la portée n'est plus dans la pile des appels) sont grisées.
o Les handles d'objet sont détectés automatiquement et les variables d'objets sont présentées
présenté sous forme
arborescente (avec gestion des extraits pour les variables 'store extract' non encore chargées).
c
4.3.4
Zone de visualisation des traces
La partie inférieure de HookTrack présente en temps réel les traces telles que choisies dans le paramétrage.
Dans la zone de trace, un clic droit vous permettra :
o de copier le texte sélectionné (Ctrl+C)
o d'aller
ller sur la trace d'appel / de sortie (Ctrl+E/Ctrl+L)
o de rechercher
echercher dans la trace (avec comme résultat une liste 'cliquable' des lignes trouvées) (Ctrl+F)
o d'afficher le source correspondant (Ctrl+V)
(Voir aussi : Le paramétrage des traces)).
(Voir aussi : Comment lire la trace).
© 2007, Girollet Info-Conseils
37/55
4.4
Points de trace et points d’arrêt
Vous pouvez positionner des points de trace ou point d’arrêt dans le code affiché (sur l’écran principal ou dans
le code affiché dans le browser de code) de différentes manières :
-
Donner le focus à la zone de code, positionner la souris sur la ligne désirée, et faite un clic droit ‘Toggle
Break Point (F9)’.
Cliquez sur la zone vide la plus a droite de la ligne : une IHM s’ouvre pour renseigner les paramètres du
point.
Les points d’arrêt/trace sont listés dans l’onglet ‘Breakpoints’ de la partie central de l’IHM principale.
Vous pouvez éditer les points en cliquant sur le bouton
de la ligne correspondante via l’IHM ci-dessous :
Un point (arrêt et/ou trace) peut
être conditionné à la valeur
d’une expression (à mettre entre
{}).
Ici le point n’est actif que si
i%=1.
La zone de saisie du texte de
trace peut également inclure une
expression entre {}.
Une expression est un nom de
variable, de paramètre , un
champ de segment, une variable
d’objet (même syntaxe que dans
l’onglet watch) ou {#hits} qui
représente le nombre de fois ou
le point a été atteint.
© 2007, Girollet Info-Conseils
38/55
4.5
Les outils de HookTrack
Le 'browser' de code
Le 'dump' d'objets en mémoire
Le suivi des fuites mémoire
La pile des appels
L'analyse des temps de réponse
Les messages de débogage et alertes dans HookTrack
4.5.1
Le 'browser' de code
HookTrack intègre un outil de parcours et de visualisation du code source de vos dictionnaires NatStar™, un
peu comme vous le feriez avec un navigateur ('browser') internet.
Vous pouvez afficher le 'browser' avec le menu 'Tools/Code Browser (Ctrl+B)' de l'IHM principale.
Le code source affiché est enrichi de différentes manières :
o Interface rappelée in extenso dans le code affiché
o Liens hypertexte pour naviguer vers les ressources
o Code colorisé (mots clefs, variables locales, paramètres, chaînes de caractères, ressources)
o Structures de contrôle (boucles, if/endif, …) indentées automatiquement et pouvant être masquées
o Bulle d'aide sur les ressources, variables et paramètres
Un historique de votre navigation est conservé et il est possible de le parcourir simplement.
© 2007, Girollet Info-Conseils
39/55
© 2007, Girollet Info-Conseils
40/55
4.5.2
Le 'dump' d'objets en mémoire
HookTrack vous permet d'afficher une IHM qui liste les objets en mémoire, vous permet de visualiser les
variables d'un objet sélectionné dans cette liste et également de lister les objets qui le référencent.
Cette IHM peut être affichée à tout moment, même si du code est en train d'être exécuté.
Vous pouvez afficher des fenêtres 'dump' avec le menu 'Tools/Objects Dump (Ctrl+D)' de l'IHM principale.
Il peut être intéressant d'afficher plusieurs fenêtres 'dump' chacune donnant une sorte de photographie à un
instant précis de la liste des objets en mémoire.
Sur les lignes représentant un objet, il est possible grâce à un clic droit d'afficher l'objet dans une IHM
indépendante du dump ou de visualiser le source qui est à l'origine de l'allocation de l'objet (le source à l'origine
de l'allocation de l'objet ne sera disponible que si la détection des fuites mémoire pour les objets a été activée,
(voir : 'Track Object memory leak').
© 2007, Girollet Info-Conseils
41/55
© 2007, Girollet Info-Conseils
42/55
4.5.3
Le suivi des fuites mémoire
HookTrack permet d'afficher une liste de ressources système correspondant à des réservations (allocations) de
ressources qui n'ont pas encore fait l'objet de libération (désallocation).
Par 'fuite', on entend la non 'libération' d'une ressource système
syst
qui ne sera plus utilisée par la suite.
Classiquement, une fuite mémoire est avérée lorsque la valeur du pointeur sur la zone mémoire allouée est
perdue sans que l'instruction de désallocation n'ait été utilisée
ut lisée pour libérer cette zone mémoire.
Dans les exemples qui suivent, nous ne traitons que du cas de segment/buffer NCL (instruction New/Dispose).
Les autres cas :
- allocation/désallocation
llocation/désallocation d'objet (!New/!Dispose)
- allocation/désallocation
llocation/désallocation de sequence
sequen (Things_Sequence_Alloc/Things_Sequence_Free)
/Things_Sequence_Free)
- allocation/désallocation
llocation/désallocation de buffer (Things_Alloc/Things_Free)
(Things_Alloc
- ouverture/fermeture de curseur de base de donnée (Sql_OpenCursor/Sql_CloseCursor)
(Sql_OpenCursor/Sql_CloseCursor)
sont gérés sur le même principe.
HookTrack permet d'aider à la détection de ces fuites, pour ce faire,
faire il faut
ut activer dans le paramétrage les
options de suivi des fuites mémoire :
(Pour plus de détails sur le paramétrage voir : 'Activate
Activate below memory leaking detection').
detection
Il sera alors possible à tout moment d'utiliser le menu Tools/Leaks/Show NCL New&DisposeMemory leaks.
© 2007, Girollet Info-Conseils
43/55
Ce menu affiche la liste des allocations 'New'
'
effectuées qui n'ont pas fait l'objet de 'Dispose
Dispose' et qui n'ont pas été
marquées explicitement par vous (dans l'IHM ci-dessous)
ci dessous) comme n'étant pas des 'fuites'.
© 2007, Girollet Info-Conseils
44/55
Dans la colonne 'Ressource', les lignes notées <not tracked> (non pistées) correspondent à des allocations ayant
eu lieu avant que vous n'ayez activé la détection de fuite mémoire, ou ayant eu lieu dans du code pour lequel la
pile des appels était vide (ce qui peut arriver si vos dll ne sont pas compilées en mode 'debug').
Pour avoir une détection précise du source étant à l'origine de l'allocation, il est important de compiler vos dll
NatStar en cochant l'option 'Debug' dans la fenêtre de génération. Vous pourrez alors via un clic droit activer le
menu 'View Source' qui vous amènera directement sur la ligne de source considérée.
Dans la mesure du possible, HookTrack donne le fichier source à l'origine de l'allocation :
- Si vous avez compilé en mode 'Debug' dans NatStar : vous aurez alors le nom de la
ressource et le numéro de ligne de code où a eu lieu l'allocation.
- Si vous avez compilé en vous liant (link) à memdbg.lib et en utilisant l'option de compilation
/DNSMEMTRACE (cf. doc NatStar) : vous aurez alors le nom du source C (ceci uniquement pour les
segments NCL).
- Sinon, soit aucune information complémentaire ne pourra être donnée (<not tracked>), soit la ligne de
source donnée est la dernière connue par HookTrack dans la pile des appels (voir aussi : La pile des
appels).
Pour être certain de détecter les fuites mémoire au sein d'une procédure de votre application il est conseillé de
procéder comme suit :
-
Assurez vous que la détection de fuite mémoire est activée dans le paramétrage.
Effectuez une première fois la procédure dans votre application.
Utilisez le menu Tools/Leaks/Clear NCL New&Dispose Memory leaks (qui marque les allocations comme
n'étant pas des fuites).
Effectuez une nouvelle fois la procédure dans votre application.
Utilisez le menu Tools/Leaks/Show NCL New&Dispose Memory leaks.
À la deuxième exécution de votre procédure, il ne devrait (sauf cas de fuite) y avoir de ligne dans la liste.
Notons également que 'Total size in memory' est un indicateur de la quantité de mémoire allouée et considérée a
priori comme correspondant à des fuites : si elle ne fait qu'augmenter alors que vous exécutez votre procédure
c'est qu'il y a une fuite mémoire avérée.
© 2007, Girollet Info-Conseils
45/55
multithread
4.5.4
La pile des appels
HookTrack vous permet d'afficher la pile des appels (i.e. la liste des fonctions/instructions/méthodes en cours
d'exécution) : menu Debug/Show CallStack(F12).
Dans cette IHM vous aurez également accès (en dépliant les nœuds [+] de l'arbre) aux variables locales et aux
paramètres correspondant à du code de dll compilées avec l'option 'Debug' cochée dans la fenêtre de génération
NatStar™.
Les appels de méthodes sont toujours affichés, les appels de ressources en librairies ne sont 'vus' par HookTrack
que si vous avez coché l'option 'Debug' dans la fenêtre de génération NatStar™.
Le nom identifiant le source est construit ainsi : <Type>.<Conteneur>.<Ressource>
Type
= M (méthode), I (instruction), F (fonction), W (événement de fenêtre)
Conteneur
= la classe si Type='M',
le nom de fenêtre suivi du nom de 'control' si Type='W',sinon rien
Ressource
= le nom de la méthode ou ressource appelée (méthode, fonction, instruction, événement)
Ou C.<Nom de classe>.<Nom de méthode> si le code en question est dans une dll qui n'a pas été compilée en
mode 'Debug' dans la fenêtre de génération NatStar™.
© 2007, Girollet Info-Conseils
46/55
4.5.5
L'analyse des temps de réponse
L'enregistrement des temps d'exécution n'est effectif qu'une
une fois que vous avez activé le "chronomètre" en
cliquant sur le bouton "Chrono" de l'IHM principale :
le chronomètre n'est pas activé ( vert = déclenchement
décl
possible )
le chronomètre est actif ( rouge = chronométrage en cours) : il est possible de l'arréter.
l'arr
Si votre objectif est simplement d'obtenir des temps de réponse il n'est pas utile d'activer la trace*.
A l'arrêt du chronomètre (i.e. il passe du 'rouge' au 'vert' ) un compte rendu des temps de traitement est
affiché.
Les valeurs du tableau sont affichables en millisecondes ou en pourcentage du temps total,
total ces valeurs sont les
valeurs réelles de temps d'exécution (les temps perdus pour tracer,
tracer ou dans les 'points d'arrêts' ont été
retranchés). Les lignes peuvent être triées en cliquant sur le titre des colonnes.
Total execution time : temps total d'exécution : inclue le temps passé dans les appels internes.
Average execution time : temps moyen d'exécution = (Total execution time)/(Call count).
Own execution time : temps total d'exécution hors temps passé dans les appels internes
Average own execution time : temps moyen propre = (Own execution time)/(Call count).
Call count : nombre d'appels.
Name
me : nom de la ressource/méthode/service Tuxedo/requête SQL.
Pour déterminer facilement le code à l'origine d'une dégradation de perfomance,
perfomance triez suivant la colonne 'Own
Execution Time'' : temps d'exécution propre (hors appels
app internes). Le code apparaissant avec le temps
maximum estt très probablement celui qui pose problème.
Vous pouvez visualiser facilement le code en question via un clic droit sur le nom du source.
© 2007, Girollet Info-Conseils
47/55
La cellule en bas du compte rendu affiche la somme des valeurs des cellules sélectionées, si vous avez besoin de
plus de fonctionalités de type 'calcul' le mieux est de faire un copier/coller du tableau dans Excel.
(dans l'exemple on voit que la somme des appels propre est égal au temps d'exécution total de l'appel principal :
0.4113=0.0698+0.2002+0.1412 )
Un conseil pour finir :
n'essayez pas d'optimiser du code a priori (= sans savoir si c'est vraiment ce code qui est responsable de
mauvaise performance) : ce n'est jamais rentable.
*
Le chronométrage des temps de réponse est désormais indépendant de la trace : ce n'était pas le cas dans les versions précédentes.
© 2007, Girollet Info-Conseils
48/55
4.5.6 Les messages de débogage et alertes dans HookTrack
Les alertes et les messages de débogage
age de HookTrack sont systématiquement affichés sous la forme d'une
fenêtre de type :
Si le message n'est qu'un 'Warning', l'icône change et seul un bouton 'OK' peut être disponible.
bug la réponse de HookTrack
Le tableau qui suit donne, par catégorie de bug,
© 2007, Girollet Info-Conseils
49/55
Catégorie de bug
Problème de chargement de dll
Alerte HookTrack
Pop-up
Procédure à suivre
Utilisez un logiciel comme
'Depends', pour connaître la raison
précise du non chargement de la dll
Handle d'objet nul ou invalide
Erreur Tuxedo™
Débordement d'une chaîne de
caractère
Pop-up
Pop-up
Message en rouge 'Cstring not
terminated by 0' lors de la
visualisation de la variable
Index en dehors des limites d'un
Message en rouge 'invalid index'
tableau
lors de la visualisation de la
variable
Pointeur/Handle invalide
Message en rouge 'Invalid
pointer' lors de la visualisation
de la variable
Un écrasement de 'pile' mémoire
Pop-up en sortie de fonction 1
Erreur NatStar™ (things_set_error) Pop-up ou Warning (au choix)
Erreur Windows™
Pop-up ou Warning (au choix)
(Kernel32.SetError)
Fuites mémoire (segment, objets,
non
séquences) ou de curseurs de base
de données
Problème de performance
non
Boucle infinie
non
Appel récursif infini
non
Autres plantages (dans la mesure
où vous avez une alerte de l'OS du
genre de la boîte de dialogue avec
croix blanche sur fond rouge)
non (mais message windows)
1
Utilisez les IHM HookTrack de
suivi des fuites mémoire
Utilisez l'IHM d'analyse des temps
de réponse de HookTrack
Utilisez l'IHM de pile des appels de
HookTrack pour voir où votre
programme est bloqué
Consultez le buffer de trace de
HookTrack pour repérer les
indentations d'appels auxquelles ne
correspondent pas de retours
Gardez la boîte de message de
plantage ouverte.
Utilisez l'IHM de pile des appels de
HookTrack, sur le dernier appel
faites 'clic droit' [View Source],
vous pourrez, dans la plupart des
cas, consulter la valeurs des
variables au moment du plantage,
et la dernière ligne exécutée
Si compilation avec Microsoft VC++8.0 : voir Détection des écrasements mémoire
© 2007, Girollet Info-Conseils
50/55
4.6
Comment détecter des écrasements mémoire
Ce qui est décrit ci-après ne fonctionnera que si vous avez compilé avec le compilateur MicroSoft™ C++
de Visual C++2005 (inclu dans VisualStudio 2005™) … ou pour une version superieure à VC++2005
Il vous faudra modifier les options de compilation dans la 'Configuration' de génération NatStar™.
Il est recommandé d'utiliser une nouvelle configuration de compilation en mode debug, pour VC++2005.
Vous pouvez partir de votre configuration de compilation Cliente et rajouter les options suivantes pour le
compilateur CL.EXE :
/Gs /Gy /RTC1 /RTCc /MDd /Od /errorReport:prompt
En enlevant :
/G* (par exemple /GD et /G5)
/O* (/O1 /O2 …)
Exemple :
Anciennes options de compilation :
/c /Gs /GD /G5 /MD /O2 /W3 /Zp1 /DWIN32 /DNSMEMTRACE
Nouvelles :
/c /Gs /Gy /RTC1 /RTCc /MDd /Od /W3 /Zp1 /DWIN32 /DNSMEMTRACE /errorReport:prompt
IHM NatStar™ correspondante :
Il faudra recompiler votre exécutable et les dll pour lesquelles vous suspectez un écrasement mémoire (dans le
doute, recompilez tout !), en mode 'Debug' dans la fenêtre de génération NatStar™.
Dans HookTrack, n'oubliez pas d'activer les paramètres :
© 2007, Girollet Info-Conseils
51/55
4.7
Comment lire la trace
-
Les traces issues de NatStar sont toujours encadrées par des caractères 'pipe' |
-
Le texte @line=x donne (pour les dll compilées en mode 'Debug') le numéro de ligne
concernée dans le source : le source en question est celui correspondant au premier 'Enter'
de niveau superieur.
-
Le code hexadécimal en début de ligne donne l'identifiant de thread.
- Les appels de méthodes sont tracés comme suit :
Call Nom_de_classe.Nom_Méthode handle_objet (handle_objet_hexadécimal)
Cette trace est affichée avant que la méthode ne soit réellement appelée.
- Les sorties de méthodes sont tracées comme suit :
EndCall Nom_de_classe.Nom_Méthode handle_objet (handle_objet_hexadécimal)
Cette trace est affichée après que la méthode ait été exécutée.
- Les appels d'instruction/fonction/événement sont tracées comme suit :
Enter type.Nom_de_librairie.Nom_de_ressource
Cette trace est affichée juste après l'entrée dans l'instruction/fonction/événement,et ce, uniquement si la dll
concernée a été compilée avec l'option 'Debug' cochée dans la fenêtre de génération NatStar.
- Les sorties d'instruction/fonction/événement sont tracées comme suit :
Leave type.Nom_de_librairie.Nom_de_ressource
Cette trace est affichée juste avant la sortie (return) de l'instruction/fonction/événement et ce, uniquement si
la dll concernée a été compilée avec l'option 'Debug' cochée dans la fenêtre de génération NatStar.
-
Les traces d'Erreur/Warning/Allocation ou Désalocation sont auto-explicites.
-
À la fin d'une ligne de trace ,si vous avez activé la trace des temps d'exécution, vous aurez les
infromations : … exec:[tempsExecution] own:[tempsExecutionPropre] lost:[tempsPerdu] .
-
Les requêtes SQL sont tracées entre 'SQL_EXEC …' et 'SQL_EXEC end', les valeurs des variables passées
en paramètres sont également tracées (voir : activation des traces SQL).
-
Les appels tuxedo , et les buffers tuxedo d'entrée et de sortie sont tracés suivant le format décrit dans la
partie concernant l'activation des traces tuxedo.
© 2007, Girollet Info-Conseils
52/55
Exemple :
© 2007, Girollet Info-Conseils
53/55
4.8
Annexe : syntaxe des expressions régulières
Metacharacter
Meaning
.
Matches any single character.
[]
Indicates a character class. Matches any character inside the brackets (for
example, [abc] matches 'a', 'b', and 'c').
^
If this metacharacter occurs at the start of a character class, it negates the
character class. A negated character class matches any character except
those inside the brackets (for example, [^abc] matches all characters except
'a', 'b', and 'c').
If ^ is at the beginning of the regular expression, it matches the beginning of
the input (for example, ^[abc] will only match input that begins with 'a', 'b',
or 'c').
-
In a character class, indicates a range of characters (for example, [0-9]
matches any of the digits '0' through '9').
?
Indicates that the preceding expression is optional: it matches once or not at
all (for example, [0-9][0-9]? matches '2' and '12').
+
Indicates that the preceding expression matches one or more times (for
example, [0-9]+ matches '1', '13', '456', and so on).
*
Indicates that the preceding expression matches zero or more times.
??, +?, *?
Non-greedy versions of ?, +, and *. These match as little as possible, unlike
the greedy versions that match as much as possible (for example, given the
input '<abc><def>', <.*?> matches '<abc>' while <.*> matches
'<abc><def>').
()
Grouping operator. Example: (\d+,)*\d+ matches a list of numbers
separated by commas (for example, '1' or '1,23,456').
{}
Indicates a match group.
Escape character: interpret the next character literally (for example, [0-9]+
matches one or more digits, but [0-9]\+ matches a digit followed by a plus
character). Also used for abbreviations (such as \a for any alphanumeric
character; see the following table).
\
If \ is followed by a number n, it matches the nth match group (starting
from 0). Example: <{.*?}>.*?</\0> matches '<head>Contents</head>'.
Note that, in C++ string literals, two backslashes must be used: '\\+',
'\\a', '<{.*?}>.*?</\\0>'.
$
At the end of a regular expression, this character matches the end of the
input (for example,[0-9]$ matches a digit at the end of the input).
|
Alternation operator: separates two expressions, exactly one of which
matches (for example, T|the matches 'The' or 'the').
!
Negation operator: the expression following ! does not match the input (for
example, a!b matches 'a' not followed by 'b').
© 2007, Girollet Info-Conseils
54/55
Abréviations
Abbreviation
Matches
\a
Any alphanumeric character: ([a-zA-Z0-9])
\b
White space (blank): ([ \\t])
\c
Any alphabetic character: ([a-zA-Z])
\d
Any decimal digit: ([0-9])
\h
Any hexadecimal digit: ([0-9a-fA-F])
\n
Newline: (\r|(\r?\n))
\q
A quoted string: (\'[^\']*\')|(\'[^\']*\')
\w
A simple word: ([a-zA-Z]+)
\z
An integer: ([0-9]+)
Example 1 : regular expression {[0-9]?[0-9]}:{[0-9][0-9]} : format hh:mm or h:mm
testing with '1:57' : successful match
testing with '01/03': no match
Exemple 2 : regular expression {\*\*KIT}|{MAC}
will match any string with **KIT or with MAC substring
© 2007, Girollet Info-Conseils
55/55