Комментарии 4
Ничего не понятно, но очень интересно
Проблема останова решена, всё? ;-)
У меня, возможно, глупый вопрос. Здесь описан сам метод, но не описано его применение.
Если я правильно понял, этот код компилируется в отдельный бинарник и при запуске выводит название методов, которые были использованы в коде, чтобы потом распарсить эту информацию и как-то использовать её?
Есть множество функций. Есть те функции, которые программа использует, а есть те, которые нет. Использует - это вызывает хотя бы один раз. Смысл кода - получит сайд-эффект в рантайме на факт использования. Так же туда можно передавать любые компилтайм/статические данные, уникальный для каждой функции. Они нужны, в том числе, для идентификации той функици которая стриггерила эффект.
Что далее с ним делать - абсолютно неважно. В данном примере в качестве данных передаётся указатель на функцию. Используется только для идентификации. В качестве эффекта вызывается принтф.
push назван не очень удачно - лучше это назвать effect.
Есть говорить о юзкейсах. У нас есть vulkan, там есть расширения. Использование расширений добавляет в api дополнительные функции. Мы не знаем какие расширения поддерживает, условно, видяха.
Далее мы пишем код. Нам нужно составить список всех функций, которые используем в коде. Потом узнать какие расширения их предоставляют. А далее перед стартом программы проверить, условно, видяху на наличие этих расширений.
Очевидно, что с таким подходом мы можем что-то забыть. Наш код запуститься, а далее внезапно упадёт, потому как мы забыли запросить какое-то расширение.
Используя описанный в статье подход - мы можем повесть как сайд-эффект проверку наличие в, условно, видяхе этих расширений. Это сработает до старта программы. Таким образом мы никогда ничего не забудем и не упадём внезапно.
Попытка решения описанной выше задачи и родило эту статью. Применений масса и это лишь самый базовй вариант. Постараюсь в будущем сделать более подробную статью с описанием юзкейсов практических.
Немного уличной магии, либо как статически определить вызывается ли функция