Как импортировать "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
>>>
Какая причина для этого? Как мне решить эту проблему?
Ответы
Ответ 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}
Надеюсь, что это поможет.