2017-10-10 8 views
0

私は従来のプロジェクトで作業しており、変更のためにユースケースを見つけました。私の分析はクラスに結論づけられました。私はクラスのいくつかのメソッドをトレースすることができましたが、私が上に移動すると、それは分析の中でちょっと退屈になりました。派生クラスのすべてのメソッド/変数を一覧表示する

特に、Linuxプラットフォームで、特定のクラスのすべてのメソッド(ユーザー定義/継承など)とメンバー変数を知ることができるメカニズム/方法はありますか?

+1

すべてのIDEはあなたのために仕事をする必要があります。また、vim with ctagsは、あなたに定義のリストを与えることができます。最後のものはおそらく継承されたものを持たないかもしれません... – Klaus

+0

親階層の各クラスの定義と定義は最も簡単な方法ですが、メンバー関数がインラインで定義されていれば多量のコードを渡す必要があります。 – user2079303

答えて

0

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。それは素晴らしいことではありませんが、何よりも優れています。

+0

多くのポインタありがとうございます。オブジェクト作成自体をデバッグすることができます。どのクラスのコンストラクタが呼び出されていますか – Prakash

関連する問題