Таблица символов GCC для локальных переменных в стеке

Конечно, информация о символах и типах каждой переменной, определенной в программе на C/C++, доступна, иначе отладчики не могли бы их показать. Но как получить доступ к этой информации?

Доступно много информации об эльфе, но речь идет о связывании, который, кажется, содержит только глобальные переменные, а не локальные в стеке, т.е.

В удаленной системе реального времени (не под Unix) я хотел бы иметь возможность время от времени просматривать данные путем копирования некоторой памяти в списке вместе с именем связанной переменной, а затем посмотреть на них, пока система RT продолжается.

Лучше всего, чтобы дамп мог быть введен в любое время для любой переменной без необходимости добавлять некоторые операторы в коде заранее.

1 ответ

Но как получить доступ к этой информации?

TL; DR: это сложно.

Вам нужно будет собрать почти полный отладчик. Вы можете посмотреть это пространство. Когда автор перейдет к шагу 9, у вас будет пример для подражания.

Я хотел бы иметь возможность время от времени заглядывать, копируя некоторую память в списке вместе с именем связанной переменной, а затем взглянуть на них, пока работает система RT.

Системы RT обычно не легко поддаются отладке. Лучшее, что вы могли бы сделать, это сделать снимок всего (использованной части) стека и "выловить" значения переменных позже.

Для этого вам нужно знать текущие значения указателя стека и указателя инструкций, содержимое стека и адреса загрузки всех объектов ELF. И вам нужно будет повторно реализовать большую часть отладчика (или изменить существующий).

Самым простым подходом может быть преобразование (постобработка) вышеуказанной информации в ELF core, а затем использовать существующий отладчик по вашему выбору для анализа значений. Вы можете использовать coredumper пространства пользователя Google, чтобы увидеть, что в этом участвует. Смотрите также этот ответ.

Другие вопросы по тегам