Sto lavorando su ambiente Linux. Ho due pacchetti sorgente "C" treno e test_train.gprof: Come generare un call graph per le funzioni nella libreria condivisa collegata al programma principale
- pacchetto treno quando compilato genera libtrain.so
- link test_train a libtrain.so e genera eseguibile treno-test
Ora voglio generare un grafico chiamata utilizzando gprof che mostra chiamando sequenza di funzioni nel programma principale come pure all'interno di libtrain.so
Sto compilando e collegando entrambi i pacchetti con l'opzione -pg e il livello di debug è o0. Dopo aver effettuato ./train-test, viene generato gmon.out. Poi faccio:
$ gprof -q ./train-test gmon.out
Qui, spettacoli di uscita chiamano grafico di funzioni in treno-test ma non in libtrain.so
Quale potrebbe essere il problema?
Vale la pena notare che spesso è possibile capire quale sia il nome della libreria che il file binario sta tentando di caricare (mylib.so vs mylib.so.1 vs mylib.so.1.1 ecc.) Eseguendo 'ldd' sull'applicazione . Questo dovrebbe solo non avere una voce se la biblioteca viene aperta tramite una chiamata diretta dlopen. –
troppo brutto sprof si blocca piuttosto male, come in [questa domanda] (http://stackoverflow.com/questions/6216979/what-is-causing-sprof-to-complain-about-inconsistency-detected-by-ld-so) –
Cosa succede se lo sprof non viene fornito con MinGW, il compilatore scelto per il mio progetto? – Charles