私は従来のプロジェクトで作業しており、変更のためにユースケースを見つけました。私の分析はクラスに結論づけられました。私はクラスのいくつかのメソッドをトレースすることができましたが、私が上に移動すると、それは分析の中でちょっと退屈になりました。派生クラスのすべてのメソッド/変数を一覧表示する
特に、Linuxプラットフォームで、特定のクラスのすべてのメソッド(ユーザー定義/継承など)とメンバー変数を知ることができるメカニズム/方法はありますか?
私は従来のプロジェクトで作業しており、変更のためにユースケースを見つけました。私の分析はクラスに結論づけられました。私はクラスのいくつかのメソッドをトレースすることができましたが、私が上に移動すると、それは分析の中でちょっと退屈になりました。派生クラスのすべてのメソッド/変数を一覧表示する
特に、Linuxプラットフォームで、特定のクラスのすべてのメソッド(ユーザー定義/継承など)とメンバー変数を知ることができるメカニズム/方法はありますか?
gdbを使用することはできますが、コードのその部分に移動する必要があることを意味します。私は小さなプログラムがある場合:
struct AAA {
int iii;
int aonly;
void foo() {
}
};
struct BBB: public AAA {
int iii;
int bonly;
void fooB() {
}
};
int main (int argc, const char* argv[]) {
BBB b;
b.iii = 1;
return 0;
}
を私はデバッグシンボル(グラムで-g ++)でコンパイルすることができ、ブレークポイントを設定し、オブジェクトを印刷:
あなたはBBBから継承されたものを参照してくださいあり[email protected]:/tmp/ttt$ g++ -g a.cpp
[email protected]:/tmp/ttt$ gdb a.out
*** output flushed ***
(gdb) b 18
Breakpoint 1 at 0x4004e8: file a.cpp, line 18.
(gdb) R
Starting program: /tmp/ttt/a.out
Breakpoint 1, main (argc=1, argv=0x7fffffffe278) at a.cpp:18
18 return 0;
(gdb) ptype b
type = struct BBB : public AAA {
int iii;
int bonly;
public:
void fooB(void);
}
(gdb) p b
$1 = {<AAA> = {iii = -7568, aonly = 32767}, iii = 1, bonly = 0}
(gdb) p b.iii
$2 = 1
(gdb) p b.AAA::iii
$3 = -7568
AAA。それは素晴らしいことではありませんが、何よりも優れています。
多くのポインタありがとうございます。オブジェクト作成自体をデバッグすることができます。どのクラスのコンストラクタが呼び出されていますか – Prakash
すべてのIDEはあなたのために仕事をする必要があります。また、vim with ctagsは、あなたに定義のリストを与えることができます。最後のものはおそらく継承されたものを持たないかもしれません... – Klaus
親階層の各クラスの定義と定義は最も簡単な方法ですが、メンバー関数がインラインで定義されていれば多量のコードを渡す必要があります。 – user2079303