2009-11-14 11 views
16

Estoy usando Xcode en OSX para desarrollar aplicaciones de línea de comando C. También me gustaría usar Instruments para buscar perfiles y encontrar fugas de memoria.Cómo usar Instruments y mostrar la consola en aplicaciones de líneas de comando

Sin embargo, no pude encontrar una manera de mostrar la consola al iniciar la aplicación desde Instrumentos. También soy incapaz de asociar a un proceso de línea de comandos en ejecución (que sale con un error):

He aquí un ejemplo de código:

#include <stdio.h> 
#include <signal.h> 
#include <stdlib.h> 
#include <setjmp.h> 

static sigjmp_buf jmpbuf; 

void handler(int sig) { 
    char c[BUFSIZ]; 

    printf ("Got signal %d\n", sig); 
    printf ("Deseja sair? (s/n) "); 

    fgets(c, sizeof(c), stdin); 

    if(c[0] == 's') { 
     exit(0); 
    } else { 
     siglongjmp(jmpbuf, 1); 
    } 
} 

int main(void) { 
    char buf[BUFSIZ]; 

    signal(SIGINT, handler); 

    sigsetjmp(jmpbuf, 1); 

    while(1) { 
     printf(">>>"); 
     fgets(buf, sizeof(buf), stdin); 
     printf ("Introduziu: %s\n", buf); 
    } 

    return(0); 
} 

Aquí está el error llegué después del lanzamiento de instrumentos, y tratando de conectar al proceso que se ejecuta en Xcode:

[Switching to process 1475] 
[Switching to process 1475] 
Error while running hook_stop: 
sharedlibrary apply-load-rules all 
Error while running hook_stop: 
Invalid type combination in ordering comparison. 
Error while running hook_stop: 
Invalid type combination in ordering comparison. 
Error while running hook_stop: 
Error while running hook_stop: 
Error while running hook_stop: 
Error while running hook_stop: 
Error while running hook_stop: 
Error while running hook_stop: 
Error while running hook_stop: 

Unable to disassemble __CFInitialize. 

¿Alguna idea?

Respuesta

4

Consulte this question para su respuesta.

De Brad Larson en ella:

Ejecutar la aplicación desde Xcode para tener la salida de la consola hilo allí. Mientras se ejecuta su aplicación, inicie Instruments y elija un instrumento apropiado. En Objetivo predeterminado en la barra de menú, seleccione iPhone o computadora (lo que sea apropiado para lo que está probando) y en Adjuntar a proceso encuentre el nombre de su ejecutable.

Al hacer clic en el botón de grabación, su aplicación debería comenzar a perfilarse en Instrumentos mientras su salida de consola se dirige a Xcode. Lamentablemente, este proceso de archivo adjunto tendrá que aparecer después de que la aplicación haya comenzado, por lo que es posible que deba crear un perfil del inicio de su aplicación por separado.

Editar: Si eso no funciona, es posible que sólo tenga que reiniciar el equipo. ¿Ya hiciste eso?

+0

Lo he intentado pero falló. Por favor vea mi pregunta modificada. Gracias. –

+0

Acerca del reinicio: pero _por supuesto_: D –

2

Puede cambiar el resultado en el menú desplegable Opciones al elegir su destino. La salida aparecerá en la consola del sistema (Aplicaciones/Utilidades/Consola).

IO options

+0

Eso no parece hacer ninguna diferencia. – trojanfoe

+1

Funciona si inicia instrumentos desde un terminal (ejecute '/ Applications/Xcode.app/Contents/Applications/Instruments.app/Contents/MacOS/Instruments' en mi computadora). Si haces esto y seleccionas "Consola del sistema" obtienes la salida. – cobbal

+0

Cuando lo ejecuto desde un terminal, no obtengo nada, sin salida, y sin GUI. –

15

Es un poco tarde para contribuir a este hilo de edad, sin embargo he encontrado la mejor manera de perfilar una utilidad de línea de comandos es utilizar iprofiler (manpage). Esto permite que los datos se recogen en la línea de comandos simplemente añadiendo esto al comienzo de la línea de comandos:

iprofiler -leaks -d $HOME/tmp 

(Tengo un directorio temporal privada en $HOME/tmp, así que puede que tenga que utilizar /tmp o salir de la -d opción de línea de comando desactivada por completo).

Mis scripts de prueba lo agregan automáticamente a la línea de comandos si $FINDLEAKS está definido (y precederá a valgrind si se ejecuta bajo Linux).

Esto genera un archivo .dtps (en realidad un directorio) que se puede cargar y analizar mediante Instrumentos.

Si está compilando usando clang entonces simplemente añadir tanto -O3 y -g (sonido metálico no soporta la opción de línea de comandos -pg).

Cuestiones relacionadas