ВходНаше всё Теги codebook PARTS Поиск Опросы Закон Вторник
2 июня
/957696
fk0 (08.11.2019 20:14, просмотров: 196)
Использование gdb для распечатки значений в контрольных точках. Демонстрация концепции по ссылке. ссылка См. внимательно командную строку. Идея в том, что можно не делать некий "логгер" и не добавлять его в рантайм. Можно расставить в исходном коде некие аннотации, на основании которых отладчик получит возможность расставить в нужных местах точки останова и выполнить в этих точках заданные программистом действия (распечатать значения переменных). Перекомпиляция при этом не требуется, как и модификация кода программы. Что очень хотелось бы, но непонятно как реализовать: 1) распечатка таймштампа в каждой строке (gdb умеет в каких-то непонятных случаях его печатать, но видимо в данном случае никак) без модификации кода (с нацелом на использование в embedded, где функций ОС может не быть); 2) распечатка переменных оптимизированных компилятором: из-за этого нужно добавлять -O1 и перекомпилировать, потенциально может быть решено через макросы изменяющие код (присваивающие переменные другим, временным, но для чего так же нужен typeof() от gcc); 3) распечатка имени функции (класса) -- видимо, невозможно без модификации кода; 4) ассерты проверяемые на стороне отладчика (break __FILE__:__LINE__ if confition...) -- вроде всё просто; 5) сохранение значений переменных, захваченных в определённой точке программы, в отдельный файл (сейчас, потенциально, их можно достать из вывода gdb, но при обработке аудио-файлов, например, это гигантские объёмы данных); 6) заданные пользователем функции распечатки сложных классов (структур), заданные на стороне gdb -- непонятно как сделать без инжекции кода в момент исполнения (опять же можно парсить вывод gdb...) Может можно как-то использовать gdb с питоном? Или таймштампы проставить уже на выводе gdb (перенаправленном в свою программу). Последнее кажется осмысленной идеей. Там же можно вывод gdb разделить на разные потоки, визуализировать и т.п.
[ZX]
Использование gdb для распечатки значений в контрольных точках.
Ответить
Ответы