-
Notifications
You must be signed in to change notification settings - Fork 51
Component Levels
Patrick Nelson edited this page Nov 22, 2016
·
3 revisions
In Concord, each component has a numeric value associated with it called the component level. This level tells the Dispatcher a few things:
- When remote debugging, will this component load on the target computer or the Visual Studio computer? Components above 100,000 are IDE components and only load in the Visual Studio process.
- The order components will be called in when making broadcast requests or sending events. Request calls are made on higher component levels before lower component levels (requests are top down). Event calls are made on lower level components before higher level components (events are bottom up).
- The priority of a component when a non-broadcast request call is made. If there are multiple matching implementations for a method call, the Dispatcher will route the call to the highest level component. If the component calls the same method again, the Dispatcher will route the call to the next highest component. Note: Some calls are "callbacks" and like events, these are routed from the bottom up.
There are two general rules to follow when selecting a component level:
- Select a level higher (larger number) than dependent components. For example, if the target process had an interpreter, and this interpreter was implemented in managed code, then a debug monitor which is built to add a debugging experience for the interpreter must have a higher component level than the Managed DM.
- Follow the advice in the following charts:
IDE Component Levels (Values > 100,000):
Component | Component Level |
---|---|
AD7 AL | 1,000,000,000 |
Disassembly Provider | 9,998,000 |
Stack Query – Components that wish to query the call stack | 9,997,000 |
Stack Provider | 9,996,000 |
Stack Filter - level where stacks can be filtered and annotated | 9,995,000 |
Breakpoint Manager | 9,994,000 |
IDE Expression Evaluation | 9,992,000 |
Symbol Stack Walkers – stack walkers that need access to symbols | 9,991,000 |
IDE SymbolProvider - Components which provide symbol information to rest of the debugger. The symbol path should not be used below this level. | 1,999,000 |
Target Computer Component Levels (Values < 99,999):
Component | Component Level |
---|---|
Monitor Symbol Provider – Symbol providers when the symbolic state is built on the target computer (ex: interpreter, dynamically compiled/emitted code) | 75,000 |
Breakpoint Condition Processor - This level is for processing breakpoint conditions such as condition expressions and hit counts. Below this point all physical breakpoint events will be visible regardless of whether or not they have false conditions. | 70,000 |
Monitor Task Provider – This is the level for task data mining in the target process | 65,500 |
Monitor Expression Evaluator | 65,000 |
Monitor Coordination – Components which arbitrate between the various monitors for stepping, breakpoints by native address, stack walk, etc. | 60,000 |
Monitor Stack Walkers | 55,000 |
Custom Debug Monitor – Reserved for third party debug monitors which wish to make use of services provided by the standard debug monitors. | 40,500 |
Runtime Debug Monitor - Provides data inspection and execution control for managed/native/script code | 40,000 |
Base Debug Monitor | 10,000 |
Base Debug Monitor Services – provides utility services to base debug monitors (ex: process creation) as well as pre-debugging services (ex: process enumeration) | 1,000 |
Concord Documentation:
- Overview
- Visual Studio 2022 support
- Concord Architecture
- Getting troubleshooting logs
- Tips for debugging extensions
- Component Discovery and Configuration
- Component Levels
- Navigating the Concord API
- Obtaining the Concord API headers, libraries, etc
- Concord Threading Model
- Data Container API
- Creating and Closing Objects
- Expression Evaluators (EEs)
- .NET language EEs
- Native language EEs
- Installing Extensions
- Cross Platform and VS Code scenarios:
- Implementing components in native code:
- Worker Process Remoting
Samples: