View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0003032 | NoesisGUI | C++ SDK | public | 2024-01-23 14:40 | 2025-12-12 02:11 |
| Reporter | HateDread | Assigned To | jsantos | ||
| Priority | normal | Severity | minor | ||
| Status | assigned | Resolution | open | ||
| Product Version | 3.2 | ||||
| Summary | 0003032: Natvis not working / PDBs missing | ||||
| Description | As per thread https://www.noesisengine.com/forums/viewtopic.php?t=3193, the Natvis file/functionality is not working in a C++ build and may require the PDBs. | ||||
| Steps To Reproduce |
| ||||
| Platform | Any | ||||
|
Even with the PDB, it seems we are not linking the Natvis file (/NATVIS must be used as explained here https://learn.microsoft.com/en-us/cpp/build/reference/natvis-add-natvis-to-pdb?view=msvc-140). I need to figure this out. Meanwhile I am attaching our latest natvis file here. Noesis.natvis (4,403 bytes)
<?xml version="1.0" encoding="utf-8"?>
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
<Type Name="Noesis::ArrayRef<*>">
<DisplayString>{{ size={mSize} }}</DisplayString>
<Expand>
<ArrayItems>
<Size>mSize</Size>
<ValuePointer>($T1*)mBegin</ValuePointer>
</ArrayItems>
</Expand>
</Type>
<Type Name="Noesis::BaseVector<*>">
<DisplayString>{{ size={mSize} }}</DisplayString>
<Expand>
<Item Name="[capacity]">mCapacity</Item>
<Item Name="[bytes]">sizeof(ValueType) * mCapacity</Item>
<ArrayItems>
<Size>mSize</Size>
<ValuePointer>(ValueType*)mBegin</ValuePointer>
</ArrayItems>
</Expand>
</Type>
<Type Name="Noesis::BaseString">
<DisplayString Condition="mIsSmall == 1">{ (const char*)(((FixedString<24>*)this)->mSmallString), na }</DisplayString>
<DisplayString Condition="mIsSmall == 0">{ (const char*)(((FixedString<24>*)this)->mBegin), na }</DisplayString>
<StringView Condition="mIsSmall == 1">((const char*)((FixedString<24>*)this)->mSmallString)</StringView>
<StringView Condition="mIsSmall == 0">((const char*)((FixedString<24>*)this)->mBegin)</StringView>
<Expand>
<Item Name="[size]">mSize</Item>
<Item Name="[capacity]">mCapacity</Item>
<ArrayItems>
<Size>mSize</Size>
<ValuePointer Condition="mIsSmall == 1">((FixedString<24>*)this)->mSmallString</ValuePointer>
<ValuePointer Condition="mIsSmall == 0">((FixedString<24>*)this)->mBegin</ValuePointer>
</ArrayItems>
</Expand>
</Type>
<Type Name="Noesis::HashMapImpl<*>">
<DisplayString>{{ size={mNumEntries}, buckets={mNumBuckets} }}</DisplayString>
<Expand>
<Item Name="[size]">mNumEntries</Item>
<Item Name="[buckets]">mNumBuckets</Item>
<Item Name="[capacity]">mNumInlinedBuckets</Item>
<Item Condition="mNumBuckets > mNumInlinedBuckets" Name="[bytes]">sizeof($T1) * mNumBuckets</Item>
<Item Condition="mNumBuckets <= mNumInlinedBuckets" Name="[bytes]">sizeof($T1) * mNumInlinedBuckets</Item>
<ArrayItems>
<Size>mNumBuckets</Size>
<ValuePointer>mBuckets</ValuePointer>
</ArrayItems>
</Expand>
</Type>
<Type Name="Noesis::BaseRefCounted" Inheritable="false">
<DisplayString>{{ ref={mRefCount.val} }}</DisplayString>
</Type>
<Type Name="Noesis::BaseComponent" Inheritable="false">
<DisplayString>{{ ref={mRefCount.val} }}</DisplayString>
</Type>
<Type Name="Noesis::Ptr<*>">
<DisplayString Condition="mPtr != nullptr">{{ val={*mPtr} ref={mPtr->mRefCount.val} }}</DisplayString>
<DisplayString Condition="mPtr == nullptr">{{ val={nullptr} }}</DisplayString>
<Expand>
<Item Condition="mPtr != nullptr" Name="[ref]">mPtr->mRefCount.val</Item>
<Item Name="[ptr]">mPtr</Item>
</Expand>
</Type>
<Type Name="Noesis::Boxed<*>">
<DisplayString>{{ boxed={mValue} }}</DisplayString>
</Type>
<Type Name="Noesis::Symbol">
<DisplayString>{{ {((const char**)Noesis.dll!gSymbols.mBegin)[mIndex],na} }}</DisplayString>
</Type>
<Type Name="Noesis::Symbol">
<DisplayString>{{ {((const char**)Core.Kernel.dll!gSymbols.mBegin)[mIndex],na} }}</DisplayString>
</Type>
<Type Name="Noesis::Symbol">
<DisplayString>{{ {((const char**)gSymbols.mBegin)[mIndex],na} }}</DisplayString>
</Type>
<Type Name="Noesis::Type">
<DisplayString>{mName,na}</DisplayString>
</Type>
<Type Name="Noesis::Uri">
<DisplayString Condition="mAssemblyLen == 0">{ mUri.mSmallString + mPathStart + mSlashLen, na }</DisplayString>
<DisplayString Condition="mAssemblyLen != 0">{ (const char*)mUri.mSmallString + mPathStart + mAssemblyLen + 12, na }</DisplayString>
<Expand>
<Item Name="[scheme]" Condition="mSchemeLen == 0">""</Item>
<Item Name="[scheme]" Condition="mSchemeLen != 0">mUri.mSmallString, [mSchemeLen]na</Item>
<Item Name="[assembly]" Condition="mAssemblyLen == 0">""</Item>
<Item Name="[assembly]" Condition="mAssemblyLen != 0">mUri.mSmallString + mPathStart + 1, [mAssemblyLen]na</Item>
<Item Name="[path]" Condition="mAssemblyLen == 0">mUri.mSmallString + mPathStart + mSlashLen, na</Item>
<Item Name="[path]" Condition="mAssemblyLen != 0">mUri.mSmallString + mPathStart + mAssemblyLen + 12, na</Item>
</Expand>
</Type>
</AutoVisualizer> |
|
|
https://developercommunity.visualstudio.com/t/c-library-natvis-not-loaded/136621
So it seems, embedding the NatVis in the PDB is not going to work as we want and we are going to need to distribute the NatVis in the SDK. |
|
| Date Modified | Username | Field | Change |
|---|---|---|---|
| 2024-01-23 14:40 | HateDread | New Issue | |
| 2024-01-25 01:10 | jsantos | Assigned To | => jsantos |
| 2024-01-25 01:10 | jsantos | Status | new => assigned |
| 2024-01-25 01:12 | jsantos | Note Added: 0009118 | |
| 2024-01-25 01:12 | jsantos | File Added: Noesis.natvis | |
| 2024-01-25 01:30 | jsantos | Note Added: 0009119 | |
| 2024-01-25 01:30 | jsantos | Note Edited: 0009119 | |
| 2024-01-25 01:30 | jsantos | Note Edited: 0009119 | |
| 2025-11-08 01:22 | jsantos | Note Edited: 0009119 | |
| 2025-12-12 02:11 | jsantos | Relationship added | related to 0002222 |
| 2025-12-12 02:11 | jsantos | Relationship added | related to 0001532 |