不知道为什么VS2005没有带MFC的Visualizer,调试起来实在别扭,所以自己写了一个。
只有Container的部分,因为别的东西没有那么复杂。
Visualizer是没有文档化的,所以,尝试了很久。。。
这段是给CArray的,所有的Array都是类似的结构,所以可以通用:
- CArray<*>|CObArray|CByteArray|CDWordArray|CPtrArray|CStringArray|CWordArray|CUIntArray{
- preview
- (
- #(
- "[",
- $e.m_nSize ,
- "](",
- #array
- (
- expr : $c.m_pData[$i],
- size : $c.m_nSize
- ),
- ")"
- )
- )
- children
- (
- #(
- #array
- (
- expr : $c.m_pData[$i],
- size : $c.m_nSize
- )
- )
- )
- }
不过还有个类型化的模版CTypedPtrArray:
- CTypedPtrArray<*,*>{
- preview
- (
- #(
- "[",
- $e.m_nSize ,
- "](",
- #array
- (
- expr : (($T2 *)$c.m_pData)[$i],
- size : $c.m_nSize
- ),
- ")"
- )
- )
- children
- (
- #(
- #array
- (
- expr : (($T2 *)$c.m_pData)[$i],
- size : $c.m_nSize
- )
- )
- )
- }
List也是通用的:
- CList<*>|CObList|CPtrList|CStringList{
- preview
- (
- #(
- "[",
- $e.m_nCount,
- "](",
- #list
- (
- head : $c.m_pNodeHead,
- next : pNext
- ) : $e.data,
- ")"
- )
- )
- children
- (
- #list
- (
- head : $c.m_pNodeHead,
- next : pNext
- ) : $e.data
- )
- }
类型化的模版类也是要单独处理的:
- CTypedPtrList<*,*>{
- preview
- (
- #(
- "[",
- $e.m_nCount,
- "](",
- #list
- (
- head : $c.m_pNodeHead,
- next : pNext
- ) : ($T2)$e.data,
- ")"
- )
- )
- children
- (
- #list
- (
- head : $c.m_pNodeHead,
- next : pNext
- ) : ($T2)$e.data
- )
- }
Map的元素节点,如果不可视化这个的话,看到Map的元素也是一堆没有意义的东西:
- CMap<*>::CAssoc|CMapPtrToWord::CAssoc|CMapPtrToPtr::CAssoc|CMapStringToOb::CAssoc|
CMapStringToPtr::CAssoc|CMapStringToString::CAssoc|CMapWordToOb::CAssoc|CMapWordToPtr::CAssoc{ - preview
- (
- #(
- "(",
- $e.key,
- ",",
- $e.value,
- ")"
- )
- )
- children
- (
- #(
- key: $c.key,
- value: $c.value
- )
- )
- }
Map的主体,因为没有办法处理类型化模版版本,所以直接放在这里吧,看得时候就得自己转换一下:
- CTypedPtrMap<*,*,*>|CMap<*>|CMapPtrToWord|CMapPtrToPtr|CMapStringToOb|
CMapStringToPtr|CMapStringToString|CMapWordToOb|CMapWordToPtr{ - preview
- (
- #( "[", [$c.m_nCount], "](",
- #array
- (
- expr : $c.m_pHashTable[$i],
- size : $c.m_nHashTableSize
- ) : #list (
- head : &$e,
- next : pNext
- ) : $e,
- ")"
- )
- )
- children
- (
- #(
- #array
- (
- expr : $e.m_pHashTable[$i],
- size : $e.m_nHashTableSize
- ) : #list (
- head : &$e,
- next : pNext
- ) : $e
- )
- )
- }
最后可能还有人不知道这些东西应该放在哪里,找到你的VS2005文件夹,打开
Microsoft Visual Studio 8/Common7/Packages/Debugger/autoexp.dat
这个文件是个文本文件,文件中有个[Visualizer]段随便放在哪里就可以了。
如果好用的话,可别忘了给我留个言。