Visual Studio 2005/2008 ウオッチにCAutoPtrArrayの中身表示 【チュートリアル】

Visual Studio 2005/2008 CAtlArrayの中身表示のように今回もVisual Studio 2005のデバッグウィンドウのウオッチにCAutoPtrArrayを展開する方法を紹介する。

CAutoPtrArray

このクラスは、ATLにおける自動ポインタ配列実装クラスである。vector < auto_ptr >に意味的には同じだが、vector < auto_ptr >は実際には使うのはお勧めしない。使うとすれば、boostを用いてvector < shared_ptr >を使った方がよい。

さて、このCAutoPtrArrayであるが、標準では、以下のように中身を入れても展開されないため、そのつどm_pData,10などと書いたりして展開しなくてはならない。我々が見たいのはたいてい中身であるためそれはまどろっこしい。

- {...} ATL::CAutoPtrArray < int >
- ATL::CAtlArray < ATL::CAutoPtr < int >, ATL::CAutoPtrElementTraits < int > >	
  { m_pData=0x003a8310 m_nSize=3 m_nMaxSize=5 ... }
  ATL::CAtlArray < ATL::CAutoPtr < int >, ATL::CAutoPtrElementTraits < int > >
+		m_pData	0x003a8310 { m_p=0x003a8250 }	ATL::CAutoPtr< int > *
		m_nSize	3	unsigned int
		m_nMaxSize	5	unsigned int
		m_nGrowBy	0	int

autoexp.dat

autoexp.datは、Visual Studio 2005のウォッチ展開フォーマットを記入するファイルだが、今回は以下の内容を追加してみた。

ATL::CAutoPtrArray<*>{
	children
	(
	    #array
	    (
			expr :	(*($c.m_pData)[$i].m_p),  
			size :	$c.m_nSize
		)
	)
	
    preview
    ( 
        #( 
			"[", 
            $e.m_nSize , 
            "](", 
            
            #array
            (
				expr : 	(*($c.m_pData)[$i].m_p),  
				size : 	$c.m_nSize
			), 
			")"
		)
	)
}

入れる場所は、まだよくわかっていないが、[Visualizer]タグの下に入れている。とりあえずこのように書くだけでうまく展開してくれるようになった。

tenkai.gif

なお、上の画像ではAdd( CAutoPtr < int > ( new int ) )というのを追加しているのだが、ここで単にAdd()として中身を追加しない場合、

- [1](...,...)	ATL::CAutoPtrArray<int>
  [0]	CXX0030: エラーです: 式を評価できません	

このような感じになってしまう。

カテゴリー: チュートリアル   パーマリンク

Visual Studio 2005/2008 ウオッチにCAutoPtrArrayの中身表示 への1件のコメント

  1. ピンバック: Visual Studio 2008 ウオッチにCAtlListの中身表示 | 豆知識