Every live watch plugin must implement the ILiveWatchPlugin interface, that will be used by VisualGDB to create a node source. VisualGDB will then periodically call the PerformPeriodicUpdatesFromBackgroundThread method in the created source to return the list of live variable nodes provided by the plugin.
The plugin's implementation of PerformPeriodicUpdatesFromBackgroundThread would typically return some combination of the following nodes:
If the live watch plugin needs to parse lists, trees, heaps, etc, it should avoid reading the memory directly from the update function. Instead, it should create live watch objects via CreateLiveVariable(UInt64, Int32, String, LiveVariableFlags), CreateLiveVariable(ILiveWatchEngine, IPinnedVariable, LiveVariableFlags), or CreateLiveVariable(ILiveWatchEngine, String, Boolean, LiveVariableFlags), and then call the GetValue(LiveVariableQueryMode) method to read the actual variable value. This allows VisualGDB to group and order memory reading requests from various variables, and run them with minimal overhead. Reading multiple variable values directly instead of maintaining a list of active live variables could considerably (over 10x) lower the overall performance.
LiveVariablesUpdatedEventArgs | Contains information passed via LiveVariableUpdatingCompleted and UpdateLiveVariableGUI. |
LiveWatchEngineExtensions | Provides various extension methods for the liev watch interfaces. |
LiveWatchFilterRequest | Used to pass a search string to MatchesFilter(LiveWatchFilterRequest). |
LiveWatchNodeState | Contains the mutable live watch node state returned by ILiveWatchNode |
BitfieldMemberInfo | Represents a single bit field member extracted from the DWARF symbols. |
CommonLiveWatchSettings | Contains various settings configured via VisualGDB Project Properties, or Tools->Options->VisualGDB. |
LiveVariablesStatistics | Holds various statistics about the currently active live variables. |
LiveVariableValue | Represents the value of a single live variable queried via GetValue(LiveVariableQueryMode) or ReadMemory(UInt64, Int32, LiveVariableQueryMode) |
LiveWatchEnumValue | Represents a single known enum value returned by enum-based live watch nodes via IScalarLiveWatchNode.EnumValues. |
LiveWatchNodeOverrides | Allows overriding some properties of a live watch node that is created based on a pinned variable. |
LiveWatchNodeSuspendState | Contains information about the suspend state of the given live watch node. Used to determine whether the corresponding live variables should be suspended as well. |
LiveWatchPhysicalLocation | Represents the source and physical location of a live watch node used by various context menu commands. |
LiveWatchUpdateContext | Passed to UpdateState(LiveWatchUpdateContext) to control which information about the node should get updated. |
PinnedVariableExpression | Represents the expression directly entered into the Live Watch view. |
PinnedVariableTypeName | Specifies the type name of the given pinned variable extracted from the DWARF symbols. |
RawSymbolInfo | Contains information about a given raw ELF symbol returned by TryLookupRawSymbolInfo(String) or FindSymbolsContainingString(String) |
ScalarCondition | Represents a live watch breakpoint condition selected by the user. |
SimpleEnumValue | Represents a single known enum value extracted from the DWARF symbols. Typically, returned via EnumValues. |
ILiveMemoryManager | Allows reading/writing the target memory without stopping it. |
ILiveSymbolParser | Allows locating the addresses of specific variables and obtaining information about the structure of various types. |
ILiveVariable | Represents a single low-level live variable (a block of memory that is automatically read by VisualGDB on every update operation). |
ILiveWatchEngine | Implemented by VisualGDB. Provides methods for reading the symbols of the debugged executable, accessing the target memory, and reporting various errors. |
ILiveWatchFormatter | Translates the raw value (typically coming from LiveVariableValue) to a user-friendly value or back. |
ILiveWatchFormatter2 | Extends the ILiveWatchFormatter with a method that allows getting the raw scalar value without any loss of precision. |
ILiveWatchNode | Represents a single node displayed in the Live Watch window. |
ILiveWatchNodeSource | Maintains a list of the Live Watch nodes provided by the plugin. |
ILiveWatchNodeSource2 | Extends ILiveWatchNodeSource, adding a property controlling whether the plugin view is currently active. |
ILiveWatchPlugin | Implemented by Live Watch plugins in order to display custom Live Watch views. |
IPinnedEnumVariable | Extends the IPinnedVariable interface, providing information about the enum values. |
IPinnedVariable | Contains information about a specific variable physically located in memory (e.g. a global variable). It encapsulates the debugging symbols loaded from the ELF file and is not connected to the actual target memory. |
IPinnedVariable2 | Extends IPinnedVariable with optional information about a bit field member. |
IPinnedVariableStructMember | Represents a single field of a struct/class obtained from IPinnedVariableStructType |
IPinnedVariableStructType | Represents a struct/class type extracted from the DWARF symbols. Typically obtained by calling LookupType(String, Boolean) |
IPinnedVariableType | Contains information about a single DWARF type. Typically obtained by calling LookupType(String, Boolean) |
IScalarLiveWatchNode | Represents a live watch node that can have a direct value (e.g. int or string). |
ISearchableLiveWatchNode | Represents a node that can be filtered via the filter box in the Live Watch window. |
LiveVariableFlags | Specifies flags used when creating live variables. |
LiveVariableQueryMode | Specifies how the live variable value should be queried. |
LiveWatchCapabilities | Specifies the capabilities and visual flags of a live watch node. |
LiveWatchChildrenRequestReason | Specifies the reason for calling GetChildren(LiveWatchChildrenRequestReason) |
LiveWatchConfigurationError | Represents the known configuration errors detected by live watch plugins. |
LiveWatchNodeIcon | Represents the commonly used live watch node icons |
LiveWatchNodeVisibility | Represents the visibility of a Live Watch node in the Live Watch window. |
LiveWatchSearchResult | Represents the result of applying a filter to a live watch node |
LiveWatchUpdateMode | Specifies whether to update the information about the node's children. |
LiveWatchVariableStateFlags | Specifies various flags associated with a live variable node value |
PinnedVariableType | Specifies the general type (e.g. scalar/pointer) of a given pinned variable. |
ScalarComparisonMode | Specifies the comparison mode used when setting live watch breakpoints. |
ScalarVariableType | Represents the built-in types of scalar variables. |