2010-04-01 5 views
0

J'essaie de profiler mon application. Pour cela j'ai compilé mon code avec l'option -pg et -lc_p, il a compilé avec succèsdans free(): erreur: pointeur indésirable, trop élevé pour donner un sens Défaut de segmentation: 11 (noyau vidée) gprof

Pendant l'exécution j'obtiens l'erreur suivante. dans free(): erreur: pointeur indésirable, trop élevé pour donner un sens Erreur de segmentation: 11 (noyau exporté)

L'exécution de GDB génère une erreur.

(gdb) b main 
Breakpoint 1 at 0x5124d4: 
(gdb) r 
warning: Unable to get location for thread creation breakpoint: generic error 
[New LWP 100085] 
cacheIp in free(): error: junk pointer, too high to make sense 

Program received signal SIGSEGV, Segmentation fault. 
[Switching to LWP 100085] 
0x00000000006c3a1f in pthread_sigmask() 

Mon application est multi-threadée et est une combinaison de code C et C++.

uname -a 
FreeBSD 6.3-RELEASE FreeBSD 6.3-RELEASE #0: Wed Jan 16 01:43:02 UTC 2008 [email protected]:/usr/obj/usr/src/sys/SMP amd64 

Le code fonctionne correctement sans l'option -pg. Pourquoi le code plante -pg. Est-ce que j'ai raté quelque chose?

+0

Pourquoi le code plante-t-il? – Mayank

Répondre

1

Vous avez probablement un ou plusieurs bugs latents dans votre code qui ne se manifestent que maintenant que vous essayez de profiler avec gprof. Essayez d'exécuter votre code sous valgrind pour éliminer les bogues - corrigez ces bogues - et essayez à nouveau de profiler.

+0

FYI, valgrind ne fonctionne pas avec amd 64 FreeBSD. – Mayank

+1

Ensuite, passez un peu de temps à rechercher le bug ou à construire sur un système supportant valgrind. ;-) –

+1

Avez-vous accès à une machine Linux où vous pouvez exécuter Valgrind? Cela ressemble un peu à des bugs de mémoire qui se cachent. Essayez également de compiler explicitement un binaire x86 32 bits juste pour voir si cela change les choses. –

1

Valgrind fonctionne certainement sur amd64, c'est une plate-forme de développement primaire. Donc le faire fonctionner sous valgrind aidera certainement.