in src/debugAdapter/goDebug.ts [2267:2303]
private async getPackageInfo(debugState: DebuggerState | undefined): Promise<string | void> {
if (!debugState || !debugState.currentThread || !debugState.currentThread.file) {
return Promise.resolve();
}
if (this.delve?.isRemoteDebugging) {
await this.initializeRemotePackagesAndSources();
}
const dir = path.dirname(
this.delve?.remotePath?.length || this.delve?.isRemoteDebugging
? this.toLocalPath(debugState.currentThread.file)
: debugState.currentThread.file
);
if (this.packageInfo.has(dir)) {
return Promise.resolve(this.packageInfo.get(dir));
}
return new Promise((resolve) => {
execFile(
getBinPathWithPreferredGopathGoroot('go', []),
['list', '-f', '{{.Name}} {{.ImportPath}}'],
{ cwd: dir, env: this.delve?.dlvEnv },
(err, stdout, stderr) => {
if (err || stderr || !stdout) {
logError(`go list failed on ${dir}: ${stderr || err}`);
return resolve();
}
if (stdout.split('\n').length !== 2) {
logError(`Cannot determine package for ${dir}`);
return resolve();
}
const spaceIndex = stdout.indexOf(' ');
const result = stdout.substr(0, spaceIndex) === 'main' ? 'main' : stdout.substr(spaceIndex).trim();
this.packageInfo.set(dir, result);
resolve(result);
}
);
});
}