【发布时间】:2022-07-10 20:43:52
【问题描述】:
我正在尝试使用由指针指向的natvis 来可视化内存内容。我还尝试将内存声明为向量。但每次我面临的问题是,在调试过程中,可视化器只能首先显示50 entry。
我在这里举一个非常简单的例子。假设pointer_array 是Foo 类的成员。在驱动程序文件中,创建了一个大小为 5000 的 array,它由数组指向。我想用变量pointer_array 观察数组的值。我还试图了解natvis 与std::vector 的反应方式,这就是为什么还声明了一个向量(foo_vec)作为成员变量。
foo.h:
#include <iostream>
#include <vector>
class Foo
{
public:
Foo(){}
uint32_t *pointer_array;
std::vector<uint32_t> foo_vec;
};
main.cpp:
#include "foo.h"
# define ARRAY_SIZE 5000
int main()
{
Foo obj_1;
uint32_t foo_array[ARRAY_SIZE];
for(int i = 0; i < ARRAY_SIZE; i++)
{
foo_array[i] = i*2;
}
obj_1.pointer_array = foo_array;
for(uint32_t i = 0; i < ARRAY_SIZE; i++)
{
obj_1.foo_vec.push_back(i*3);
}
return 0;
}
以下natvis file我用过。
<?xml version="1.0" encoding="utf-8"?>
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
<Type Name="Foo">
<DisplayString>Testing_Natvis</DisplayString>
<Expand>
<ArrayItems>
<Size>5000</Size>
<ValuePointer>pointer_array</ValuePointer>
</ArrayItems>
<!-- Tested with IndexListItems but failed to fetch all data, still only first 49 entry -->
<!-- <IndexListItems>
<Size>5000</Size>
<ValueNode>pointer_array[$i]</ValueNode>
</IndexListItems> -->
<!-- Same result as like as pointer_array. Only first 49 entry is appeared -->
<!-- <IndexListItems>
<Size>foo_vec.size()</Size>
<ValueNode>foo_vec[$i]</ValueNode>
</IndexListItems> -->
<!-- <ArrayItems>
<Size>foo_vec.size()</Size>
<ValuePointer>&foo_vec[0]</ValuePointer>
</ArrayItems> -->
</Expand>
</Type>
</AutoVisualizer>
在launch.json 中,我只添加了以下两行:
"visualizerFile": "${workspaceFolder}/natvis_file/file.natvis",
"showDisplayString": true,
为了更好地理解,我在这里给出了输出的屏幕截图,在 natvis 文件中我使用了IndexListItems 并给定大小 80 以查看索引 0 到 79 的值,但显示的最后一个值来自索引 49.
下面显示我给了size 值 6,而 natvis 完美地显示了从索引 0 到 5 的值。
使用 Natvis 实现所有内存条目的任何解决方法?
【问题讨论】:
-
我不明白这个问题。你总是想显示 5000 个元素吗?或者此时数组中的元素数量?如果是第二种,你怎么知道数组中有多少元素?
-
我想显示
5000元素。不是5000th或array[4999]值。所以我想看到一堆价值。 Here 我发现debugger不能显示超过1000的值,但在我的情况下natvis只显示前 50 个值(索引 0 到 49)。 -
@WernerHenze 我添加了 natvis 生成的输出的屏幕截图。同样在之前的评论中我已经给出了你的答案。
-
@WernerHenze 如果您愿意看一下这个问题,这对我很有帮助。我已经修改了问题(提供了2个屏幕截图,您可以在其中看到我面临的问题。还描述了背景)并回答了您的问题。如果你还有什么想知道的可以问我。我在这方面处于死胡同。
-
它适用于
std::vector吗?如果是,您是否比较过 STL natvis 文件?
标签: c++ visual-studio-code natvis