如何调试Windbg? (如何获取有关Windbg正在做什么的信息)

时间:2018-07-27 14:04:54

标签: visual-studio windbg natvis

众所周知,Windbg可用于调试程序,但现在我要做相反的事情:我想调试在Windbg中所做的事情,让我向您展示原因:< / p>

我找到了一个有趣的本地可视化工具,其中包含以下条目:

<img src="{{getImagePath()}}" alt="user image">

这些条目确保以一种不错的方式显示CMap对象,一个显示在另一个下方。连同另一个内部条目,这在Visual Studio监视窗口中给出以下结果:

<Type Name='CMap&lt;*,*,*,*&gt;'>
  <AlternativeType Name="CMapStringToString"/>                 
  <AlternativeType Name="CMapStringToPtr"/>                    
  <DisplayString>{{size = {m_nCount} }}</DisplayString>         
  <Expand>                                                     
    <CustomListItems>                                          
      <Variable Name='pHashtable' InitialValue='m_pHashTable'/>
      <Variable Name='hashtable_index' InitialValue='0'/>      
      <Variable Name='pList' InitialValue='*m_pHashTable'/>    
      <Variable Name='i' InitialValue='0'/>                    
      <Loop Condition='hashtable_index &lt; m_nHashTableSize'> 
        <Exec>pList = pHashtable[hashtable_index]</Exec>       
        <Loop Condition='pList '>                              
          <Item Name='{i}: [{pList->key}]'>pList->value</Item> 
          <Exec>pList = pList->pNext</Exec>                    
          <Exec>++i</Exec>                                     
        </Loop>                                                
        <Exec>++hashtable_index</Exec>                         
      </Loop>                                                  
    </CustomListItems>                                         
  </Expand>                                                    
</Type>                                                        

<Type Name='CMap&lt;*,*,*,*&gt;' IncludeView='keys'>
  <AlternativeType Name="CMapStringToString::CAssoc"/>
  <AlternativeType Name="CMapStringToPtr::CAssoc"/>
  <DisplayString>{{size = {m_nCount} }}</DisplayString>
  <Expand>
    <CustomListItems>
      <Variable Name='pHashtable' InitialValue='m_pHashTable'/>
      <Variable Name='hashtable_index' InitialValue='0'/>
      <Variable Name='pList' InitialValue='*m_pHashTable'/>
      <Variable Name='i' InitialValue='0'/>
      <Loop Condition='hashtable_index &lt; m_nHashTableSize'>
        <Exec>pList = pHashtable[hashtable_index]</Exec>
        <Loop Condition='pList '>
          <Item Name='[{i}].key:'>pList->key</Item>
          <Item Name='  [{i}].value:'>pList->value</Item>
          <Exec>pList = pList->pNext</Exec>
          <Exec>++i</Exec>
        </Loop>
        <Exec>++hashtable_index</Exec>
      </Loop>
    </CustomListItems>
  </Expand>
</Type>

当我尝试在Windbg中执行相同的操作(使用0x000000005b9c95d0 Element L"Element1" (ID1/SubID1.1, L"interesting_information.1"/L"1.0.0.0") 0x0000000059484d20 Element L"Element2" (ID1/SubID1.2, L"interesting_information.2"/L"2.0.0.0") 0x000000004caa6110 Element L"Element3" (ID2/SubID2.1, L"interesting_information.3"/L"3.0.0.0") ... (this goes until the end of the CMap) 命令)时,会给出类似的信息,但是它在条目号49处结束:

dx

(通过单击条目,我获得了更多信息,这些信息已由提及的其他本机可视化器条目正确呈现)

我想知道Windbg Prompt>dx -r1 (*((<application>!CMap<unsigned __int64,unsigned __int64,CElement *,CElement *> *)0x13fbd2ae0)) [" [0].value:"] : 0x6dce7fd0 [Type: CElement *] ["[1].key:"] : 0x7984000007a3 [Type: unsigned __int64] [" [1].value:"] : 0x5b9c95d0 [Type: CElement *] ["[2].key:"] : 0x79840000053f [Type: unsigned __int64] ... [" [49].value:"] : 0x1bab05b0 [Type: CElement *] [...] [Type: CMap<unsigned __int64,unsigned __int64,CElement *,CElement *>] 条目的显示停止在49点的原因。我已经知道我可以通过单击CMap(添加...来获得更多条目,-c 100,...到-c 200命令),但是如果我可以获得更多信息(例如带有选项“调试,输出窗口,常规输出设置,Natvis诊断消息”的Visual Studio输出窗口, “设置为“详细”),我将能够诊断并解决问题。

有人知道怎么做吗?
预先感谢

2 个答案:

答案 0 :(得分:4)

目前,在WinDbg中尚没有与Visual Studio相似的“扩展诊断”可用于NatVis。

也就是说-默认情况下,“ dx”命令将显示任何容器的前100个条目,并显示DML链接以继续([...])。如果您想要100个以上的条目,则可以使用格式说明符来指示要显示的条目数量(与Visual Studio相同)。

例如:

dx <container expression>,1000

在继续链接之前将显示1000个评估结果的条目,而不是默认值100。

答案 1 :(得分:2)

windbg可以调试windbg子级windbg调试您的实际二进制文件

iirc是Callef菊花轮

打开命令提示符

输入windbg windbg应用,然后按Enter

如果您不介意使用控制台版本,则windbg具有内置命令

.dbgdbg

这将为现有实例生成一个父调试器