2013-09-22 9 views
5

Compilato un programma C++ utilizzando gcc -pg -g (almeno, questi sono gli argomenti che ho fornito nel Makefile, non ho alcuna prova concreta di quale comando è stato eseguito) . Il programma ha funzionato fino al completamento normale con CWD impostato sulla mia home directory. Nessun file gmon.out scritto.gmon.out non viene scritto dopo la compilazione con gcc -pg -g

gcc è 4.4.7. OS è centos 6.

Il mio programma è stato avviato da un demone Perl laminato a mano utilizzando fork/exec. Ho verificato che CWD è la mia home directory e che è scrivibile, avendo il demone eseguito touch foo appena prima di eseguire il mio programma di destinazione. Per quanto sono stato in grado di effettuare ricerche, ciò non avrebbe dovuto influire sulla definizione del profilo o sulla scrittura di gmon.out al momento della sua conclusione (normalmente).

risposta

1

Forse hanno risolto questo mesi fa, ma ho incontrato l'effetto di oggi in modo da poter rispondere per i futuri visitatori:

viene visualizzato alcun messaggio di errore, gmon.out Semplicemente non c'è creato (e il testo di analisi -file sarà vuoto).

Uno dei motivi per cui questo potrebbe essere è se non si dispone del metodo main o nel caso di -mwindows a WinMain. Per esempio. se si utilizzano gli argomenti del compilatore (gcc) -e o (vc) /entry o utilizzando __main.

Ho controllato il manuale di gprof ma non ho trovato informazioni su come dirgli un punto di ingresso, quindi ho cambiato il codice.

5

imbattuti in questo stesso problema, g ++ 4.8.2 su CentOS 7. -pg era presente sia compilazione e collegamento, eseguire il processo & questo termina normalmente, senza gmon.out generato.

Ho risolto questo problema sostituendo una chiamata a _exit(status) con exit(status). Si noti che il primo è _exit (3), una chiamata di sistema e il secondo è exit (2), un metodo di libreria standard.

Perché funziona? Dalla pagina gprof man:

Il programma con profilo deve chiamare "uscita" (2) o il ritorno normalmente per le informazioni di profilazione per essere salvato nel file gmon.out.

Apparentemente la scrittura di gmon.out dipende dall'uscita (di livello superiore) (2). Quindi, assicurati che il codice stia usando exit (2) (da stdlib) e non _exit (3) (system call).

+0

Grazie! Ho avuto lo stesso identico problema. – brokenfoot

0

Questo è veramente in ritardo, ma per quelli di voi che stanno lottando, dopo si compila il codice con -pg, è necessario eseguire il file eseguibile per poter generare gmon.out

Problemi correlati