gdb python api: как автоматически импортировать файл сценария

#python #gdb

#python #gdb

Вопрос:

Как мне добавить файл python, который будет загружаться при запуске gdb ? Например, в качестве теста я добавил:

 # /home/ubuntu/lib/python3.6/site-packages/objfile-gdb.py
print ("Hello")
  

Однако, когда я пытаюсь загрузить это, похоже, это не работает:

 (gdb) set auto-load scripts-directory /home/ubuntu/lib/python3.6/site-packages
(gdb) info auto-load python
No auto-load scripts.
  

Как вы должны правильно загрузить это? Я использовал это as a reference .

Комментарии:

1. Существует несколько различных видов автоматической загрузки. Вы хотите, чтобы скрипт запускался, когда вы направляете gdb для отладки файла с именем objfile , или вы хотите, чтобы скрипт запускался при каждом запуске gdb?

2. @MarkPlotnick в скрипте есть множество вспомогательных функций, позволяющих делать такие вещи, как простая печать стека (так, как я хочу) и другие подобные вещи. Таким objfile образом, это просто вспомогательный файл, который должен загружаться при gdb каждом запуске.

Ответ №1:

Если все, что вы хотите, это добавить вспомогательные функции для каждого сеанса gdb, гораздо проще загрузить ваш скрипт на python с source помощью файла инициализации пользователя gdb, обычно ~/.gdbinit :

 source /home/ubuntu/lib/python3.6/site-packages/objfile-gdb.py
  

Если вы все еще хотите использовать автозагрузку в стиле «objfile-gdb.ext», вы должны следовать соглашению об именовании скриптов:

имя скрипта формируется путем обеспечения того, чтобы имя файла objfile было абсолютным, после всех символических ссылок и разрешения . и .. компоненты и добавление суффикса -gdb.ext . Если этот файл существует и доступен для чтения, GDB оценит его как скрипт на указанном языке расширения.

Например, если вы хотите загрузить скрипт для сеанса, как gdb /usr/bin/tree , скрипт должен быть размещен /home/ubuntu/lib/python3.6/site-packages/usr/bin/tree-gdb.py , кроме того, вам, вероятно, нужно настроить auto-load safe-path конфигурацию.