gmon.out не создается, когда я компилирую с флагом -pg с g++

Я работаю на Mac OSX версии 10.8.5 (Горный лев). У меня есть следующий простой код C++.

main.cpp:

#include <iostream>

int main ()
{
    std::cout << "Hello world!"<<std::endl;
    std::cout << "Goodbye world!"<<std::endl;
    return 0;
}

Я пытаюсь заставить gprof работать на моем компьютере. Как следует из руководства, я ввожу следующие две строки в моем терминале:

g++ -g -pg main.cpp -o a.out 
./a.out

Однако это не создает файл gmon.out, как предполагалось. Когда я пытаюсь ввести gprof в терминале, он говорит:

gprof: can't open: gmon.out (No such file or directory)

чего и следовало ожидать, поскольку gmon.out там нет...

Любые идеи о том, что я делаю неправильно?

РЕДАКТИРОВАТЬ: Некоторые другие вещи, которые могут помочь:

  • Мой друг, у которого есть аналогичная версия OS X (позже я могу попросить его подтвердить) и точно такие же версии g++ и gprof, смог успешно использовать gprof, как я описал.

  • Я использую старую версию g++, но читал в Интернете, что обновление до более новой версии не помогло.

  • a.out работает отлично, печатает Hello world! и Goodbye world!. Я также пробовал это с более сложной программой C++ с несколькими классами, и у нее все та же проблема. Все компилируется и работает нормально, но файл gmon.out не создается.


person nukeguy    schedule 07.11.2013    source источник
comment
Возможный дубликат stackoverflow.com/questions/1101545/, хотя в одном из ответов утверждается, что gprof теперь работает на OS X 10.6. Я не вижу, что вы делаете что-то не так, именно то, что вы делаете, работает так, как вы ожидаете в моей системе Linux.   -  person Crowman    schedule 07.11.2013
comment
Да, у меня 10.8.5, я тоже видел этот вопрос, но решил начать новую ветку, потому что у меня более новая версия OS X, и эта ветка, похоже, никуда не продвинулась. Существует также тест, не связанный с проблемой архитектуры хоста, с которой сталкивается другой человек, а я - нет.   -  person nukeguy    schedule 07.11.2013
comment
Несмотря на то, что люди говорят, -pg не работает ни на одной из моих систем 10.7-10.9.4. Я верю, что вы можете установить свою собственную версию gcc (отдельно от версии, предоставленной Apple), и профилирование будет работать там.   -  person gautam    schedule 10.09.2014
comment
Даже если gprof здесь работает, вы не получите образцов в своем коде, потому что вне ввода-вывода, который gprof все равно не видит, код, который вы скомпилировали, занимает около наносекунды. Он может выполняться тысячи раз за время между выборками gprof.   -  person Mike Dunlavey    schedule 09.11.2014
comment
-pg и gprof определенно не работают для меня в OSX 10.10.3. Даже пробовал запускать cc вместо clang и явно вызывать exit.   -  person Nick Desaulniers    schedule 17.07.2015
comment
@NickDesaulniers на моем Mac, /usr/bin/cc имеет символическую ссылку на /usr/bin/clang   -  person Steven Lu    schedule 29.11.2016


Ответы (1)


Вы должны понимать, что OS X/MacOS по умолчанию не предоставляет GNU GCC в системе.

Обратите внимание на вывод этой команды:

ls -la /usr/bin/g++ /usr/bin/clang++

Эти исполняемые файлы выглядят одинаково. (Вообще-то! Вроде разные, а размер как-то одинаковый!)

Насколько я могу судить, clang не поддерживает вывод gprof. Как бы это ни было запутанно, программа gcc запустит clang.

Я бы порекомендовал попробовать использовать homebrew для установки GCC на OS X/MacOS. Вы должны быть осторожны с тем, как он устанавливается и т. д., чтобы знать, какая команда соответствует какому компилятору.

person Steven Lu    schedule 29.11.2016