4

クラッシュ ダンプがある場所をデバッグする場合、vtable ポインターはメモリ内のオブジェクトの適切なインジケーターです。

私がgdbでやりたいことは、次のようなことでvtableをクエリできるようにすることです

info address 'vtable for Bar'

ただし、(オブジェクトの有効なインスタンスを必要とせずに) これを行う唯一の方法は、vtable にマングルされた名前を使用することです。

例:

info address _ZTV3Bar

vtable のマングルされた名前を見つけようとするのは世界の終わりではありませんが、面倒です (つまり、objdump -t myexecutable を使用します)。

タイプの有効なインスタンスを必要とせずに、タイプのvtableアドレスを簡単に見つける方法を知っている人はいますか?
- ルール: 問題のオブジェクトの有効なインスタンスを要求して、オブジェクト内で vtable ポインターを見つけることはできません。

4

3 に答える 3

2

オブジェクトの仮想メソッド テーブル (vtable) に関する情報を表示します

構文

info vtbl [Expression]

パラメーター

Expression 仮想メソッド テーブルを表示するオブジェクトへのポインタを取得するために評価される式を指定します。

于 2016-12-29T20:42:50.437 に答える
0

それはルールに反しています。

これらはどのルールですか?

オブジェクトのインスタンスはありませんが、その型の vtable を見つけたいだけです。

しかし、あなたは行います:

set print object on
print *(Bar*) 0x123456

これにより、 0x123456 のオブジェクトがBar、または から派生したものであるかのように出力されBarます。実際にその場所にあるオブジェクトが から派生したものである場合Bar、GDB は派生型を推測し、そのメンバーを出力します。

于 2013-08-21T18:07:21.533 に答える