ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
22 декабря
957696
Связанные сообщения
Logger
[protodb] Protocol Debugger. Отладка и реверс-инжиниринг протоколов.2023-11-12
В плюсах можно сделать шикарнейший логгер. Во-первых не занимающий програмной памяти или памяти данных (оперирует адресами текст...2020-09-12
Допустим, я хочу сделать в threadX логгер. Он будет писать в кольцевой буфер в памяти, из которого медленно и печально будет вып...2020-06-18
+1. Проблемы с детектированием наезда, на необработанные данные, обгона указателя чтения, можно решить, если использовать не ука...2020-05-17
Нормальный логгер, к сожалению, делается только на C++... На C сам язык начинает сильно мешать. Что потенциально можно было бы ...2019-12-11
Так рассуждать, труды автора fmtlib тоже не оправданы. Мол есть printf, он всё делает. Но это не так, очень даже оправданы. Там ...2019-11-13
Помимо прочего при нормальном программировании всегда делается какой-то "логгер" ведущий протокол работы программы. Потому, что ...2019-08-10
fk0, легенда (08.11.2019 20:14, просмотров: 1661)
Использование gdb для распечатки значений в контрольных точках. Демонстрация концепции по ссылке. https://coliru.stacked-crooked.com/a/74f94619df56b6bf
См. внимательно командную строку. Идея в том, что можно не делать некий "логгер" и не добавлять его в рантайм. Можно расставить в исходном коде некие аннотации, на основании которых отладчик получит возможность расставить в нужных местах точки останова и выполнить в этих точках заданные программистом действия (распечатать значения переменных). Перекомпиляция при этом не требуется, как и модификация кода программы. Что очень хотелось бы, но непонятно как реализовать: 1) распечатка таймштампа в каждой строке (gdb умеет в каких-то непонятных случаях его печатать, но видимо в данном случае никак) без модификации кода (с нацелом на использование в embedded, где функций ОС может не быть); 2) распечатка переменных оптимизированных компилятором: из-за этого нужно добавлять -O1 и перекомпилировать, потенциально может быть решено через макросы изменяющие код (присваивающие переменные другим, временным, но для чего так же нужен typeof() от gcc); 3) распечатка имени функции (класса) -- видимо, невозможно без модификации кода; 4) ассерты проверяемые на стороне отладчика (break __FILE__:__LINE__ if confition...) -- вроде всё просто; 5) сохранение значений переменных, захваченных в определённой точке программы, в отдельный файл (сейчас, потенциально, их можно достать из вывода gdb, но при обработке аудио-файлов, например, это гигантские объёмы данных); 6) заданные пользователем функции распечатки сложных классов (структур), заданные на стороне gdb -- непонятно как сделать без инжекции кода в момент исполнения (опять же можно парсить вывод gdb...) Может можно как-то использовать gdb с питоном? Или таймштампы проставить уже на выводе gdb (перенаправленном в свою программу). Последнее кажется осмысленной идеей. Там же можно вывод gdb разделить на разные потоки, визуализировать и т.п.
[ZX]