MCPcopy
hub / github.com/microsoft/vscode-js-debug / attach

Method attach

src/binder.ts:389–458  ·  view source on GitHub ↗
(node: TargetTreeNode, launcher: ILauncher)

Source from the content-addressed store, hash-verified

387 }
388
389 private async attach(node: TargetTreeNode, launcher: ILauncher) {
390 if (!this._launchParams) {
391 throw new Error('Cannot launch before params have been set');
392 }
393
394 const target = node.value;
395 if (!target.canAttach()) {
396 return;
397 }
398 const cdp = await target.attach();
399 if (!cdp) {
400 return;
401 }
402 const connection = await this._delegate.acquireDap(target);
403 const dap = connection.dap();
404 const launchParams = this._launchParams;
405
406 if (!this._asyncStackPolicy) {
407 this._asyncStackPolicy = getAsyncStackPolicy(launchParams.showAsyncStacks);
408 }
409
410 const parentTarget = target.parent();
411 const parentContainer = (parentTarget && this._serviceTree.get(parentTarget))
412 || this._rootServices;
413 const container = createTargetContainer(parentContainer, target, dap, cdp);
414 connection.attachTelemetry(container.get(ITelemetryReporter));
415 this._serviceTree.set(target, parentContainer);
416
417 const debugAdapter = new DebugAdapter(dap, this._asyncStackPolicy, launchParams, container);
418 const thread = debugAdapter.createThread(cdp, target);
419
420 const isBlazor = 'inspectUri' in launchParams && !!launchParams.inspectUri;
421 if (isBlazor) {
422 this.attachDotnetDebuggerEvent(
423 cdp,
424 this._rootServices.get(ITelemetryReporter),
425 this._rootServices.get(IsVSCode),
426 );
427 }
428
429 const startThread = async () => {
430 await debugAdapter.launchBlocker();
431 target.runIfWaitingForDebugger();
432 node.threadData.resolve({ thread, debugAdapter });
433 return {};
434 };
435
436 // default disconnect/terminate/restart handlers that can be overridden
437 // by the delegate in initAdapter()
438 dap.on('disconnect', args => this._disconnectTarget(node, args));
439 dap.on('terminate', () => this._terminateTarget(node));
440 dap.on('restart', async () => {
441 if (target.canRestart()) {
442 target.restart();
443 } else {
444 await this._restart();
445 }
446

Callers 1

_attachToNewTargetsMethod · 0.95

Calls 15

createThreadMethod · 0.95
_disconnectTargetMethod · 0.95
_terminateTargetMethod · 0.95
_restartMethod · 0.95
getAsyncStackPolicyFunction · 0.90
createTargetContainerFunction · 0.90
dapMethod · 0.80
attachTelemetryMethod · 0.80
resolveMethod · 0.80
canAttachMethod · 0.65
attachMethod · 0.65

Tested by

no test coverage detected