Таблица символов GCC для локальных переменных в стеке
Конечно, информация о символах и типах каждой переменной, определенной в программе на C/C++, доступна, иначе отладчики не могли бы их показать. Но как получить доступ к этой информации?
Доступно много информации об эльфе, но речь идет о связывании, который, кажется, содержит только глобальные переменные, а не локальные в стеке, т.е.
В удаленной системе реального времени (не под Unix) я хотел бы иметь возможность время от времени просматривать данные путем копирования некоторой памяти в списке вместе с именем связанной переменной, а затем посмотреть на них, пока система RT продолжается.
Лучше всего, чтобы дамп мог быть введен в любое время для любой переменной без необходимости добавлять некоторые операторы в коде заранее.
1 ответ
Но как получить доступ к этой информации?
TL; DR: это сложно.
Вам нужно будет собрать почти полный отладчик. Вы можете посмотреть это пространство. Когда автор перейдет к шагу 9, у вас будет пример для подражания.
Я хотел бы иметь возможность время от времени заглядывать, копируя некоторую память в списке вместе с именем связанной переменной, а затем взглянуть на них, пока работает система RT.
Системы RT обычно не легко поддаются отладке. Лучшее, что вы могли бы сделать, это сделать снимок всего (использованной части) стека и "выловить" значения переменных позже.
Для этого вам нужно знать текущие значения указателя стека и указателя инструкций, содержимое стека и адреса загрузки всех объектов ELF. И вам нужно будет повторно реализовать большую часть отладчика (или изменить существующий).
Самым простым подходом может быть преобразование (постобработка) вышеуказанной информации в ELF core
, а затем использовать существующий отладчик по вашему выбору для анализа значений. Вы можете использовать coredumper пространства пользователя Google, чтобы увидеть, что в этом участвует. Смотрите также этот ответ.