LLDB: Выполнить обратный вызов Python после создания цели, чтобы ввести символы - PullRequest
0 голосов
/ 19 апреля 2019

Я пытаюсь выполнить функцию python после target create, чтобы я мог перебрать все модули цели, загрузить недостающие символы из Интернета (на основе GetUUIDString), а затем переопределить каталог и путь GetSymbolFileSpec()к тому, что я скачал.

К сожалению, я не могу понять, как на самом деле вызвать функцию, вызываемую в нужное время, чтобы программа еще не выполнялась, цель была создана, а lldb.target.modules заполнена и позволяет мне изменитьсимволы.

Есть ли документация о том, как подключиться к этому?Мне известно, что существует теоретический способ извлечения символов по требованию с помощью сценария оболочки, который реализован только на macos, а не на других платформах.

1 Ответ

0 голосов
/ 20 апреля 2019

Вы, вероятно, не хотите делать это на target create, поскольку нет гарантии, что цель будет знать все библиотеки, которые будут загружены в нее, прежде чем она действительно запустится. Кроме того, вы, вероятно, также хотите обрабатывать библиотеки, которые динамически загружаются во время работы программы. Реальное место для этого - добавить модуль (именно здесь перехватчик DebugSymbols происходит в lldb.)

Похоже, что в Linux и Windows нет понятия вызова какого-либо агента для добавления символов отладки. Они действительно ищут в /usr/local/debug предварительно кэшированные символы, но нет механизма для вызова, подобного dsymForUUID.

Если вы готовы к небольшому взлому lldb, было бы довольно просто добавить такую ​​выноску. Просто сделайте настройку, которая принимает имя программы. Эта программа принимает в качестве входных данных UUID и возвращает в качестве выходных данных имя файла для отладочной информации. Тогда вы могли бы запустить lldb в том же месте, где lldb в настоящее время вызывает LocateMacOSXFilesUsingDebugSymbols (в LocateSymbols.cpp).

Возможно, более простой способ сделать это - добавить target stop-hook, который вызывает написанную вами команду на основе python, которая просматривает список модулей и извлекает отладочную информацию для всех новых библиотек, которые были обнаружены. Если вы хотите использовать это для отладки запущенных программ, вам нужно только добавить символы перед тем, как управление вернется к пользователю. Таким образом, стоп-крюк будет подходящим местом для этого.

...