in src/debugging/netcore/NetCoreDebugHelper.ts [70:137]
private async resolveLaunchDebugConfiguration(context: DockerDebugContext, debugConfiguration: DockerDebugConfiguration): Promise<ResolvedDebugConfiguration | undefined> {
debugConfiguration.netCore = debugConfiguration.netCore || {};
debugConfiguration.netCore.appProject = await NetCoreTaskHelper.inferAppProject(context, debugConfiguration.netCore); // This method internally checks the user-defined input first
const { configureSsl, containerName, platformOS } = await this.loadExternalInfo(context, debugConfiguration);
const appOutput = await this.inferAppOutput(debugConfiguration.netCore);
if (context.cancellationToken && context.cancellationToken.isCancellationRequested) {
// inferAppOutput is slow, give a chance to cancel
return undefined;
}
await this.acquireDebuggers(platformOS);
if (context.cancellationToken && context.cancellationToken.isCancellationRequested) {
// acquireDebuggers is slow, give a chance to cancel
return undefined;
}
if (configureSsl) {
await this.configureSsl(context.actionContext, debugConfiguration, appOutput);
if (context.cancellationToken && context.cancellationToken.isCancellationRequested) {
// configureSsl is slow, give a chance to cancel
return undefined;
}
}
const additionalProbingPathsArgs = NetCoreDebugHelper.getAdditionalProbingPathsArgs(platformOS);
const containerAppOutput = NetCoreDebugHelper.getContainerAppOutput(debugConfiguration, appOutput, platformOS);
const dockerServerReadyAction = resolveDockerServerReadyAction(
debugConfiguration,
{
containerName: containerName,
pattern: '\\bNow listening on:\\s+(https?://\\S+)',
action: 'openExternally',
uriFormat: '%s://localhost:%s',
},
configureSsl || await NetCoreTaskHelper.isWebApp(debugConfiguration.netCore.appProject) // For .NET Core Console we won't create a DockerServerReadyAction unless at least part of one is user-provided
);
return {
...debugConfiguration, // Gets things like name, preLaunchTask, serverReadyAction, etc.
type: 'coreclr',
request: 'launch',
program: debugConfiguration.program || 'dotnet',
args: debugConfiguration.args || [additionalProbingPathsArgs, containerAppOutput].join(' '),
cwd: debugConfiguration.cwd || platformOS === 'Windows' ? 'C:\\app' : '/app',
dockerOptions: {
containerName: containerName,
dockerServerReadyAction: dockerServerReadyAction,
removeContainerAfterDebug: debugConfiguration.removeContainerAfterDebug
},
pipeTransport: {
pipeProgram: dockerExePath(context.actionContext),
/* eslint-disable no-template-curly-in-string */
pipeArgs: ['exec', '-i', containerName, '${debuggerCommand}'],
pipeCwd: '${workspaceFolder}',
/* eslint-enable no-template-curly-in-string */
debuggerPath: platformOS === 'Windows' ?
'C:\\remote_debugger\\win7-x64\\latest\\vsdbg' :
'/remote_debugger/vsdbg',
quoteArgs: false,
},
sourceFileMap: debugConfiguration.sourceFileMap || {
'/app/Views': path.join(path.dirname(debugConfiguration.netCore.appProject), 'Views'),
}
};
}