问题标签 [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 投票
3 回答
950 浏览

qt - 如何在 Visual Studio 2015 上调试时查看 Qt5 QString 内容

我正在使用 Visual Studio 2015 和 Qt5。

我已经在 Vislaualizers 文件夹中添加了 qt5.natvis。我在工具 > 选项 > 调试 > 常规菜单中设置了“使用本机兼容模式”选项。

即使这样,调试时 QString 值也不会正确显示。Locals/Autos/Watch 窗口上仅显示内存方向。任何想法?

我已经为本机诊断消息设置了详细选项,这就是我得到的:

0 投票
1 回答
98 浏览

visual-studio - 矩阵显示逐行

我知道默认的 ArrayItems-Tag 可以处理矩阵,但我发现结果不足。

鉴于这个例子

有了这个 natvis

结果是这个输出,几乎是完美的。 在此处输入图像描述

  • 我希望地址不会显示
  • 我希望我可以为元素提供一个自定义格式说明符(例如 %.2f )

但我在我的natvis中作弊。我写了<Item>(values + (i * width)), 2</Item>2 是行的宽度。但是如果我写width而不是 2 它会输出 2 而不是行。它显然打印了 的值width,这没有帮助。

在此处输入图像描述

任何人都知道我怎样才能使这些行的大小可变?

0 投票
1 回答
260 浏览

c++ - Visual Studio natvis 语句的局部变量

我目前正在为 natvis 中的日期类型编写可视化工具。date 类型以通常的 unix 方式存储自 1970 年以来的秒数,但如果不使用临时变量,则从中派生年、月和月中的日期会非常冗长。我希望能够存储工作变量,以便以理智的方式评估可视化器。这可能吗?

我到达的解决方案如下所示:

请注意“USING_DEBUG_TIMER_DOE”部分。是这样计算的:

用于可视化这些的 natvis 是:

0 投票
2 回答
380 浏览

visual-studio - NATVIS 重新解释类型或别名类型

natvis 有没有办法将类型重新解释为已经 natvis 定义的类型?还是别名呢?

例如,我想做这种“技巧”(在我的上下文中真的很有必要,即使这对你来说听起来很奇怪,这是 JIT 符号生成的问题)

但它不能显示展开项,它只是显示一个字符串作为值(考虑到“DisplayString”角色,这似乎是合乎逻辑的)。

我也尝试过一个SmartPointer技巧,它做得更好,但事实证明,当涉及基类时它不起作用(它只显示 SmartPointer 类型并完全忽略继承)

0 投票
1 回答
222 浏览

visual-studio - 为什么这个 std::map 不能在 Visual C++ 的监视窗口中以可用的方式显示?

我无法在监视窗口中查看某些 std::map。查看 .natvis 文件,std::map 有多种实现。有没有办法选择一个或另一个?

https://developercommunity.visualstudio.com/content/problem/1056550/im-unable-to-inspect-a-variable-of-type-stdmap-in.html

地图 s 不能被观看(关于 std::_Tree<> 正在显示的东西)。奇怪的是可以引用第一个元素。

0 投票
0 回答
81 浏览

visual-studio - 视觉工作室调试可视化器(natvis)是否可以执行地图查找?

所以我有一个类型,它被用作地图的键。键本身不是特别可读的(例如 128 位 guid),但该键引用的映射中的值是。

是否有可能在不修改代码的情况下(我已经看到用于添加额外数据纯粹用于调试可视化工具的方法),为我的键类型向 natvis 添加类型定义,在映射中搜索关联的条目用我的钥匙?

0 投票
1 回答
102 浏览

c++ - 如何像二维数组一样使用 natvis 可视化列顺序矩阵

我有一个结构

m_elements 存储 {0, 1, 2, 3, 4, 5, 6, 7, 8} 来表示二维矩阵

我想显示如下: 在此处输入图像描述

使用 Natvis 中的 ArrayItems 功能,我可以得出以下结论: 在此处输入图像描述

使用 natvis 代码:

但这真的很难看,我宁愿每一行都是一个项目,而不是每个元素都是一个项目,就像 array2d 的可视化方式一样。

您将如何在 Natvis 中编写代码以使 Matrix2d 可以以这种方式可视化?

0 投票
2 回答
216 浏览

c# - 如何从 Debugger.GetExpression 获取 DisplayString 字段?

背景

我正在用 C# 编写一个 Visual Studio 扩展,它在调试另一个应用程序时在即时窗口中执行代码。该表达式返回一个值,该值可以是 int、字符串文字、类等。我正在调试的应用程序是用 C++ 编写的。

编码

要执行即时窗口命令,我使用这行代码:

并检索我使用的结果:

和:

这是我正在调试的应用程序中的 myFunc() :

问题

当我在即时窗口中手动运行表达式时,返回的对象将被转储,正如我在观察窗口中看到的那样(参见此处)。我设法找到了所有孩子的名字,但是缺少这些值(请参见此处)。

我想要的是实现 DisplayString ( { size=5 }),但我还没有发现任何有用的东西。

如何从 Debugger.GetExpression 获取 DisplayString 字段?

编辑:我不必使用这个 API。如果您知道另一种可以返回此刺痛的方法,请提出建议。一种想法可能是检索即时窗口的完整输出字符串(见右侧),然后对其进行解析。

EDIT2:看这个视频可以更好地解释这个问题

0 投票
1 回答
192 浏览

visual-studio - C++/WinRT natvis 在全新安装中不起作用

我该如何解决这个问题?

我将这个问题中的 natvis 示例与 C++/WinRT 控制台模板结合起来,并成功地使 natvisMatrix2d可以工作,但不能用于Uri.

我不确定 cppwinrt 预计会生成哪些 natvis 文件(.natvis 或 .pdb)以及它们的位置。

下面是 Natvis 调试输出。它显示只有我的自定义 Natvis 文件 (\ConsoleApplication2\ConsoleApplication2\NatvisFile.natvis) 和系统范围的 Natvis 文件 (%VSINSTALLDIR%\Common7\Packages\Debugger\Visualizers) 正在加载。

Natvis:解析 natvis xml 文件:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Packages\Debugger\Visualizers\atlmfc.natvis。Natvis:解析 natvis xml 文件:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Packages\Debugger\Visualizers\concurrency.natvis。Natvis:解析 natvis xml 文件:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Packages\Debugger\Visualizers\cpp_rest.natvis。Natvis:解析 natvis xml 文件:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Packages\Debugger\Visualizers\ObjectiveC.natvis。Natvis:解析 natvis xml 文件:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Packages\Debugger\Visualizers\stl.natvis。Natvis: 解析 natvis xml 文件: C: \Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Packages\Debugger\Visualizers\Windows.Data.Json.natvis。Natvis:解析 natvis xml 文件:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Packages\Debugger\Visualizers\windows.devices.geolocation.natvis。Natvis:解析 natvis xml 文件:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Packages\Debugger\Visualizers\windows.devices.sensors.natvis。Natvis:解析 natvis xml 文件:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Packages\Debugger\Visualizers\windows.media.natvis。Natvis:解析 natvis xml 文件:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Packages\Debugger\Visualizers\windows.natvis。Natvis: 解析 natvis xml 文件: C: \Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Packages\Debugger\Visualizers\winrt.natvis。Natvis:解析 natvis xml 文件:C:\Users\a\source\repos\ConsoleApplication2\ConsoleApplication2\NatvisFile.natvis。Natvis:忽略来自 ConsoleApplication2.pdb 的 NatvisFile.natvis;加载的项目中已存在同名文件。Natvis:C:\Users\a\source\repos\ConsoleApplication2\ConsoleApplication2\NatvisFile.natvis(17,6):在类型上下文“Matrix2d”中成功解析表达式“0”。Natvis:C:\Users\a\source\repos\ConsoleApplication2\ConsoleApplication2\NatvisFile.natvis(18,6):在类型上下文“Matrix2d”中成功解析表达式“i < m_numRows”。Natvis:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Packages\Debugger\Visualizers\stl.natvis(1063,6):在类型上下文“std::vector<int,std::allocator >”中成功解析表达式“_Mypair._Myval2._Myend - _Mypair._Myval2._Myfirst”。Natvis:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Packages\Debugger\Visualizers\stl.natvis(1062,6):成功解析表达式'_Mypair._Myval2._Mylast - _Mypair._Myval2。 _Myfirst' 在类型上下文 'std::vector<int,std::allocator >' 中。Natvis:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Packages\Debugger\Visualizers\stl.natvis(1064,29):在类型上下文“std”中成功解析表达式“size()”: :vector<int,std::allocator >'。Natvis: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Packages\Debugger\Visualizers\stl.natvis(1066,52): 成功解析表达式' 类型上下文'std::vector<int,std::allocator >'中的容量()'。Natvis:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Packages\Debugger\Visualizers\stl.natvis(1067,53):在类型上下文“std::vector”中成功解析表达式“_Mypair” <int,std::分配器>'。Natvis:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Packages\Debugger\Visualizers\stl.natvis(1069,15):在类型上下文“std”中成功解析表达式“size()”: :vector<int,std::allocator >'。Natvis:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Packages\Debugger\Visualizers\stl.natvis(1070,23):在类型上下文中成功解析表达式 '_Mypair._Myval2._Myfirst' std::vector<int,std::allocator >'。纳特维斯:C:\Users\a\source\repos\ConsoleApplication2\ConsoleApplication2\NatvisFile.natvis(19,23):在类型上下文 'Matrix2d' 中成功解析表达式 '&m_elements[i * m_numCols],[m_numCols]na'。Natvis:C:\Users\a\source\repos\ConsoleApplication2\ConsoleApplication2\NatvisFile.natvis(19,8):在类型上下文“Matrix2d”中成功解析表达式“i”。Natvis:C:\Users\a\source\repos\ConsoleApplication2\ConsoleApplication2\NatvisFile.natvis(20,12):在类型上下文 'Matrix2d' 中成功解析表达式 '++i'。成功解析类型上下文“Matrix2d”中的表达式“i”。Natvis:C:\Users\a\source\repos\ConsoleApplication2\ConsoleApplication2\NatvisFile.natvis(20,12):在类型上下文“Matrix2d”中成功解析表达式“++i”。成功解析类型上下文“Matrix2d”中的表达式“i”。Natvis:C:\Users\a\source\repos\ConsoleApplication2\ConsoleApplication2\NatvisFile.natvis(20,12):在类型上下文“Matrix2d”中成功解析表达式“++i”。

这是全新安装的 Windows 10 和 VS19 (16.8.2)。

0 投票
1 回答
181 浏览

c++ - 如何使用 natvis Visual Studio C++ 调试器可视化器为单一类型进行多个列表扩展

我正在尝试为以块形式存储值的容器制作调试器可视化工具。我想为值和块进行列表扩展,但据我所知,单一类型只能有一个列表扩展。可能有多Expand个子节点,ArrayItems但它们都产生单个列表。是的,我可以为容器进行块扩展,然后为每个块进行值扩展。但我想要两个具有如下扩展的容器子节点:

有没有办法使用 natvis xml 来做到这一点?