2017-05-30 85 views
0

我試圖爲我們公司自定義智能指針創建調試可視化器。我想使用ExpandItem來獲取僅一層的內容,適用於ref_ptr<Vector2d>等具體類型,但不適用於像ref_ptr<IStreamManager>這樣的虛擬類型。在使用虛擬類型時,我得到兩個條目,一個用於底層類型,然後我可以擴展,另一個用於__vfptrVisual Studio natvis顯示指針到接口

什麼我越來越:

v streamManagerPtr   shared_ptr { count=35, ptr=... } 
    [Reference Count]  2 
    v [StreamMgr]   {...} 
     m_resourceMgr  shared_ptr { count=35, ptr=... } 
     m_fileMgr   shared_ptr { count=23, ptr=... } 
     ... 
    > __vfptr    0xdeadbeef 
    > [Raw View]    {...} 

我想要什麼:

v streamManagerPtr   shared_ptr { count=35, ptr=... } 
    [Reference Count]  2 
    m_resourceMgr   shared_ptr { count=35, ptr=... } 
    m_fileMgr    shared_ptr { count=23, ptr=... } 
    ... 
    > [Raw View]    {...} 

有什麼辦法把底層的動態類型多一個層次的內容,所以我不必須處理這種無用的嵌套層次?

回答

0

我相信你可以使用這樣的事情:

<Type Name="shared_ptr&lt;*&gt;"> 
    <Expand> 
    <ExpandedItem Condition="ptr != 0">*ptr</ExpandedItem> 
    </Expand> 
</Type> 

ExpandedItem標籤基本上消除了嵌套的水平,在標籤顯示項目的內容,好像他們是在同一嵌套級別的經常項目作爲Expand標記中Item的其餘部分。