Проблема с gprof на OS X: [программа] не имеет архитектуры хоста - PullRequest
9 голосов
/ 09 июля 2009

У меня проблемы с запуском gprof в OS X. Файл test.c:

#include <stdio.h>

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

и мой терминал выглядит так:

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

Редактировать: также не генерирует файл gmon.out.

Что здесь происходит?

Ответы [ 3 ]

9 голосов
/ 09 июля 2009

Серия событий здесь должна работать следующим образом:

  1. Код компиляции с опцией -pg
  2. Код ссылки с -pg, опция
  3. Запустить программу
  4. Программа генерирует gmon.out файл
  5. Выполнить gprof

Проблема в том, что шаг 4 никогда не происходит. Там очень мало информации об этом конкретном сбое. По общему мнению, за последние несколько лет Apple предпочла бы использовать акулу вместо этого, и они очень слабо исправляли ошибки и тому подобное с gprof.

Вкратце: установить Xcode, man shark

4 голосов
/ 09 июля 2009

К сожалению gprof не работает в Mac OS X. Возможно, вы захотите использовать Shark. Это часть инструментов разработчика в /Developer/Applications/Performance Tools/Shark.

Обновление: Похоже, что gprof теперь работает на Mac OS X 10.6 (Snow Leopard), используя новейшие инструменты разработчика.

3 голосов
/ 09 июля 2009

Похоже, test построен с использованием архитектуры, которую gprof не ожидает. Попробуйте следующее:

$ 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 ...

Более новый MacOS поддерживает запуск исполняемых файлов из архитектуры IBM PPC и Intel x86. Некоторые цепочки инструментов, кажется, немного плотно об этом. Gprof, похоже, ожидает, что исполняемый файл будет в нативной архитектуре. Однако если вы используете утилиту arch для принудительного выполнения не родной архитектуры, то, похоже, она работает правильно. Это было обсуждение этого в другом контексте некоторое время назад. Я включил несколько полезных ссылок и дополнительную информацию.

...