2010-01-23 4 views
2

J'ai une application hôte et j'ai écrit un plug-in. Je compile mon plug-in vers un objet partagé (disons foo.so), et l'application hôte le chargera via dlopen. Dans ce cas, mon application hôte est l'outil d'opt de llvm (bien que je ne pense pas que ce soit important pour la question).Comment profiler un objet partagé sans profiler l'application hôte?

Je voudrais compiler mon plug-in avec le profilage activé (c'est-à-dire g++ -pg, gprof). Toutefois, lorsque je fais cela, le fichier de sortie de profil gmon.out n'est jamais créé. Peut-être que gprof s'attend à ce que quelqu'un appelle une routine d'installation, ou quelque chose comme ça.

Pour diverses raisons, je voudrais éviter de recompiler l'application hôte avec -pg. Je suis curieux de savoir s'il est possible de profiler un objet partagé foo.so sans profiler l'application hôte opt.

J'ai également examiné d'autres outils de profilage; qprof de HP devrait être capable de gérer cette situation, mais il est incapable de résoudre les noms de fonctions dans l'objet partagé (il revient à addr2line d'une manière très naïve).

Merci, Nick

Répondre

0

Je suppose que la raison pour laquelle vous voulez faire est de trouver des moyens d'optimiser le plug-in (par opposition à simplement obtenir des informations de synchronisation).

Pouvez-vous exécuter l'application hôte sous un débogueur ou un IDE? Est-ce que l'IDE a un bouton de pause, ou pouvez-vous l'interrompre avec Ctrl-C ou une de ces touches?

Ensuite, vous pouvez trouver rapidement le code coûteux en utilisant this technique. Ne prenez des échantillons que lorsque votre plugin est en cours d'exécution, ou si vous ne pouvez pas le faire, ignorez simplement les échantillons qui ne se terminent pas dans votre plugin.

Même si vous obtenez gprof pour fonctionner, ou un profileur similaire, you're likely to be disappointed.