web-dev-qa-db-ja.com

PythonにGDBをインポートする方法

私はPython 2.7およびPython 3.1.3を使用しています。しかし、私のPython 。

それは私にエラーを与えています:

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

これの理由は何ですか?この問題をどのように解決すればよいですか?

25
Sagar Gupta M.

_import gdb_は、GDBプロセス内でPythonコードが実行されている場合にのみ機能します。通常のシステムPythonインタプリタから機能することは想定されていません。

説明

  • GDBはPythonインタプリタを埋め込んでいるため、拡張言語としてPythonを使用できます。
  • あなたはできません_import gdb_から_/usr/bin/python_を通常のPythonライブラリのようにGDBはライブラリとして構成されていません。
  • あなたができることは、gdb内から_source MY-SCRIPT.py_です(_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 
_

exit()のPLTスタブが逆アセンブルされます。 x86-64 Linuxの場合:

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

GDBの学習に関するリソースを集めましたPython API here

34
scottt

このチュートリアル に従って PythonGDB をインストールできます。 Pythonコード は、 C拡張機能 に依存します。

Windowsの場合、最近の十分な gdbビルドMinGW にありますが、 Pythonモジュールが含まれていないようです(Python gdbでのスクリプト作成は引き続きサポートされています)。あなたは MinGW をインストールしてから、mingw-get install gdbを使用してgbdパッケージをインストールします。

Cygwin を使用する場合、 Cygwin Ports に最近十分なgdbがあります、Pythonモジュールなし、ただしPythonスクリプトサポートあり。

どちらのプラットフォームでもソースからgdbをビルドしてPythonモジュールを取得することは可能だと思います。

3
TryPyPy

今はテストできませんが、Python対応のGDBを構成して構築する必要があると思います。これを見てください ガイド

お役に立てば幸いです。

これは時代遅れだと思います。とにかく、常にPython enabled GDBを構築して構成する必要があります。

Pythonプログラミング言語を使用してGDBをスクリプト化できます。この機能は、GDBが--with-python

そのオプションを使用してGDBを構成する必要があります。

--with-python=location

ここで、locationは、GDBを使用するpythonの場所です。

2
Donovan

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

その後、このスクリプトを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}

お役に立てれば。

1
Deqing