Инструментация кода логгерами.
Бредовые идеи про отладку программ на ходу.
1. макрос/плагин компилятора, вызываемый при компиляции вызова любой функции или метода,а так же при компиляции тела этой функции.
2. макрос строит дерево вызовов функций и делает из него статическую структуру в памяти программы, с флагом isDebug на каждую функцию. Структура доступа через какой-нибудь дико профайлинговый рантайм API
3. в каждую функцию макрос добавляет проверку ее флага и если он включен - вывод уникального идентификатора стек-трейса вызова функции, параметров при вызове и вывод результата при выходе, в логи.
4. чтобы стек-трейс не генерить в рантайме - в каждый вызов при компиляции добавляется статическая информация, "откуда меня вызвали", в виде ссылки на граф вариантов вызова этой функции.
Ежели функции ленивые - то вместо стек-трейса будет что-нибудь вроде "где thunk создали, а где зафорсили", но это надо подумать, как такое представить наглядным образом.
1. макрос/плагин компилятора, вызываемый при компиляции вызова любой функции или метода,а так же при компиляции тела этой функции.
2. макрос строит дерево вызовов функций и делает из него статическую структуру в памяти программы, с флагом isDebug на каждую функцию. Структура доступа через какой-нибудь дико профайлинговый рантайм API
3. в каждую функцию макрос добавляет проверку ее флага и если он включен - вывод уникального идентификатора стек-трейса вызова функции, параметров при вызове и вывод результата при выходе, в логи.
4. чтобы стек-трейс не генерить в рантайме - в каждый вызов при компиляции добавляется статическая информация, "откуда меня вызвали", в виде ссылки на граф вариантов вызова этой функции.
Ежели функции ленивые - то вместо стек-трейса будет что-нибудь вроде "где thunk создали, а где зафорсили", но это надо подумать, как такое представить наглядным образом.
no subject
(no subject)
(no subject)
no subject
(no subject)
(no subject)
no subject
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
no subject
а как быть с рекурсивными и взаимно-рекурсивными функциями?
ЗЫ: есть подозрение, что тебе нужен common lisp
(no subject)
(no subject)
(no subject)
(no subject)
no subject
no subject
no subject
Вот с 2-3 заебётесь. Да и вообще со всем этим логом.
no subject
no subject
no subject
Можно сделать хуки на вход / выход из функции, только, не выдумывая ничего сложного, слать UDP сообщения.
У нас так и сделано, только расстановка макросов руками.
Грубо DBG(context, level, message), а потом этот level можно выставить для конкретного context в ран-тайм.