読者です 読者をやめる 読者になる 読者になる

のらぬこの日常を描く

ノージャンルのお役立ち情報やアニメとゲームの話、ソフトウェア開発に関する話などを中心としたブログです。

Visual Studio Debugger Visualizers を MFCにも・・・

CObArrayとかのMFC配列を、VCのデバッガで見やすく表示する方法の紹介です。



Visual Studioのそれなりに新しい版のデバッガで、

stl::vector の中身をウォッチウィンドウで参照すると、なんか見やすく整形されています。

が、仕事で開発中のアプリで使ってる配列クラスのライブラリは殆どが、MFC::CObArray*1とかなので、

デバッガでひっじょうに見づらいです。

それでも、theApp とか表示させると、m_pszAppNameっぽいものを出してくれたりするので、なにか仕組みはあるんだろうと思ってたのですが・・・

http://d.hatena.ne.jp/faith_and_brave/20100329/1269833173

まさか、ユーザカスタマイズが一応できるようになっていたとは!


Microsoft Visual Studio [8|9]\Common7\Packages\Debugger\autoexp.dat

に、以下の内容を追加すると、CObArray の表示が std::vector 同様綺麗に整形されて表示されます。

CObArray{
	children
	(
		#array
		(
			expr : ($e.m_pData)[$i],
			size : ($e.m_nSize)
		)
	)
	preview
	(
		#(
			"[", $e.m_nSize , "](",
			#array
			(
				expr : ($e.m_pData)[$i],
				size : ($e.m_nSize)
			),
			")"
		)
	)
}

なお、先頭行の、『 CObArray{ 』を、

『 CStringArray{ 』、『 CDWordArray{ 』、『 CPtrArray{ 』、『 CArray<*,*>{ 』とそれぞれ書き換えたものをコピペしとくと、

その他MFC配列クラスに関しても、同様の効果が得られます。

同様にしてCList系も対応出来そうだけど、

問題はCMap系・・・・・ どうすんのこれ・・・


追記

#array で 要素==NULL を表示しない設定と、要素数不定の#list(pNext==NULLならそこで終了みたいな)が定義できると、使い勝手ずいぶんあがるとおもうのだが

*1MFCなんて名前空間実際にはありません