Technology [MacOS Programming C] GCC Profiler?

Il Droide

Spam Master
Allora.


Forse non tutti sanno che sono passato a Mac OS.
Ho preso un MBP 15" e sono soddisfattissimo della scelta. Al momento ho tutto bello configurato e ho già iniziato a sviluppare qualcosina.


Non uso XCode perché mi fa cagare, l'ho usato solo per vedere come creare delle GUI con Cocoa + Obj-C e credo che lo userò solo per quello, per tutto il resto continuerò ad usare il buon C/C++ in combinazione con Eclipse.


Ora, il problema è che devo fare profiling di una libreria che sto scrivendo.


XCode di default installa GCC come compilatore, al quale io sono molto legato :love:


Il problema è che il profiler di GCC sembra non funzionare. Fra tutte le robacce installate ho visto che mi ha messo anche un Profiler con una GUI in Cocoa, il problema è che mi fa un po' schifo e non riesco a capirlo troppo bene, vorrei poter usare il profiler che ho usato da x anni a sta parte senza impazzire troppo. Qualcuno sa come fare?


Giusto per chiarirci, questo è l'output del profiling di una libreria su Mac OS
Codice:
[massi@pearl libholdem]$ make
gcc -I/opt/local/include -Wall -Werror -ggdb -ansi -pg -fprofile-arcs -ftest-coverage --std=c99 -c card.c -o card.o
gcc -I/opt/local/include -Wall -Werror -ggdb -ansi -pg -fprofile-arcs -ftest-coverage --std=c99 -c init.c -o init.o
gcc -I/opt/local/include -Wall -Werror -ggdb -ansi -pg -fprofile-arcs -ftest-coverage --std=c99 -c deck.c -o deck.o
gcc -I/opt/local/include -Wall -Werror -ggdb -ansi -pg -fprofile-arcs -ftest-coverage --std=c99 -c player.c -o player.o
gcc -I/opt/local/include -Wall -Werror -ggdb -ansi -pg -fprofile-arcs -ftest-coverage --std=c99 -c play.c -o play.o
gcc -pg -fprofile-arcs -ftest-coverage -shared -o libholdem.dylib card.o init.o deck.o player.o play.o
gcc -I/opt/local/include -Wall -Werror -ggdb -ansi -pg -fprofile-arcs -ftest-coverage --std=c99 -c tests.c -o tests.o
gcc -o tests tests.o -L/opt/local/lib -lcheck -L. -lholdem
[massi@pearl libholdem]$ LD_PROFILE=libholdem.dylib ./tests
Running suite(s): Cards' suite
 Decks' suite
 Players' suite
85%: Checks: 7, Failures: 0, Errors: 1
tests.c:35:P:Cards' consistency:cards_consistency:0: Passed
tests.c:52:P:Cards' comparison:cards_comparison:0: Passed
tests.c:67:E:Decks' consistency:deck_consistency:0: (after this point) Received signal 11 (Segmentation fault: 11)
tests.c:89:P:Decks' push and pop:deck_push_pop:0: Passed
tests.c:100:P:Players' consistency:player_consistency:0: Passed
tests.c:118:P:Players' dealings:player_dealings:0: Passed
tests.c:132:P:Players' bettings:players_bet:0: Passed
[massi@pearl libholdem]$ gprof ./tests
gprof: can't open: gmon.out (No such file or directory)
[massi@pearl libholdem]$


Ovvero: se usato come si sarebbe dovuto usare non genera neanche i file di profiling, mentre se lo forzo un po' cambiando il Makefile


Codice:
[massi@pearl libholdem]$ make
gcc -pg -fprofile-arcs -ftest-coverage -I/opt/local/include -Wall -Werror -ggdb -ansi -pg -fprofile-arcs -ftest-coverage --std=c99 -c card.c -o card.o
gcc -pg -fprofile-arcs -ftest-coverage -I/opt/local/include -Wall -Werror -ggdb -ansi -pg -fprofile-arcs -ftest-coverage --std=c99 -c init.c -o init.o
gcc -pg -fprofile-arcs -ftest-coverage -I/opt/local/include -Wall -Werror -ggdb -ansi -pg -fprofile-arcs -ftest-coverage --std=c99 -c deck.c -o deck.o
gcc -pg -fprofile-arcs -ftest-coverage -I/opt/local/include -Wall -Werror -ggdb -ansi -pg -fprofile-arcs -ftest-coverage --std=c99 -c player.c -o player.o
gcc -pg -fprofile-arcs -ftest-coverage -I/opt/local/include -Wall -Werror -ggdb -ansi -pg -fprofile-arcs -ftest-coverage --std=c99 -c play.c -o play.o
gcc -pg -fprofile-arcs -ftest-coverage -shared -o libholdem.dylib card.o init.o deck.o player.o play.o
gcc -pg -fprofile-arcs -ftest-coverage -I/opt/local/include -Wall -Werror -ggdb -ansi -pg -fprofile-arcs -ftest-coverage --std=c99 -c tests.c -o tests.o
gcc -o tests tests.o -pg -fprofile-arcs -ftest-coverage -L/opt/local/lib -lcheck -L. -lholdem
[massi@pearl libholdem]$ LD_PROFILE=libholdem.dylib ./tests
Running suite(s): Cards' suite
 Decks' suite
 Players' suite
85%: Checks: 7, Failures: 0, Errors: 1
tests.c:35:P:Cards' consistency:cards_consistency:0: Passed
tests.c:52:P:Cards' comparison:cards_comparison:0: Passed
tests.c:67:E:Decks' consistency:deck_consistency:0: (after this point) Received signal 11 (Segmentation fault: 11)
tests.c:89:P:Decks' push and pop:deck_push_pop:0: Passed
tests.c:100:P:Players' consistency:player_consistency:0: Passed
tests.c:118:P:Players' dealings:player_dealings:0: Passed
tests.c:132:P:Players' bettings:players_bet:0: Passed
[massi@pearl libholdem]$ gprof ./tests




flat profile:


 %     the percentage of the total running time of the
time    program used by this function.




granularity: each sample hit covers 4 byte(s) no time accumulated


 %  cumulative  self       self   total      
 time  seconds  seconds  calls ms/call ms/call name  




Index by function name


Ovvero: output vuoto.


Ovviamente il profiling con l'applicazione di XCode funziona, ma non mi ci trovo e credo che non venga neanche seguito bene l'ordine delle chiamate.
 

artista.

Uomo del Popolo
è quello che ti meriti per aver dato i soldi ai secondini di jobs. :hehehe:
domanda seria a caso per dare un senso al post: esistono le gtk anche per mac si?
 

Fakè

Chosen one
Mi è caduto un mito. Adesso che l'ha fatto il Droide, mi sento in qualche modo giustificata nel comprare un Mac :pippotto:
 

Il Droide

Spam Master
Faké ha scritto:
Mi è caduto un mito. Adesso che l'ha fatto il Droide, mi sento in qualche modo giustificata nel comprare un Mac :pippotto:

No per un cazzo.
Io lo uso per sperimentare le tecnologie di sviluppo su un sistema operativo a me ancora abbastanza ignoto, studiare un nuovo linguaggio di programmazione che pare stia avendo gran successo (probabilmente perché l'unico che consente si sviluppare su alcuni dispositivi) e vedere come si possono sviluppare componenti di un microkernel con tecnologia ibrida.

Tu lo useresti per ascoltare la musica con iTunes e controllare il tuo conto corrente su Safari, cose che puoi benissimo fare con Windows senza alcun rallentamento.
 
Alto