Сконфигурируйте GDB для загрузки только указанных c символов - PullRequest
0 голосов
/ 27 апреля 2020

У меня огромный монолит с более чем 100 общими библиотеками. Некоторые из них настолько огромны, что, если я позволю GDB загрузить все символы, почти вся моя память P C заполнится, и я больше ничего не могу сделать. Поэтому я хочу отключить загрузку всех библиотек и загружать только те библиотеки, которые мне нужны. Я выполняю sh в два этапа:

Отключить загрузку всех символов

set auto-solib-add off

После загрузки приложения загрузите только необходимые библиотеки

shared /opt/build/Bin/drivers/* 

Сейчас Я собираюсь автоматизировать это с помощью файла .gdbinit (который также загружается моей IDE, QtCreator). Однако, учитывая, что команды выполняются во время запуска GDB, я не уверен, как выполнить вторую команду, не зная, загружены ли соответствующие библиотеки. Любая помощь очень ценится. Спасибо.

1 Ответ

1 голос
/ 27 апреля 2020

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

Все динамически связанные библиотеки должны загружаться, если вы запускаете программу и останавливаете ее в начале main. В большинстве случаев достаточно добавить команду start перед командой shared ... для загрузки библиотек. См. Также подробный пример в этом вопросе: Как выборочно читать и загружать символы при подключении процесса в GDB? .

Кажется, что вы не можете использовать команду start в своем доме файл инициализации каталога, потому что символы еще не читаются, и поэтому вы не можете установить временную точку останова на main. Другой вариант - создать отдельный файл инициализации в текущем рабочем каталоге и разместить там 3 команды:

set auto-solib-add off
start
shared /opt/build/Bin/drivers/* 

From https://sourceware.org/gdb/current/onlinedocs/gdb/Startup.html#Startup:

Считывает файл инициализации (если есть) в вашем домашнем каталоге и выполняет все команды в этом файле. Обрабатывает параметры командной строки и операнды. Считывает и выполняет команды из файла инициализации (если есть) в текущем рабочем каталоге

На шаге 4 символы читаются, и вы можете использовать start Команда с этого момента. Но на шаге 3 символы еще не прочитаны, и вы не можете использовать команду start.

...