diff --git a/arduino-debugger-extension/src/node/debug-adapter/symbols.ts b/arduino-debugger-extension/src/node/debug-adapter/symbols.ts index 716f596d..244d9f52 100644 --- a/arduino-debugger-extension/src/node/debug-adapter/symbols.ts +++ b/arduino-debugger-extension/src/node/debug-adapter/symbols.ts @@ -24,9 +24,9 @@ * SOFTWARE. */ -import { spawnSync } from 'child_process'; import { EOL } from 'os'; -import { dirname, normalize, basename } from 'path'; +import { normalize, basename } from 'path'; +import { spawnCommand } from 'arduino-ide-extension/lib/node/exec-util'; export enum SymbolType { Function, @@ -133,28 +133,9 @@ export class SymbolTable { } private execute(): Promise { - return new Promise((resolve, reject) => { - if (!this.objdump) { - return reject(new Error('Missing parameter: objdump')); - } - try { - const { stdout, stderr } = spawnSync(this.objdump, [ - '--syms', - this.program - ], { - cwd: dirname(this.objdump), - windowsHide: true - }); - - const error = stderr.toString('utf8'); - if (error) { - return reject(new Error(error)); - } - - resolve(stdout.toString('utf8')); - } catch (error) { - return reject(new Error(error)); - } - }); + if (!this.objdump) { + return Promise.reject(new Error('Missing parameter: objdump')); + } + return spawnCommand(this.objdump, ['--syms', this.program]); } } diff --git a/arduino-ide-extension/src/node/exec-util.ts b/arduino-ide-extension/src/node/exec-util.ts index ab384a88..6c1368fe 100644 --- a/arduino-ide-extension/src/node/exec-util.ts +++ b/arduino-ide-extension/src/node/exec-util.ts @@ -30,7 +30,7 @@ export async function getExecPath(commandName: string, logger: ILogger, versionA return buildCommand; } -export function spawnCommand(command: string, args: string[], logger: ILogger): Promise { +export function spawnCommand(command: string, args: string[], logger?: ILogger): Promise { return new Promise((resolve, reject) => { const cp = spawn(command, args, { windowsHide: true, shell: true }); const outBuffers: Buffer[] = []; @@ -38,7 +38,9 @@ export function spawnCommand(command: string, args: string[], logger: ILogger): cp.stdout.on('data', (b: Buffer) => outBuffers.push(b)); cp.stderr.on('data', (b: Buffer) => errBuffers.push(b)); cp.on('error', error => { - logger.error(`Error executing ${command} ${args.join(' ')}`, error); + if (logger) { + logger.error(`Error executing ${command} ${args.join(' ')}`, error); + } reject(error); }); cp.on('exit', (code, signal) => { @@ -49,17 +51,23 @@ export function spawnCommand(command: string, args: string[], logger: ILogger): } if (errBuffers.length > 0) { const message = Buffer.concat(errBuffers).toString('utf8').trim(); - logger.error(`Error executing ${command} ${args.join(' ')}: ${message}`); + if (logger) { + logger.error(`Error executing ${command} ${args.join(' ')}: ${message}`); + } reject(new Error(`Process failed with error: ${message}`)); return; } if (signal) { - logger.error(`Unexpected signal '${signal}' when executing ${command} ${args.join(' ')}`); + if (logger) { + logger.error(`Unexpected signal '${signal}' when executing ${command} ${args.join(' ')}`); + } reject(new Error(`Process exited with signal: ${signal}`)); return; } if (code) { - logger.error(`Unexpected exit code '${code}' when executing ${command} ${args.join(' ')}`); + if (logger) { + logger.error(`Unexpected exit code '${code}' when executing ${command} ${args.join(' ')}`); + } reject(new Error(`Process exited with exit code: ${code}`)); return; }