Я искал профилировщик C для Windows, который позволил бы мне проверять время, затрачиваемое на уровне строк исходного кода, а не только на уровне функций. Это делается для того, чтобы найти в программе горячие точки, которые можно оптимизировать.
Very Sleepy отлично подходит для этой цели. Однако в представлении «Исходный код» не похоже, что количество времени, затрачиваемое на строку кода, фактически составляет до 100% эксклюзивного времени для функции.
Например, Very Sleepy говорит, что мы потратили 18.50s Эксклюзивное время в функции. Но сложение всех временных интервалов, указанных в представлении «Источник» для этой функции, добавляет всего около 10 с.
Вот как я компилирую программу:
gcc -IC:/msys64_new/mingw64/include *.c -o plane.exe -g -gdwarf-2 -fno-omit-frame-pointer -O2 -Wall -Wno-unused -LC:/msys64_new/mingw64/lib -lShlwapi
Затем я открываю Very Sleepy через GUI и сэмплирование работающего процесса ровно 100 секунд.
Я использую Very Sleepy CS 0.90. Я использую Windows 7 и использую подсистему Mingw-w64 MSYS2.
РЕДАКТИРОВАТЬ:
Я также заметил две дополнительные странные вещи. Во-первых, Very Sleepy отображает некоторые функции без их имени, но распознает их как часть профилированного модуля.
Во-вторых, Very Sleep, похоже, считает, что некоторые переменные на самом деле являются функциями . Например:
![enter image description here](https://i.stack.imgur.com/B3C90.png)
extension_module_file_suffix
это не функция , это переменная. Что происходит?