Как я могу использовать интерактивную оболочку IPython в GDB? || Как я могу заставить табуляцию работать в интерактивнойPython

Программы на Python
Ответить
Anonymous
 Как я могу использовать интерактивную оболочку IPython в GDB? || Как я могу заставить табуляцию работать в интерактивной

Сообщение Anonymous »

Обычно в оболочках Python я могу дважды нажать Tab, чтобы получить список подсказок.
С другой стороны, в оболочке Python GDB ( или python-interactive), есть только завершение в стиле GDB.
Пример сеанса:

Код: Выделить всё

$ gdb -q
(gdb) pi
>>> gdb

>>> gdb.TabTab
[i]... nothing ...[/i]
>>> show TabTab
Display all 148 possibilities? (y or n)
ada                              exec-direction                   record
agent                            exec-done-display                remote
annotate                         exec-file-mismatch               remoteaddresssize
[i][...][/i]
Автозаполнение Python должно быть по крайней мере таким.

Код: Выделить всё

$ python
Python 3.[i]X.Y ...[/i]
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.TabTab
sys.abiflags                              sys.hash_info
sys.addaudithook(                         sys.hexversion
sys.api_version                           sys.implementation
[i][...][/i]
Как я могу получить то же самое/похожее в GDB? В частности, оболочка IPython с табуляцией работает нормально.

Неудачные попытки:
  • Это решение

    Код: Выделить всё

    import readline
    import rlcompleter
    readline.parse_and_bind("tab: complete")
    
    заставляет оболочку выводить буквальную вкладку, когда Tab нажимается после sys. или аналогичного.
    По крайней мере, это работает для завершения идентификатора табуляции () действительно перечисляет некоторые записи)
    Похоже, это из-за некоторого взаимодействия с GDB - get_completer_delims каждый раз сбрасывается до некоторого значения, и если приведенный выше код запускается, то завершение табуляции вне gdb также переключается в «режим Python».
  • Используйте фон_zmq_ipython вызывает ошибку сегментации, поскольку некоторые API-интерфейсы gdb (например, gdb.Value) не могут быть прочитаны вне основного потока.
  • Используйте IPython.embed() также заставьте Tab выводить буквальный символ табуляции.
  • Официальная документация gdb https://sourceware.org/gdb/current/onli ... etion.html ничего не упоминает о Python.


Подробнее здесь: https://stackoverflow.com/questions/702 ... completion
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»