Для профилирования нативных приложений в 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.