Faire un don ! | | style | statistiques | contactez-nous | plan | lettre d'information

Journal : Comment "tracer" une application ?

Posté par Val1472 () le 19 octobre 2007
Bonjour à toi journal !

Je cherche actuellement à optimiser _et_ à surveiller le comportement d'une application en C un peu complexe.
Par surveiller, je veux dire "est-ce que l'application a bien exécuté cette fonction ?", "quel est le résultat de cette opération ?".

Pour la surveillance, rien de plus simple que de mettre des traces dans le logiciel, à coup de "fprintf(stderr, "Trace gna gna gna\n");", on se rend compte très vite du comportement de la bête. On peut même post-processer les traces sur des exécutions "longues".

On peut pousser plus loin la logique et essayer d'optimiser l'application à partir de ces informations. Par exemple, on peut ajouter un "fprintf(stderr, "%ld trace \n", get_cycle());" pour ajouter un élément "timing" à la trace.
Mais les mesures de temps sont forcément imprécises (elles dépendent des tampons sur le flux, etc...).

A partir de là, on pourrait penser à un thread qui ne servirait qu'à collecter les informations ou alors à une zone de mémoire partagée entre l'application et un collecteur de données. Mais ça demandent un investissement et un temps de développement plus important que de placer des "fprintf" dans un code.

Notez que le passage d'un profileur type gprof/sprof n'est pas toujours d'un grand secours quand le code contient de grosses fonctions, des inlines et des macros. :)

Je suis donc à la recherche d'un outil qui permettent "d'instrumenter" le code (par exemple en insérant des appels à des macros dans le code) puis de le tracer avec des mesures de temps, a l'exécution.

J'ai déjà utiliser le Posix Thread Trace Toolkit [1] et c'est plutôt pas mal. Malheureusement les points de trace sont limités aux fonctions de manipulation de thread. (A ma connaissance, il n'est pas possible de spécifier des points de trace arbitraires dans le code d'une application).

Pour un peu plus préciser ce qui me ferait rêver, j'ai trouvé une interface "TimeDoctor" [2] qui affiche des évènements. On pourrait imaginer que chaque ligne constitue un thread de l'application, et que chaque évènements soient liés à une activité particulière du thread (appel d'une macro dans le thread).

Avez-vous des pistes ?

[1] : http://nptltracetool.sourceforge.net/
[2] : http://sourceforge.net/project/screenshots.php?group_id=1747(...)

> Lire le journal (12 commentaires, moyenne: 2,8).  

Vous avez demandé le commentaire #876186.

"Profiling Desktop Applications"

Posté par gouchi (Jabber id, page perso, ) le 19/10/2007 à 19:07. (lien). Évalué à 1.

Un script intéressant de Federico Mena-Quintero.

http://www.gnome.org/~federico/news-2006-03.html#login-time-(...)

La vidéo de la conférence :
http://archive.fosdem.org/2007/schedule/events/profiling_des(...)