2011-08-05 21 views
7

私はC++プロジェクトを作成し、さまざまな継承関連型のDAGを構築しています。私は建設後にブレークポイントを設定しました。私はDAGを見たいと思います。ただし、デバッガは基本クラスのみを表示します。 __vfptrのエントリの横に最も派生したタイプの名前を付けますが、実際にそのコンテンツを表示することはできません。ローカルウィンドウで最も派生したタイプを直接表示する方法はありますか?ほとんどの派生型をデバッガで表示

x64をターゲットに設定しています(該当する場合)。

+0

デバッガは実際の型でしか推測できませんが、C++はリフレクションをサポートしていません。キャスト式を使用します。*(foo *)ptr –

+0

@ハンス:デバッガは正確な型を認識します。理論的な議論は別として、デバッガでは正確な型を文字通り命名します。それは明らかに '__vfptr(ほとんどの派生型)'と言います。私は価値を探求することはできません。 – Puppy

+0

vテーブルポインタの正確なタイプを知っています。その値からわかります。それがわからないものは、そのポインタを含むオブジェクトの型です。 –

答えて

2

私にとってはうまくいくような唯一の方法は、autoexp.datの助けを借りてオブジェクトを正しく表示するようにデバッガに指示することです。 vs2010でどのようにうまくいくかわからないが、私はまだ2008年を使っている。この方法はスマートポインタに非常に適している。生のポインタを調べようとしている場合は、手動でウォッチ/クイックウォッチウィンドウにポインタをキャストする必要があります。それはsmartpointerのいくつかの並べ替えやその生のベースポインタを保存するクラスだ場合、あなたは、単にそれがAUTOEXP.DATでこの方法を成し遂げることができます(お使いのベースPTRがm_ptrと呼ばれていると仮定して):

smart_ptr<*>{ 
preview 
(
    #if (($e.m_ptr)!=0) 
    (
    #(
     "smart_ptr ", 
     (*(($T1 *)$e.m_ptr)) 
    ) 
    ) 
    #else 
    (
     #("<Bad Ptr>") 
    ) 
) 
children 
(
    #(
     ptr: (*(($T1 *)$e.m_ptr)) 
    ) 
) 

}

関連する問題