Для профилирования нативных приложений в Windows используется DTrace-on-Windows. Для его установки нужно собрать исполняемый файл по инструкции. Если установите другим способом, то возможно в вашей версии не будет исправлена ошибка и flamegraph не будет формировать svg.

В процессе установки, перед 4 пунктом нужно дать разрешения на исполнение скриптов PowerShell. Для этого запускаем PowerShell под администратором и выполняем:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

Прописываем в переменную среды PATH каталог с dtrace.exe. Далее донастраиваем Windows по инструкции (в терминале PowerShell):

bcdedit /set dtrace ON

REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceGuard\ /v EnableVirtualizationBasedSecurity /t REG_DWORD /d 1

mkdir c:\symbols
set _NT_SYMBOL_PATH=srv*C:\symbols*https://msdl.microsoft.com/download/symbols

Перезапускаем ПК и в консоли под администратором делаем проверку:

dtrace -l

В выводе должны быть syscall.

Если все успешно, то далее ставим cargo-flamegraph:

cargo install flamegraph

Теперь все установлено и можно переходить к профилированию. Профилировать рекомендуется release сборку, добавив в Cargo.toml:

[profile.release]
debug = true

Если у вас приложение само “останавливается”, то достаточно в папке с крейтом запустить:

cargo flamegraph

Эта команда соберет релизную сборку, запустит ее с профилированием и выдаст в итоге svg файл.

flamegraph (как и dtrace) нужно запускать от имени администратора.

Немного сложнее дело обстоит если требуется отладить приложение которое само не прекращает работу, например web-сервер. Это особенность профилирования в Windows и связанно оно с тем, что когда вы прерываете выполнение программы запущенной через профилировщик через Ctrl+C, тогда не сформируется svg файл. Проблема решается через профилирование процесса по pid.

Для этого запускаем профилируемый web-сервер отдельно (запускаем exe-шник), смотрим в диспетчере задач pid процесса и запускаем flamegraph с подключением по pid:

flamegraph --pid 2688

После профилирования закрываем процесс web-сервера (приложения) и flamegraph успешно сформирует svg.

ВАЖНО!!! У меня после первого профилирования прекращают собираться данные по вызовам функций. После перезапуска Windows все опять первый запуск профилируется нормально, второй и последующие разы проблема. Какая то ошибка в dtrace.