Как я могу профилировать полную сборку C ++? - PullRequest
6 голосов
/ 27 января 2010

Я занимаюсь разработкой приложения на C ++ для Windows XP, используя Eclipse в качестве своей IDE и систему сборки на основе Makefile (с пользовательскими инструментами для генерации Makefile). Кроме того, я использую LZZ, который позволяет мне писать один файл, который затем разделяется на заголовок и файл реализации. Я использую порт TDM GCC 4.

Какие инструменты или методы можно использовать, чтобы точно определить, сколько времени занимает каждая часть процесса сборки и почему он медленный?

Особый интерес будет:

  • Сколько времени занимает подсчет времени для разбора Make-файлов, выяснения зависимостей, проверки временных меток и т. Д.?
  • Сколько времени нужно Eclipse до и после сборки?
  • Сколько времени GCC тратит на разбор системы и повышение заголовков?

P.S .:: 1016 * Это мой домашний проект, поэтому дорогие инструменты для меня недоступны, но в любом случае они могут быть задокументированы, если они особенно актуальны.

Ответы [ 4 ]

6 голосов
/ 27 января 2010

Поскольку Make и GCC очень подробно рассказывают о том, что они делают, очень грубый способ получить общее представление о затраченном времени состоит в том, чтобы передать вывод make через скрипт, который пометит временные метки каждую строку:

make | perl -MTime::HiRes -pe "printf '%.5f ', Time::HiRes::time()"

(я использую ActivePerl для этого, но из того, что я понял, Strawberry Perl теперь может быть рекомендуемой версией Perl для Windows.)

Переформатируйте или обработайте временные метки по своему вкусу.

Чтобы получить более подробную информацию о GCC, в частности, используйте параметр --time-report.

Чтобы узнать, сколько накладных расходов добавляет Eclipse, используйте секундомер для определения времени сборки из Eclipse и из командной строки.

1 голос
/ 28 января 2010

Попробуйте SparkBuild , бесплатную замену gmake / nmake, которая может генерировать аннотированный журнал сборки с точной информацией о времени для каждого задания в сборке. Вы можете загрузить этот файл в SparkBuild Insight, чтобы получить графическое представление о том, куда уходит время.

См. этот блог для примера того, как его использовать.

1 голос
/ 27 января 2010

если вы используете boost, скорее всего, большая часть времени уходит на создание шаблона и последующую оптимизацию. Вы можете указать GCC сообщать о потраченном времени, -time-report (опция UNIX, может быть что-то другое в Windows GCC)

и если вы пытаетесь ускорить время компиляции, отключите оптимизацию, -O0 (последняя буква - ноль, первая буква - заглавная o)

0 голосов
/ 10 июля 2015

Существует версия GNU make под названием римейк , которая предоставляет информацию о профилировании.

...