2009-07-09 7 views
8

estoy teniendo problemas para ejecutar gprof en OS X. El archivo test.c es:Problema con gprof en OS X: [programa] no es de la arquitectura anfitrión

#include <stdio.h> 

int main() { 
    printf("Hello, World!\n"); 
    return 0; 
} 

y mi terminal se parece a:

$ gcc -pg test.c 
$ gcc -pg -o test test.c 
$ ./test 
Hello, World! 
$ gprof test 
gprof: file: test is not of the host architecture 

Editar: también, no genera el archivo gmon.out.

¿Qué está pasando aquí?

+0

lo tiene generado el archivo gmon.out para usted? No puedo lograr que haga eso con tu ejemplo. –

+0

No, no es así. Olvidé comprobar esto. Supongo que esto significa que el problema comienza antes. –

Respuesta

9

Se supone que la serie de eventos aquí a trabajar de la siguiente manera:

  1. código Compilar con la opción -pg
  2. código
  3. Enlace con la opción -pg
  4. programa de ejecución del programa
  5. genera gmon.out
  6. archivo
  7. Run gprof

El problema es que el paso 4 nunca sucede. Hay muy poca información sobre esta falla específica. El consenso general en los últimos años parece ser que Apple prefiere que uses tiburón en su lugar, y han sido muy laxos sobre la corrección de errores y cosas así con gprof.

En resumen: Instalar Xcode, man shark

+0

Tendré que ver tiburón. Nunca tuve problemas para obtener un programa para generar 'gmon.out', siempre que el programa realmente salga limpiamente. IIRC, la opción de línea de comando profiler inserta código en la inicialización y terminación del tiempo de ejecución para activar la captura de contadores de tiempo de ejecución y, en última instancia, la escritura del archivo de salida. Siempre que el programa salga a través de return de 'main' o explícitamente a' exit() ', debería generar un archivo de salida. –

3

Parece que test está construido con una arquitectura que gprof no espera. Intente lo siguiente:

$ cat > test2.c 
#include <stdio.h> 
int main() { printf("test\n"); return 0; } 
^D 
$ gcc -arch i386 -pg -o test2 test2.c 
$ file test2 
test2: Mach-O executable i386 
$ ./test2 
test 
$ gprof test2 
... bunch of output ... 
$ gcc -arch ppc -pg -o test2 test2.c 
$ file test2 
test: Mach-O executable ppc 
$ ./test2 
test 
$ gprof test2 
gprof: file: test2 is not of the host architecture 
$ arch -ppc gprof test2 
... same bunch of output ... 

El MacOS más nuevo admite ejecutar ejecutables desde la arquitectura IBM PPC e Intel x86. Algunas de las cadenas de herramientas parecen ser un poco densas al respecto. Gprof parece esperar que el ejecutable esté en la arquitectura nativa. Sin embargo, si utiliza la utilidad arch para forzar la ejecución de la arquitectura no nativa, parece que funciona correctamente. Hubo un discussion about this in another context hace un tiempo. Incluí algunos enlaces útiles y más información allí.

+0

Cuando compilo con -arch i386 o -arch ppc, obtengo el mismo error de gprof (y no se genera ningún archivo gmon.out en ninguno de los casos) –

+0

Eso es extraño ... normalmente uno u otro funcionará. ¿Qué hardware y versión de sistema operativo está ejecutando? El error es definitivamente causado por una falta de coincidencia entre la arquitectura del ejecutable y la arquitectura del host. Esto se menciona explícitamente en la página del manual 'gprof' en _APRODIFICACIÓN UNIVERSAL DE ARCHIVOS_ en mi MacBook Pro - Intel Core 2 Duo, OS 10.5.7. También puede usar 'arch' sin argumentos para ver cuál es la arquitectura nativa y mirar' gcc -v' para ver cuál es la especificación '--target =' para el compilador. –

+0

También estoy usando OS 10.5.7, Intel Core 2 Duo. Llamar a 'arch' devuelve' i386', y 'gcc -v' muestra' Target: i686-apple-darwin9' –

4

Desafortunadamente, gprof no funciona en Mac OS X. En su lugar, probablemente desee utilizar Shark. Es parte de las herramientas de desarrollador en /Developer/Applications/Performance Tools/Shark.

Actualización: Parece que gprof ahora está trabajando en Mac OS X 10.6 (Snow Leopard), utilizando las últimas herramientas de desarrollo.

+0

¿Alguna razón por la cual gprof no funciona en OS X? ¿No se supone que OS X es compatible con las herramientas UNIX? –