问题标签 [natvis]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
210 浏览

c++ - 如何获得 std::pair在 Visual Studio 的调试器中显示为正确的字符串段?

如何std::pair<char *, char *>在 Visual Studio 中显示为正确的字符串段,而不是显示为指向空终止字符串的两个指针?

0 投票
1 回答
418 浏览

c++ - 如何在 VS2015 中为指针类型添加自定义可视化?

我正在尝试通过在 VS2015 中创建一个 .natvis 文件来为 C++ 类的指针(比如 Element)编写一个自定义可视化工具。

id当我将鼠标悬停在指针变量上时,我希望调试器向我显示元素成员的值。我怎样才能做到这一点?到目前为止,我已经尝试了以下方法,但它似乎不起作用。

0 投票
1 回答
1517 浏览

visual-studio - 使用 Visual Studio Professional 2017 的 natvisreload:语法错误

我正在尝试使用 Visual Studio Professional 2017 进行转储分析,但是当.natvisreload在监视窗口中输入命令时,我得到syntax error并且output window. (这似乎意味着命令不理解)

为了让我了解真正的问题,我想知道我可以在中启动的另一个命令的示例Watch window:是否有人知道另一个命令,以点开头,我可以在Watch window(为了区分问题是否与特定命令.natvisreload或一般命令有关Watch window)?

0 投票
1 回答
490 浏览

visual-c++ - 具有多个基类的 Natvis

我在一个进行大量继承的框架中工作,我发现一个基类的 Natvis 会干扰另一个基类。

这是一个愚蠢的例子:

有了这个 natvis:

...我明白了: https ://i.stack.imgur.com/0dMNu.png

在此处输入图像描述

MainBaseItem 的扩展显示良好,但 ExtraBaseItem 的扩展无处可见。

在我的实际情况中,MainBase 等效项的 natvis 非常重要,因此我无法通过添加Inheritable="false"来解决问题。为派生类本身添加专门的 natvis 也是不切实际的——派生类有数千个。鉴于这些无益的限制,我能做些什么来让 ExtraBaseItem 出现吗?

0 投票
2 回答
266 浏览

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

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

我发现了一个有趣的原生可视化工具,其中包含以下条目:

这些条目确保 CMap 对象以一种很好的方式显示,一个在另一个之下。与另一个内部条目一起,这会在 Visual Studio 监视窗口中产生以下结果:

当我尝试在 Windbg 中做同样的事情(使用dx命令)时,这会提供类似的信息,但它在条目号 49 处结束:

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

我想知道CMap条目显示​​在 49 处停止的原因。我已经知道我可以通过单击...(将-c 100, -c 200, ... 添加到dx命令)来获得更多条目,但如果我可以获得更多信息(比如Visual Studio 的输出窗口,选项“调试、输出窗口、常规输出设置、Natvis 诊断消息”设置为“详细”),我将能够诊断和解决我的问题。

有人知道怎么做这个吗?
提前致谢

0 投票
1 回答
51 浏览

visual-studio - 原生可视化器能否根据其集合的参数名称修改项目的显示?

在我的公司,开发人员经常使用CMapStringToStr对象,并且对于特定参数,指针总是具有相同的类型,例如

我已经制作了一个本地可视化器,用于CMapStringToPtr以合理的可读方式扩展 ,正如您在这段摘录中看到的那样:

我想要识别m_mapUsersm_mapOthers条目,以获得如下结果:

这可能吗?

0 投票
0 回答
156 浏览

visual-studio - Visual Studio NatvisFile 将前导零添加到 DisplayString

我想通过 Nativis 文件在 Visual Studio 2017 中调整我的 Visualizer。有一个自己的类date,它应该在调试器中显示得更好。

我当前的代码在调试器中显示类似这样的日期:

但是,我想有前导零。所以像这样:

有没有办法做到这一点?

0 投票
0 回答
114 浏览

c++ - Visual Studio natvis 文件:映射迭代器运算符 * 重载

我在一个项目中有一个定制的地图类/容器,其中包括一个迭代器。迭代器定义了 (*) 运算符以返回指向地图元素的键。我使用 natvis 文件以我想要的方式显示自定义地图以及迭代器,它可以工作。问题是当我在监视窗口中输入以下内容时:

我得到:

在 natvis 文件中做什么来克服这个问题?

0 投票
2 回答
110 浏览

c++ - 如何避免原生可视化器中的递归?

我正在调试一个 C++ 程序,其中包含相当多的CPtrArray对象。
使用定制的 heap_stat 脚本,我知道CPtrArray对象的指针值,其中包含很多条目。

使用本机可视化器,我确实可以看到每个CPtrArray对象中的条目数量,因此我对应的 natvis 条目:

问题是:这显示了元素的数量,但没有显示指针值。我想很容易地解决这个问题,使用以下 natvis 条目:

然而,这向我显示了指针值,但还有更多::-)

有谁知道我怎样才能避免这种递归?

在第一次评论和回答后编辑

我已将我的 heap_stat 脚本修改如下:

因此,我CPtrArray在 heap_stat 报告中获得了(和其他)对象的大小:

我有COLUMN对象,它们有一个CPtrArray属性,我想知道哪个对应于那个特定的CPtrArray对象,因此我COLUMN在我的监视窗口中添加了所有对象:

正如您所看到的,递归给了我大量的信息(并且大大降低了我的分析性能),因此我想避免它,而不需要扩展每个COLUMN对象来查看所需的信息。

一些后续的编辑

由于这个问题看起来像是 Natvis 处理中的一个错误,我决定在 MSDN 网站上写一篇重复的帖子。该帖子最近被标记为“Triaged”,我希望这意味着 MSDN 开发人员考虑到了它。

提前致谢

0 投票
2 回答
190 浏览

c++ - 如何使用 shared_ptr 在类型擦除类中显示底层数据

好的,所以我有一个非常简单的类,它使用类型擦除,使用共享指针。

这里没有问题,但是由于它的工作方式,调试器显示了从 Prop 到 std::shared_ptr(PropContent) 再到 PropModel 的完整链,最后是包含实际数据的底层模板化 prop。

我想做的是编写一个 natvis 规则来显示底层数据,而不是整个链。不幸的是,我得到的最远的是取消引用指针,这让我只剩下它指向的 PropConcept 结构。

所以当然,我的问题是,我如何遍历“树”以到达 PropModel 结构的“道具”成员?类本身是否需要调整,或者它是否只是纯 natvis 都没关系——只要类型擦除仍然存在,我不必扩展 4 个项目来获取数据。

提前感谢您的帮助。