MFC的Visualizer

不知道为什么VS2005没有带MFC的Visualizer,调试起来实在别扭,所以自己写了一个。
只有Container的部分,因为别的东西没有那么复杂。
Visualizer是没有文档化的,所以,尝试了很久。。。

这段是给CArray的,所有的Array都是类似的结构,所以可以通用:

  1. CArray<*>|CObArray|CByteArray|CDWordArray|CPtrArray|CStringArray|CWordArray|CUIntArray{
  2.     preview
  3.     ( 
  4.         #(  
  5.             "[",
  6.             $e.m_nSize , 
  7.             "]("
  8.             #array 
  9.             (
  10.                 expr :  $c.m_pData[$i],
  11.                 size :  $c.m_nSize
  12.             ), 
  13.             ")"
  14.         )
  15.     )
  16.     children
  17.     (
  18.         #( 
  19.             #array 
  20.             (
  21.                 expr :  $c.m_pData[$i],
  22.                 size :  $c.m_nSize
  23.             )
  24.         )
  25.     )
  26. }

不过还有个类型化的模版CTypedPtrArray:

  1. CTypedPtrArray<*,*>{
  2.     preview
  3.     ( 
  4.         #(  
  5.             "[",
  6.             $e.m_nSize , 
  7.             "]("
  8.             
  9.             #array 
  10.             (
  11.                 expr :  (($T2 *)$c.m_pData)[$i],
  12.                 size :  $c.m_nSize
  13.             ), 
  14.             ")"
  15.         )
  16.     )
  17.     children
  18.     (
  19.         #( 
  20.             #array 
  21.             (
  22.                 expr :  (($T2 *)$c.m_pData)[$i],
  23.                 size :  $c.m_nSize
  24.             )
  25.         )
  26.     )
  27. }

List也是通用的:

  1. CList<*>|CObList|CPtrList|CStringList{
  2.     preview
  3.     (
  4.         #(
  5.             "[",
  6.             $e.m_nCount,
  7.             "](",
  8.             
  9.             #list
  10.             (
  11.                 head : $c.m_pNodeHead, 
  12.                 next : pNext 
  13.             ) : $e.data,
  14.             ")"
  15.         )
  16.     )
  17.     
  18.     children
  19.     (
  20.         #list
  21.         (
  22.             head : $c.m_pNodeHead, 
  23.             next : pNext
  24.         ) : $e.data
  25.     )
  26. }

类型化的模版类也是要单独处理的:

  1. CTypedPtrList<*,*>{
  2.     preview
  3.     (
  4.         #(
  5.             "[",
  6.             $e.m_nCount,
  7.             "](",
  8.             
  9.             #list
  10.             (
  11.                 head : $c.m_pNodeHead, 
  12.                 next : pNext 
  13.             ) : ($T2)$e.data,
  14.             ")"
  15.         )
  16.     )
  17.     
  18.     children
  19.     (
  20.         #list
  21.         (
  22.             head : $c.m_pNodeHead, 
  23.             next : pNext
  24.         ) : ($T2)$e.data
  25.     )
  26. }

Map的元素节点,如果不可视化这个的话,看到Map的元素也是一堆没有意义的东西:

  1. CMap<*>::CAssoc|CMapPtrToWord::CAssoc|CMapPtrToPtr::CAssoc|CMapStringToOb::CAssoc|
    CMapStringToPtr::CAssoc|CMapStringToString::CAssoc|CMapWordToOb::CAssoc|CMapWordToPtr::CAssoc{
  2.     preview
  3.     (
  4.         #(
  5.             "(",
  6.             $e.key,
  7.             ",",
  8.             $e.value,
  9.             ")"
  10.         )
  11.     )
  12.     
  13.     children
  14.     (
  15.         #(
  16.             key: $c.key,
  17.             value: $c.value
  18.         )
  19.     )
  20. }

Map的主体,因为没有办法处理类型化模版版本,所以直接放在这里吧,看得时候就得自己转换一下:

  1. CTypedPtrMap<*,*,*>|CMap<*>|CMapPtrToWord|CMapPtrToPtr|CMapStringToOb|
    CMapStringToPtr|CMapStringToString|CMapWordToOb|CMapWordToPtr{
  2.     preview
  3.     (
  4.         #( "[", [$c.m_nCount], "](",
  5.             #array
  6.            (
  7.                expr : $c.m_pHashTable[$i],
  8.                size : $c.m_nHashTableSize
  9.            ) : #list (
  10.                    head : &$e,
  11.                    next : pNext
  12.            ) : $e,
  13.            ")"
  14.         )
  15.     )
  16.    
  17.     children
  18.     (
  19.         #(
  20.             #array
  21.             (
  22.                 expr : $e.m_pHashTable[$i],
  23.                 size : $e.m_nHashTableSize
  24.             ) : #list (
  25.                     head : &$e,
  26.                     next : pNext
  27.             ) : $e
  28.         )
  29.     )
  30. }

最后可能还有人不知道这些东西应该放在哪里,找到你的VS2005文件夹,打开

Microsoft Visual Studio 8/Common7/Packages/Debugger/autoexp.dat

这个文件是个文本文件,文件中有个[Visualizer]段随便放在哪里就可以了。

如果好用的话,可别忘了给我留个言。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值