[[diary/Kojima]]

・gdbとpython

ほとんどメモ程度。

自分ではやったことないのだけど、
最近のgdb(7.4.x)ではgdbからpythonを起動してあれこれ操作できるようになっているらしい。
それに合わせて、いくつかのパッケージではgdb用のpythonモジュールを用意するようになっている。

その一つがlibstdc++.so.6.0.16-gdb.pyで、最近では/usr/share/gdb/auto-load/以下に収めるようになっているけど、
一時は/usr/lib/ 直下にインストールされて、ldconfigが動くたびに「これ、バイナリファイルとちゃう!」なメッセージが出ていたのは
ご存知の方もいるだろう。

glibも最近のバージョン(確認したのは2.31.10)ではglib.pyとgobject.pyなるモジュールを提供していて
(/usr/share/glib-2.0/gdb/)
glib系のバイナリをgdbで追いかけようとするとこのモジュールが呼ばれるらしい。

で、このモジュールのうちgobject.pyには、

 import gdb.backtrace
 import gdb.command.backtrace

という指定があるのだけど、このgdb.{,command.}backtraceが見つからない、というエラーになってしまう。

このgdb.backtraceやgdb.command.backtraceというのは、どこから提供されるべきなのだろう、、
とあちこち探し回ったのだけど、どうやらfedora系で採用している開発版gdbに別途パッチをあてることで
できるモジュールらしい。

GNU Projectが公開しているgdbの最新版は7.4.1なんだけど、fedoraでは
gdb-7.4.50.20120120-17.fc17.src.rpm
というバージョンを採用していて、このSRPMファイルを開くと、gdb-7.4.50.20120120に対する
gdb-archer.patchというパッチがあり、このパッチをあてることでgdb.backtrace等のモジュールができる模様。

 $ ls -R work/usr/share/gdb/python/gdb/
 work/usr/share/gdb/python/gdb/:
 FrameIterator.py  FrameWrapper.py  __init__.py  backtrace.py  command/  function/  printing.py  prompt.py  types.py
 
 work/usr/share/gdb/python/gdb/command:
 __init__.py  backtrace.py  ignore_errors.py  pahole.py  pretty_printers.py  prompt.py  require.py  upto.py 
 
 work/usr/share/gdb/python/gdb/function:
 __init__.py  caller_is.py  in_scope.py

ちなみにgdb-archer.patchというのは、http://sourceware.org/gdb/wiki/ProjectArcher で開発されている、
GDBに対する開発版のブランチらしい。

多分、gdbの次のバージョン(7.5系)ではこのあたりの機能が採用されることになるのだろうけど、
gdb公式の最新版に無い機能をglibの側で使ってしまう、というのはどんなもんだろう。。
まぁ、現実的にはこのモジュールが無くてもgdbの基本機能は動作するようなので、
gdbの開発速度が遅いことに対する抗議の一種という気もしないでもないところではある。。

#comment

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS