원클릭으로
natvis
Use ONLY when the user explicitly requests a Natvis visualizer for a specific type - never generate unprompted
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Use ONLY when the user explicitly requests a Natvis visualizer for a specific type - never generate unprompted
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Use when asked to run the Google Benchmark suite, measure performance, or compare two benchmark runs (before/after an optimization) on this Windows/MSVC project
Use when editing C/C++ files, before claiming edits are complete, or when tempted to manually adjust indentation, spacing, brace placement, or include ordering
Use when asked to measure, report, or investigate test code coverage on Windows/MSVC builds - requires OpenCppCoverage and an already-built test binary
Use when about to claim a fix compiles, a bug is resolved, or a change is complete - requires actually building before asserting success
| name | natvis |
| description | Use ONLY when the user explicitly requests a Natvis visualizer for a specific type - never generate unprompted |
Add Visual Studio debugger visualizers for C++ types to the project's existing .natvis files. Only generate when explicitly requested.
Official documentation: https://learn.microsoft.com/en-us/visualstudio/debugger/create-custom-views-of-native-objects
Each module has one .natvis at its root. Find the right file by the type's namespace:
| Namespace | File |
|---|---|
GLEngine::Physics::* | Physics/Physics.natvis |
Utils::* | Utils/utils.natvis |
GLEngine::Renderer::* | Renderer/renderer.natvis |
GLEngine::Core::* | Core/Core.natvis |
GLEngine::Entity::* | Entity/Entity.natvis |
GLEngine::GUI::* | GUI/GUI.natvis |
Add the new <Type> entry inside the existing <AutoVisualizer> block.
<Type Name="GLEngine::MyNS::MyType">
<DisplayString>{m_field1} {m_field2}</DisplayString>
<Expand>
<Item Name="[Field1]">m_field1</Item>
<Item Name="[Field2]">m_field2</Item>
</Expand>
</Type>
<DisplayString Condition="m_valid">{m_value}</DisplayString>
<DisplayString Condition="!m_valid">invalid</DisplayString>
<Intrinsic Name="IsValid" Expression="!isinf(m_Min.x)"/>
<DisplayString Condition="IsValid()">{m_Min}-{m_Max}</DisplayString>
<DisplayString Condition="!IsValid()">uninitialized</DisplayString>
__m128 field access<DisplayString>{data.m128_f32[0]},{data.m128_f32[1]},{data.m128_f32[2]}</DisplayString>
</> and * wildcards, $T1/$T2 for params)<Type Name="MyNS::MyTemplate<*, *>">
<DisplayString>size={$T2} ptr={($T1*)m_ptr}</DisplayString>
<Expand>
<ArrayItems>
<Size>$T2</Size>
<ValuePointer>($T1*)m_ptr</ValuePointer>
</ArrayItems>
</Expand>
</Type>
<Synthetic Name="sides">
<DisplayString Condition="twoSided">two-sided</DisplayString>
<DisplayString Condition="!twoSided">one-sided</DisplayString>
</Synthetic>
{{ and }}<DisplayString>{{x={m_x}, y={m_y}}}</DisplayString>
<!-- renders as: {x=1.0, y=2.0} -->
.natvis file from the table above..natvis to check formatting and avoid duplicates.<Type> block inside <AutoVisualizer>, before </AutoVisualizer>.__m128 members, use .m128_f32[i] to access components.