Change:
<!-- Do Not Delete This! featurerequesttemplate --<!-- Please read our Rules of Conduct: --<!-- Please search existing issues to avoid creating duplicates. --<!-- Describe the feature you'd like. --Automatic (dynamic) debug providers are only displayed when there is an active file. If a user tries to Run and Debug without an active file, the dynamic debug providers are not shown. This feature request is looking to enhance the hueristic used to determine when to show the automatic debug configuration providers. Hueristic proposals: Look at the open folder file types and enable dynamic providers for those file / languages. Combine an activation event and a dynamic configuration provider. I'm also open to other heurestics other folks might have in mind.
fyi for ideas
Hot take: the same problems we think we're trying to solve already exist for non-dynamic debuggers. NodeJS shows up for me when I'm in a .NET app today, so it's already not 'smart' in that sense, and I just feel that showing dynamic providers could map to the same model.
Two questions from this: we using dynamic configuration providers correctly? We are using dynamic configurations just so we don't have to write these configurations to we are not, is there a way to make initial configuration providers use the machine storage instead of . E.g.
yes - that is a correct hot take! We have this heuristic to determine what debugger to use, and we use that heuristic whenever there is NO file. Thus we use it to decide what dynamic configuration provider to use, what debug extension to ask to try to launch without a etc... No, there is not way to make initial configuration provider use the machine storage instead of What I tried to say in my initial comment, is that we have to improve the general heuristic for auto-picking a debugger. However since this is a problem that we have for all languages since day 1 of vscode I suggest that we wait for to chime in. He is currently focused on Copilot Chat work so it might take a bit of time. Thanks for understanding.
I don't think that's true, isn't this a dynamic debug config provider? <img width="1271" alt="image" src=""Maybe you aren't activating your extension on ?
C# Dev Kit has it in its ! This is for the F5 (Run and Debug), not selecting the
I don't think the automatic config providers are shown in that case though? But here we will invoke your DA with no file open <img width="1177" alt="image" src=""
Thats the issue, we want F5 to show the dynamic provider instead of the initial configuraiton providers of .NET5+ and .NET Core since those will be hidden if C# Dev Kit is installed. We dont use initial configuration providers because we want the configurations to be saved in the machine memory.
A couple somewhat related issues

Discussion:
// Or if a breakpoint can be set in the current file (good hint that an extension can handle it) if ((!languageLabel || gettingConfigurations || (model && this.canSetBreakpointsIn(model))) && candidates.length === 0) { await this.activateDebuggers('onDebugInitialConfigurations'); candidates = this.debuggers .filter(a => a.enabled) <del> .filter(dbg => dbg.hasInitialConfiguration() || dbg.hasConfigurationProvider()); </del> <ins> .filter(dbg => dbg.hasInitialConfiguration() || dbg.hasDynamicConfigurationProviders() || dbg.hasConfigurationProvider()); </ins> } if (candidates.length === 0 && languageLabel) {

*/ onDidSelectConfiguration: Event<void>; <del> hasDebugConfigurationProvider(debugType: string): boolean; </del> <ins> hasDebugConfigurationProvider(debugType: string, triggerKind?: DebugConfigurationProviderTriggerKind): boolean; </ins> getDynamicProviders(): Promise<{ label: string; type: string; pick: () => Promise<{ launch: ILaunch; config: IConfig } | undefined> }[]>; registerDebugConfigurationProvider(debugConfigurationProvider: IDebugConfigurationProvider): IDisposable;

import { isObject } from 'vs/base/common/types'; import { IJSONSchema, IJSONSchemaMap, IJSONSchemaSnippet } from 'vs/base/common/jsonSchema'; import { IWorkspaceFolder } from 'vs/platform/workspace/common/workspace'; <del> import { IConfig, IDebuggerContribution, IDebugAdapter, IDebugger, IDebugSession, IAdapterManager, IDebugService, debuggerDisabledMessage, IDebuggerMetadata } from 'vs/workbench/contrib/debug/common/debug'; </del> <ins> import { IConfig, IDebuggerContribution, IDebugAdapter, IDebugger, IDebugSession, IAdapterManager, IDebugService, debuggerDisabledMessage, IDebuggerMetadata, DebugConfigurationProviderTriggerKind } from 'vs/workbench/contrib/debug/common/debug'; </ins> import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { IConfigurationResolverService } from 'vs/workbench/services/configurationResolver/common/configurationResolver'; import * as ConfigurationResolverUtils from 'vs/workbench/services/configurationResolver/common/configurationResolverUtils';

return !!this.debuggerContribution.initialConfigurations; } <ins> hasDynamicConfigurationProviders(): boolean { return this.debugService.getConfigurationManager().hasDebugConfigurationProvider(this.type, DebugConfigurationProviderTriggerKind.Dynamic); } </ins> hasConfigurationProvider(): boolean { return this.debugService.getConfigurationManager().hasDebugConfigurationProvider(this.type); }