Oracle® Solaris Studio 12.4: dbx コマンドによるデバッグ

印刷ビューの終了

更新: 2015 年 1 月
 
 

型およびクラスの定義を調べる

whatis コマンドの -t オプションは、型の定義を表示します。 C++ については、whatis -t で表示されるリストは、テンプレート定義およびクラステンプレート例示を含みます。

型または C++ クラスの宣言を出力するには、次のように入力します。

(dbx) whatis -t type-orclassname

継承されたメンバーを表示するために、whatis コマンドは -r オプション (再帰を示します) を受け取ります。このオプションは、指定されたクラスの宣言を、そのクラスが基底クラスから継承するメンバーとともに表示します。

(dbx) whatis -t -r  class-name

whatis -r の問い合わせからの出力は、クラス階層やクラスのサイズによっては長くなることがあります。出力の先頭には、階層のもっとも上にあるクラスから継承されたメンバーのリストが示されます。メンバーのリストは、コメント行によって親クラスごとに分けられます。

クラスの継承されたメンバーのルートを表示するために、whatis コマンドは、型定義のルートを表示する -u オプションを受け取ります。-u オプションを指定しないと、whatis コマンドは、値の履歴にある最後の値を表示します。これは、gdb で使用される ptype コマンドと同様です。

次の 2 つの例では、親クラス load_bearing_block の子クラスであるクラス table を使用しています。この親クラスはさらに、block の子クラスです。

-r を指定しないと、whatis は、クラス table で宣言されたメンバーを報告します。

(dbx) whatis -t class table
class table : public load_bearing_block {
public:
    table::table(char *name, int w, int h, const class point &pos);
    virtual char *table::type();
    virtual void table::draw(unsigned long pw);
};

次の例は、子クラスが継承するメンバーを表示するために、その子クラスに対して whatis -r が使用された場合の結果を示しています。

(dbx) whatis -t -r class table
class table : public load_bearing_block {
public:
  /* from base class table::load_bearing_block::block */
  block::block();
  block::block(char *name, int w, int h, const class point &pos, class load_bearing_block *blk);
    virtual char *block::type();
    char *block::name();
    int block::is_movable();
//  deleted several members from example protected:
    char *nm;
    int movable;
    int width;
    int height;
    class point  position;
    class load_bearing_block *supported_by;
    Panel_item panel_item;
    /* from base class table::load_bearing_block */
public:
    load_bearing_block::load_bearing_block();
    load_bearing_block::load_bearing_block(char *name, int w, int h,
        const class point &pos, class load_bearing_block *blk);
    virtual int load_bearing_block::is_load_bearing();
    virtual class list *load_bearing_block::supported_blocks();
    void load_bearing_block::add_supported_block(class block &b);
    void load_bearing_block::remove_supported_block(class block &b);
    virtual void load_bearing_block::print_supported_blocks();
    virtual void load_bearing_block::clear_top();
    virtual void load_bearing_block::put_on(class block &object);
    class point load_bearing_block::get_space(class block &object);
    class point load_bearing_block::find_space(class block &object);
    class point load_bearing_block::make_space(class block &object);
protected:
    class list *support_for;
    /* from class table */
public:
    table::table(char *name, int w, int h, const class point &pos);
    virtual char *table::type();
    virtual void table::draw(unsigned long pw);
};