4

ブレークポイントに到達するたびにファイルに出力する GDB 用の単純な python 拡張機能を作成しようとしています。ドキュメントによると、「gdb.Breakpoint クラスはサブクラス化できます」( http://sourceware.org/gdb/onlinedocs/gdb/Breakpoints-In-Python.htmlを参照)

ただし、次のコードを試すと、「TypeError: メタクラスのベースを呼び出すときにエラーが発生しました。タイプ 'gdb.Breakpoint' は受け入れ可能なベース タイプではありません」というエラーが表示されます。

class MyBreakpoint(gdb.Breakpoint):
  def stop (self):
    print "break"
    return False

Ubuntu 11.04 と gdb 7.2 を実行しています。より良いドキュメントへのヘルプやリンクをいただければ幸いです。ありがとう!

私の正確な手順:

$ gdb
GNU gdb (Ubuntu/Linaro 7.2-1ubuntu11) 7.2
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "i686-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
(gdb) source t.py 
Traceback (most recent call last):
  File "t.py", line 3, in <module>
    class MyBreakpoint(gdb.Breakpoint):
TypeError: Error when calling the metaclass bases
    type 'gdb.Breakpoint' is not an acceptable base type
(gdb) 
4

2 に答える 2

5

適切な gdb 7.2 ドキュメントは次のとおりです。

http://sourceware.org/gdb/download/onlinedocs/gdb/Breakpoints-In-Python.html#Breakpoints-In-Python

私は、EmployedRussian が比較的最近の gdb 7.2 (7.2.90 またはこれらのパッチを含むと思われる同等のもの) を使用していると想定しています。

これは実際には 7.2 の公式リリースではなく、多くの点で 7.3 のプレリリースに似ており、7.3 が分岐する約 2 週間前に作成されました (新機能は gdb 7.3 から切り離されました)。

彼がうまくいったのは、単に gdb が「7.2 リリース後のブランチ 7.3」モデルではなく、「リリース前のブランチ 7.3」を使用しているからです。

したがって、7.2でこれを行うには、に頼る必要があるかもしれません

break foo
commands
python print "break"
end
于 2011-05-01T00:39:56.260 に答える
3

コード (インデントを修正) は、GDB-7.2 および最近の GDB CVS スナップショットで正常に動作するようです。

$ cat t.py
class MyBreakpoint(gdb.Breakpoint):
  def stop (self):
    print "break"
    return False

$ gdb-cvs 
GNU gdb (GDB) 7.3.50.20110411-cvs
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-unknown-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
(gdb) source t.py
(gdb) quit

上記の手順を繰り返すと、何か違うことがわかりますか? そうでない場合、取得するために正確に何をしていTypeErrorますか?

EDIT : これは、私の GDB-7.2 にいくつかのアップストリーム パッチが適用されているためにのみ機能します。「vanilla」7.2では動かない

于 2011-04-30T16:05:57.493 に答える