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
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
Ovvero: se usato come si sarebbe dovuto usare non genera neanche i file di profiling, mentre se lo forzo un po' cambiando il Makefile
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.
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
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.