Profiling

  • Créateur du sujet Créateur du sujet zeeboub
  • Date de début Date de début

zeeboub

Membre enregistré
27 Avril 2009
4
0
47
Bonjour,

Quel outil de profiling utilisez vous sous mac ?

Sous linux, il y a bien valgrind mais pas de port sous mac... :(

Merci d'avance
 
Il y a tout ce qu'il faut avec les outils de développement d'Apple, et les plupart des outils sont accessibles directement via Xcode : menu Run/Start with Performance Tool.
 
Merci de la réponse.

J'ai effectivement vu les outils de performance mais cela me semble assez hermetique... Je ne trouve pas de doc :/

Je pense que saturn convient et marche comme gprof mais ... impossible de le faire marcher.

Vous auriez un exemple? Quelles sont les options de compilation et link à rajouter?

Sinon, pour gprof, j'ai besoin d'avoir un binaire "universal". J'ai compris qu'un executable universel est une appli pour ppc et intel.

J'ai compilé un test.cpp avec la ligne

Bloc de code:
g++ -O -pg -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 -mmacosx-version-min=10.4 -arch ppc test.cpp

A l'execution, j'ai bien la création d'un fichier d'instrumentation gmon.out. Par contre, en faisant "gprof a.out", j'ai la ligne d'erreur

Bloc de code:
gprof: file: a.out does not contain the host architecture

Vous avez une idée sur ce que ca signifie? pourtant en faisant "file a.out" j'ai bien

Bloc de code:
a.out: Mach-O universal binary with 2 architectures
a.out (for architecture i386):	Mach-O executable i386
a.out (for architecture ppc):	Mach-O executable ppc

Merci d'avance
 
Merci de la réponse.

...Merci d'avance

utilise LIPO(1), lipo -info path/to/binary, gprof ne fonctionne que tres partiellement sous osx, NM(1) pour les symbols, OTOOL(1) pour les liens otool -L path/to/binary

et bien sur si tu es sous leopard http://www.clanggui.eliotis.com/ :D (seb t'es fatigue>?) pour analyser la synthax
ca gere pas encore c++ mais ca va venir

universal means FAT, universal c'est du Apple slang (ca existe depuis matusalem)
si tu veux connaitre plus d'option lis un de mes makefile

un peu de MacOS hacking et gcc internals et comment fonctionne les outils de profiling d'apple

Bloc de code:
//bridge_saturn.c

#include <stdio.h>
#include <stdlib.h>

void __attribute__((__no_instrument_function__))
     __cyg_profile_func_enter(void *f, void *c) {

    fprintf(stderr, "Enter function %p, caller %p \n", f, c);
}

void __attribute__((__no_instrument_function__))
     __cyg_profile_func_exit(void *f, void *c) {
    
    fprintf(stderr, "Exit function %p, caller %p \n", f, c);
}
Bloc de code:
gcc -c bridge_saturn.c -o bridge_saturn.o
Bloc de code:
[URL="http://le-depotoir.googlecode.com/svn/trunk/realpath/realpath.c"]realpath.c tatouille [/URL]
/* EOF */
Bloc de code:
gcc -Wall realpath.c -o realpath \
bridge_saturn.o -framework CoreServices -lSaturn -finstrument-functions
Bloc de code:
./realpath /Enter function 0x1dcf, caller 0x1c0e 
Enter function 0x1c3a, caller 0x1e16 
Exit function 0x1c3a, caller 0x1e16 
/
Exit function 0x1dcf, caller 0x1c0e
tu pourrais creer ton stub comme ceci

Bloc de code:
/*extern void __cyg_profile_func_enter(void *f, void *c);  
extern void __cyg_profile_func_exit(void *f, void *c);  

void _cyg_profile_func_enter(void *f, void *c) {  
    __cyg_profile_func_enter(&f, &c);  
}  

void _cyg_profile_func_exit (void *f, void *c) {  
    __cyg_profile_func_exit(&f, &c);  
}*/