Skip to content

Instantly share code, notes, and snippets.

@mocurin
Last active February 20, 2020 18:36
Show Gist options
  • Save mocurin/363dc8a9c778535815de581e57a93d4b to your computer and use it in GitHub Desktop.
Save mocurin/363dc8a9c778535815de581e57a93d4b to your computer and use it in GitHub Desktop.
Небольшое руководство по использованию профилировщика в VS и Clion

Visual Studio

Запускать и использовать профилировщик VS можно прямо из коробки, для этого:

  • Ставим брейкпоинты (точки останова) в начале и в конце области, в которой будем проверять загрузку ЦП. И запускаем приложение в режиме отладки (F5)

Imgur

  • Cправа (при дефолтном расположении окон) должно появиться окно "Средства диагностики".

Imgur

  • В окне диагностики ищем "Список средств" (или изображение шестерни, если надписи нет) и выпадающем списке ставим галку на "Использовании ЦП", заходим в параметры. В открывшемся окне заходим в "Использование ЦП" и устанавливаем количество выборок. Чем больше выборок, тем чаще VS смотрит чем занимается программа. При низком количестве выборок не все функции попадут в отчет профилировщика, при высоком - тратится больше ресурсов, но отчет будет точнее. Для себя я поставил максимально доступное мне количество - 8190.

Imgur

  • Теперь заходим в "Использование ЦП" в окне средств диагностики и прожимаем "Запись профиля ЦП" (серый кружок, если надписи нет. По прожатии станет красным). Снова жмем F5 и пропускаем первый брейкпоит - профилировщик призадумается и выдаст список функций.

Imgur

  • Остается только найти нужную функцию - в моем случае это мейн. Для демонстрации работы я написал две простеньких функции, которые принимают интовый вектор и пишут его размер. Первая функция принимает вектор по константной ссылке, вторая - копирует. Соответственно, в первом случае никаких конструкторов копирования и деструкторов не вызывается, во втором вызывается конструктор и деструктор, а в третьем (случай перемещения вектора во вторую функцию) - вызывается куда менее накладный конструктор перемещения и деструктор.

Imgur

Результаты вполне ожидаемые:

Imgur

CLion

CLion использует сторонний профилировщик, который для начала надо бы установить:

  • Устанавливаем Perf и addr2line. Первый устанавливается для конкретной версии ядра, которую, напомню, можно узнать с помощью uname -r, второй - в составе одного из базовых пакетов системы. Но тыкнуть в него на всякий случай стоит:
res=$(uname -r)
sudo apt-get install linux-tools-$res
sudo apt-get install binutils
  • Далее наобходимо изменить настройки ядра для правильной работы профилировщика. Для этого вбиваем команды:
sudo sh -c 'echo 1 >/proc/sys/kernel/perf_event_paranoid'
sudo sh -c 'echo 0 >/proc/sys/kernel/kptr_restrict'

Что они конкретно делают можно почитать здесь. Кстати, после перезапуска системы эти настройки сбросятся. Чтобы этого не происходило, вместо этих команд можно вбить:

sudo sh -c 'echo kernel.perf_event_paranoid=1 >> /etc/sysctl.d/99-perf.conf'
sudo sh -c 'echo kernel.kptr_restrict=0 >> /etc/sysctl.d/99-perf.conf'
sudo sh -c 'sysctl --system'
  • Далее настроим сам проект. В первую очередь пропишем в cmakelists.txt флаг, которыq поможет побороть компилятор, который оптимизирует все подряд:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O0")
  • Так же как и в VS можно настроить частоту выборок. Для этого идем в file/settings/build, execution, deployment/dynamic analysis tools/profiler и пишем нужную частоту выборок. Например, 4000.

  • Вправом верхнем углу ищем кнопку запуска профилировщика. После запуска программа отработает и снизу появится уведомление о готовности отчета. Интерфейс профилировщика в целом напоминает VS-ный, функционал тот же. Только тут будет удобнее использовать дерево вызовов.

Материалы

  1. Clion
  2. Visual Studio
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment