Профилировщик Very Sleepy путает простые переменные с функциями, среди прочего
Я искал профилировщик C для Windows, который позволит мне проверять время, потраченное на уровне строк исходного кода, а не только на уровне функций. Это делается для того, чтобы найти в программе точки доступа, которые можно оптимизировать.
Для этой цели отлично смотрится Very Sleepy. Однако в представлении "Исходный код" не кажется, что количество времени, потраченного на одну строку кода, фактически составляет 100% эксклюзивного времени для функции.
Например, Very Sleepy говорит, что мы потратили 18,50 с эксклюзивного времени на функцию. Но сложение всех временных интервалов, указанных в представлении исходного кода для этой функции, дает только около 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 через графический интерфейс и пробую выполняемый процесс ровно 100 секунд.
Я использую Very Sleepy CS 0.90. Я запускаю Windows 7 и использую подсистему Mingw-w64 MSYS2.
РЕДАКТИРОВАТЬ:
Я также заметил две странные вещи. Прежде всего, Very Sleepy отображает некоторые функции без их имени, но распознает их как часть профилированного модуля.
Во-вторых, Very Sleepy думает, что некоторые переменные на самом деле являются функциями. Например:
extension_module_file_suffix
это не функция, это переменная. Что происходит?