View Issue Details

IDProjectCategoryView StatusLast Update
0001532NoesisGUIC++ SDKpublic2025-12-12 02:11
Reportersteveh Assigned Tojsantos  
PrioritynormalSeverityfeature 
Status assignedResolutionopen 
Product Version2.2.1 
Summary0001532: Feature request: DependencyProperty value support on DependencyObject instances in the debugger
Description

Hi guys, this is following on from this feature request: https://www.noesisengine.com/bugs/view.php?id=1440#c5920

What I'd like is the ability to query the DependencyProperty values directly from the debugger. Ideally, if I'd hover over an instance derived from DependencyObject I'd be able to see all the current values of all the DependencyProperty properties. C# manages this through reflection and the getters. If possible, could we achieve something similar in native C++ by modifying the *.natvis to query the DependencyValue maps to retrieve the value for a particular DependencyObject instance? I've attached 2 images, one from managed C# and the other from native C++ of the output from instanced derived from DepnedencyObejct. Ideally, the native would be able to retrieve the same information that the C# version could return.

Currently, the workaround is to stop the debugger, write a log to retrieve the value, and then rerun the game. This would prevent tonnes of debugging code that I end up writing like the following snippet:

NS_LOG_DEBUG("%s::Visibility = %d", GetName(), GetVisibility());

Cheers,

-Steven

Steps To Reproduce
  1. Breakpoint any instance derived from DependencyObject in C++
  2. View the this pointer in the watch window.
  3. Notice that no DependencyProperty values are displayed.
Attached Files
PlatformAny

Relationships

related to 0003032 assignedjsantos Natvis not working / PDBs missing 
related to 0002222 feedbackjsantos Show the XAML line in binding failed error message. 

Activities

jsantos

jsantos

2025-11-30 12:24

manager   ~0011491

Visual Studio visualizers are split into two logical parts (the docs call them debugger-side and debuggee-side). The debugger-side creates the UI inside Visual Studio; the debuggee-side runs inside the process being debugged and is the only place that can safely execute code and access objects in that process. The official docs describe this two-part architecture.

https://learn.microsoft.com/en-us/visualstudio/debugger/visualizer-architecture?view=visualstudio

Concord/Dkm visualizers support instantiating an object in the debuggee process that the debugger-side UI can talk to. There are explicit Dkm APIs for creating a debuggee-side visualizer object; the debuggee-side object is executed inside the debuggee so it can call your Noesis runtime APIs directly. See DkmSuccessEvaluationResult and the CreateDebuggeeSideVisualizerObject APIs.

https://learn.microsoft.com/en-us/dotnet/api/microsoft.visualstudio.debugger.evaluation.dkmsuccessevaluationresult?view=visualstudiosdk-2022

Issue History

Date Modified Username Field Change
2019-08-08 18:13 steveh New Issue
2019-08-08 18:13 steveh File Added: native_dependencyproperty_output.png
2019-08-08 18:13 steveh File Added: managed_dependencyproperty_output.png
2019-08-13 12:08 jsantos Assigned To => jsantos
2019-08-13 12:08 jsantos Status new => assigned
2021-09-06 17:53 jsantos Relationship added related to 0001440
2025-11-30 12:17 jsantos Relationship added related to 0002222
2025-11-30 12:24 jsantos Note Added: 0011491
2025-12-12 02:10 jsantos Relationship deleted related to 0001440
2025-12-12 02:11 jsantos Relationship added related to 0003032