MCPcopy Create free account
hub / github.com/Snapchat/Valdi / attach

Method attach

valdi/vscode_debugger/src/binder.ts:340–391  ·  view source on GitHub ↗
(target: ITarget, launcher: ILauncher)

Source from the content-addressed store, hash-verified

338 }
339
340 public async attach(target: ITarget, launcher: ILauncher) {
341 if (!this._launchParams) {
342 throw new Error('Cannot launch before params have been set');
343 }
344
345 if (!target.canAttach()) {
346 return;
347 }
348 const cdp = await target.attach();
349 if (!cdp) {
350 return;
351 }
352 const connection = await this._delegate.acquireDap(target);
353 const dap = await connection.dap();
354 const launchParams = this._launchParams;
355
356 if (!this._asyncStackPolicy) {
357 this._asyncStackPolicy = getAsyncStackPolicy(launchParams.showAsyncStacks);
358 }
359
360 const parentTarget = target.parent();
361 const parentContainer =
362 (parentTarget && this._serviceTree.get(parentTarget)) || this._rootServices;
363 const container = createTargetContainer(parentContainer, target, dap, cdp);
364 connection.attachTelemetry(container.get(ITelemetryReporter));
365 this._serviceTree.set(target, parentContainer);
366
367 // todo: move scriptskipper into services collection
368 const debugAdapter = new DebugAdapter(dap, this._asyncStackPolicy, launchParams, container);
369 const thread = debugAdapter.createThread(cdp, target);
370 this._threads.set(target, { thread, debugAdapter });
371 const startThread = async () => {
372 await debugAdapter.launchBlocker();
373 cdp.Runtime.runIfWaitingForDebugger({});
374 return {};
375 };
376 if (await this._delegate.initAdapter(debugAdapter, target, launcher)) {
377 startThread();
378 } else {
379 dap.on('attach', startThread);
380 dap.on('launch', startThread);
381 dap.on('disconnect', () => this.detachTarget(target, container));
382 dap.on('terminate', () => this.stopTarget(target, container));
383 dap.on('restart', async () => {
384 if (target.canRestart()) target.restart();
385 else await this._restart();
386 return {};
387 });
388 }
389
390 await target.afterBind();
391 }
392
393 /**
394 * Called when we get a disconnect for a target. We stop the

Callers 1

_attachToNewTargetsMethod · 0.95

Calls 15

createThreadMethod · 0.95
detachTargetMethod · 0.95
stopTargetMethod · 0.95
_restartMethod · 0.95
getAsyncStackPolicyFunction · 0.90
createTargetContainerFunction · 0.90
dapMethod · 0.80
attachTelemetryMethod · 0.80
canAttachMethod · 0.65
attachMethod · 0.65
acquireDapMethod · 0.65
parentMethod · 0.65

Tested by

no test coverage detected