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

Visual studio 如何调试Windbg?(如何获取有关Windbg正在做什么的信息),visual-studio,windbg,natvis,Visual Studio,Windbg,Natvis,正如你们大多数人所知,Windbg可以用于调试程序,但现在我想做的恰恰相反:我想调试我在Windbg中所做的事情,让我告诉你们为什么: 我发现了一个有趣的本地visualiser,包含以下条目: {{size={m_nCount}} pList=pHashtable[哈希表索引] pList->value pList=pList->pNext ++我 ++哈希表索引 {{size={m_nCount}} pList=pHashtable[哈希表索引] pList->key pList->val

正如你们大多数人所知,Windbg可以用于调试程序,但现在我想做的恰恰相反:我想调试我在Windbg中所做的事情,让我告诉你们为什么:

我发现了一个有趣的本地visualiser,包含以下条目:


{{size={m_nCount}}
pList=pHashtable[哈希表索引]
pList->value
pList=pList->pNext
++我
++哈希表索引
{{size={m_nCount}}
pList=pHashtable[哈希表索引]
pList->key
pList->value
pList=pList->pNext
++我
++哈希表索引
这些条目确保CMap对象以一种良好的方式显示,一个接一个。与另一个内部条目一起,这将在Visual Studio监视窗口中产生以下结果:

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)
当我尝试在Windbg中执行相同操作时(使用
dx
命令),这会提供类似的信息,但它在条目号49处结束:

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 *>]
Windbg提示符>dx-r1(*(!CMap*)0x13fbd2ae0))
[“[0]。值:”]:0x6dce7fd0[类型:CElement*]
[“[1]。键:”]:0x7984000007a3[类型:无符号_int64]
[“[1]。值:”]:0x5b9c95d0[类型:CElement*]
[“[2]。键:”]:0x79840000053f[类型:无符号uu int64]
...
[“[49]。值:”]:0x1bab05b0[类型:CElement*]
[…][类型:CMap]
(通过单击条目,我获得了更多信息,这些信息由提到的其他本机visualiser条目正确呈现)

我想知道
CMap
条目在49处停止显示的原因。我已经知道我可以通过点击
(这将
-c100
-c200
,…添加到
dx
命令中)获得更多的条目,但是如果我可以获得更多的信息(比如Visual Studio的输出窗口,选项“调试,输出窗口,常规输出设置,Natvis诊断消息”设置为“详细”),我就能诊断并解决我的问题

有人知道怎么做吗?

提前感谢

目前,WinDbg中的NatVis没有类似于Visual Studio的“扩展诊断”

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

例如:

dx <container expression>,1000
dx,1000

将在继续链接之前显示1000条计算结果,而不是默认的100条。

目前,WinDbg中的NatVis没有类似于Visual Studio的“扩展诊断”

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

例如:

dx <container expression>,1000
dx,1000

将在继续链接之前显示1000个计算结果,而不是默认的100个。windbg可以调试windbg子windbg调试实际二进制文件

这叫黛西·惠林

打开命令提示符

键入windbg windbg app并按enter键

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

.dbgdbg


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

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

这叫黛西·惠林

打开命令提示符

键入windbg windbg app并按enter键

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

.dbgdbg

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