Подтвердить что ты не робот

Как импортировать "GDB" в Python

Я использую Python 2.7 и Python 3.1.3. Но в моем Python я не могу "импортировать gdb".

Это приводит к ошибке:

>>> import gdb
Traceback (most recent call last):
  File "<interactive input>", line 1, in <module>
ImportError: No module named gdb
>>>

Какая причина для этого? Как мне решить эту проблему?

4b9b3361

Ответ 1

import gdb работает только тогда, когда ваш код Python работает в процессе GDB. Он не должен работать от обычного интерпретатора Python системы.

Объяснение

  • GDB внедряет интерпретатор Python, поэтому он может использовать Python в качестве языка расширения.
  • Вы не можете просто import gdb из /usr/bin/python как обычная библиотека Python, потому что GDB не структурирован как библиотека.
  • Что вы можете сделать, это source MY-SCRIPT.py изнутри gdb (эквивалентно запуску gdb -x MY-SCRIPT.py).

Пример программы

Здесь приведен пример. Сохраните файл ниже t.py:

import gdb
gdb.execute('file /bin/cat')
o = gdb.execute('disassemble exit', to_string=True)
print(o)
gdb.execute('quit')

пробег:

$ gdb -q -x t.py 

и вы увидите, что заглушка PLT для exit() разобрана. На x86-64 Linux:

Dump of assembler code for function [email protected]:
   0x0000000000401ae0 <+0>:  jmpq   *0x20971a(%rip)    # 0x60b200 <[email protected]>
   0x0000000000401ae6 <+6>:  pushq  $0x3d
   0x0000000000401aeb <+11>: jmpq   0x401700
End of assembler dump.

Я собрал несколько ресурсов для изучения API-интерфейса GDB Python здесь.

Ответ 2

Вы можете следить за этот учебник, чтобы установить PythonGDB. код Python зависит от расширения C.

Для Windows существует достаточно недавно gdb build в MinGW, но, похоже, он не включает модуль Python, который вы можете импортировать (все еще поддерживает скрипты Python в gdb). Вы должны установить MinGW, а затем установить пакет gbd с помощью mingw-get install gdb.

Если вы используете Cygwin, снова появляется достаточно последнее gdb в Порты Cygwin, без модуля Python, но с поддержкой сценариев Python.

Я предполагаю, что можно было бы построить gdb из источника на любой платформе и получить модуль Python.

Ответ 3

Я не могу протестировать сейчас, но я думаю, вам нужно настроить и создать GDB с поддержкой Python. Посмотрите на руководство.

Я надеюсь, что это поможет.

Это устарело, я думаю. В любом случае вам всегда нужно создавать и настраивать GDB с поддержкой Python.

Вы можете script GDB использовать язык программирования Python. Эта функция доступна, только если GDB был настроен с помощью --with-python.

Вам необходимо настроить GDB с помощью этой опции:

--with-python=location

Где location - это местоположение питона, с которым вы хотели бы использовать GDB.

Ответ 4

Я просто столкнулся с подобной ситуацией при попытке отладки Webkit:

$ python Tools/gdb/webkit.py
Traceback (most recent call last):
  File "Tools/gdb/webkit.py", line 38, in <module>
    import gdb
ImportError: No module named gdb

Затем я понял, что этот script должен быть вызван в gdb, чтобы заставить его работать:

(gdb) source Tools/gdb/webkit.py
(gdb) p run
$1 = (const WebCore::TextRun &) @0x7fffffffa450: {m_characters = "Plugin Testsa", m_len = 12, m_xpos = 0, 
  m_padding = 0, m_allowTabs = false, m_rtl = false, m_directionalOverride = false, 
  m_applyRunRounding = true, m_applyWordRounding = true, m_disableSpacing = false}

Надеюсь, что это поможет.