Python 3.5をダウンロードしてコンパイルしました。問題なく動作します。問題は、gdb
を使用して、CPUの過剰使用に関する微妙なバグをデバッグする必要があることですpythonプログラムの実行。
公式Python gdb extension に関するドキュメンテーション)から、彼らがする唯一のことは追加することです
add-auto-load-safe-path /path/to/dir/with/python-gdb.py
~/.gdbinit
。私はそれをテストしました
gdb --args /path/to/python3.5/binary
(gdb) py-bt
しかし私は得る
Undefined command: "py-bt"
gdb
はバージョン7.2であり、pythonサポートが有効になっています。
それを見つけた! PYTHONPATH
に/PATH_TO_PYTHON_SRC/Tools/gdb
を追加する必要があります。その後、gdb
で実行できるようになります。
python import libpython
ソース: https://sumitkgaur.wordpress.com/2014/05/13/python-debugging/
gdbを使用したCPythonプロセスのデバッグ によるブログ投稿に基づく問題を解決するもう1つの方法は、python3.5-gdb.py
ファイルを入手することです。コマンドinfo auto-load
を実行して、ファイルが読み込まれていることを確認し(読み込まれている場合)、読み込まれていない場合は手動で読み込みます:source /usr/share/gdb/auto-load/usr/bin/python3.5-gdb.py
(!パスは異なる場合があります)。
その後、py-bt
が機能するはずです。
編集:pyバージョンを変更
gdbは、gdb CLI(またはPythonまたはScheme)スクリプトを自動ロードします scripts-directory 検索パスのディレクトリをルートとするディレクトリツリーを調べます。またはロードされた共有オブジェクトの場合、gdbはobjfile-gdb.gdb
(またはobjfile-gdb.py
またはobjfile-gdb.scm
)という名前のスクリプトを探します。
python
のgdb拡張機能を自動ロードする1つの方法は、ダウンロードしたpython-gdb.py
ファイルを、scripts-directoryパスのいずれかのディレクトリの下に配置することです。たとえば、Ubuntuのpython2.7-dbg
パッケージは、次のファイルをインストールします。
-rwxr-xr-x /usr/lib/debug/usr/bin/python2.7-gdb.py
lrwxrwxrwx /usr/lib/debug/usr/lib/libpython2.7.so.1.0-gdb.py -> ../bin/python2.7-gdb.py
以下は、python2.7-gdb.py
実行可能ファイルのデバッグを開始したときに/usr/bin/python
スクリプトがどのように自動ロードされるかを示すgdbセッションです。
(gdb) show auto-load scripts-directory
List of directories from which to load auto-loaded scripts is $debugdir:$datadir/auto-load.
(gdb) set debug auto-load
(gdb) file /usr/bin/python
Reading symbols from /usr/bin/python...Reading symbols from /usr/lib/debug//usr/bin/python2.7...done.
auto-load: Attempted file "/usr/lib/debug/usr/bin/python2.7-gdb.gdb" does not exist.
auto-load: Expanded $-variables to "/usr/lib/debug:/usr/share/gdb/auto-load".
auto-load: Searching 'set auto-load scripts-directory' path "$debugdir:$datadir/auto-load".
auto-load: Attempted file "/usr/share/gdb/auto-load/usr/lib/debug/usr/bin/python2.7-gdb.gdb" does not exist.
auto-load: Attempted file "/usr/lib/debug/usr/bin/python2.7-gdb.py" exists.
auto-load: Loading python script "/usr/lib/debug/usr/bin/python2.7-gdb.py" by extension for objfile "/usr/lib/debug/usr/bin/python2.7".