VSCode IDE enhancement and readme update (#3172)
- Temporarily disable the deque test for the VS Code extension, as the Rust formatter seems to malfunction after a recent VS Code update. - Add configuration for iwasm host managed heap size, allowing users to flexibly `malloc` memory. This also fixes the current bug that when default size is 0, it can't run and debug. - Apply coding style formatting for WAMR IDE source code and add a format check for it in CI. - Update document and some screenshots.
This commit is contained in:
@ -8,23 +8,24 @@ import * as os from 'os';
|
||||
|
||||
/* see https://github.com/llvm/llvm-project/tree/main/lldb/tools/lldb-vscode#attaching-settings */
|
||||
export interface WasmDebugConfig {
|
||||
type: string,
|
||||
name: string,
|
||||
request: string,
|
||||
program? : string,
|
||||
pid?: string,
|
||||
stopOnEntry?: boolean,
|
||||
waitFor?: boolean,
|
||||
initCommands?: string[],
|
||||
preRunCommands?: string[],
|
||||
stopCommands?: string[],
|
||||
exitCommands?: string[],
|
||||
terminateCommands?: string[],
|
||||
attachCommands?: string[]
|
||||
type: string;
|
||||
name: string;
|
||||
request: string;
|
||||
program?: string;
|
||||
pid?: string;
|
||||
stopOnEntry?: boolean;
|
||||
waitFor?: boolean;
|
||||
initCommands?: string[];
|
||||
preRunCommands?: string[];
|
||||
stopCommands?: string[];
|
||||
exitCommands?: string[];
|
||||
terminateCommands?: string[];
|
||||
attachCommands?: string[];
|
||||
}
|
||||
|
||||
export class WasmDebugConfigurationProvider
|
||||
implements vscode.DebugConfigurationProvider {
|
||||
implements vscode.DebugConfigurationProvider
|
||||
{
|
||||
private wasmDebugConfig: WasmDebugConfig = {
|
||||
type: 'wamr-debug',
|
||||
name: 'Attach',
|
||||
@ -33,28 +34,29 @@ export class WasmDebugConfigurationProvider
|
||||
attachCommands: [
|
||||
/* default port 1234 */
|
||||
'process connect -p wasm connect://127.0.0.1:1234',
|
||||
]
|
||||
],
|
||||
};
|
||||
|
||||
constructor(extensionPath: string) {
|
||||
this.wasmDebugConfig.initCommands = [
|
||||
/* Add rust formatters -> https://lldb.llvm.org/use/variable.html */
|
||||
`command script import ${extensionPath}/formatters/rust.py`
|
||||
`command script import ${extensionPath}/formatters/rust.py`,
|
||||
];
|
||||
|
||||
if (os.platform() === 'win32' || os.platform() === 'darwin') {
|
||||
this.wasmDebugConfig.initCommands.push('platform select remote-linux');
|
||||
this.wasmDebugConfig.initCommands.push(
|
||||
'platform select remote-linux'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
public resolveDebugConfiguration(
|
||||
_: vscode.WorkspaceFolder | undefined,
|
||||
debugConfiguration: vscode.DebugConfiguration,
|
||||
debugConfiguration: vscode.DebugConfiguration
|
||||
): vscode.ProviderResult<vscode.DebugConfiguration> {
|
||||
|
||||
this.wasmDebugConfig = {
|
||||
...this.wasmDebugConfig,
|
||||
...debugConfiguration
|
||||
...debugConfiguration,
|
||||
};
|
||||
|
||||
return this.wasmDebugConfig;
|
||||
|
||||
@ -170,7 +170,9 @@ export async function activate(context: vscode.ExtensionContext) {
|
||||
}
|
||||
|
||||
/* register debug configuration */
|
||||
wasmDebugConfigProvider = new WasmDebugConfigurationProvider(context.extensionPath);
|
||||
wasmDebugConfigProvider = new WasmDebugConfigurationProvider(
|
||||
context.extensionPath
|
||||
);
|
||||
|
||||
vscode.debug.registerDebugConfigurationProvider(
|
||||
'wamr-debug',
|
||||
@ -811,6 +813,7 @@ interface BuildArgs {
|
||||
maxMemorySize: string;
|
||||
stackSize: string;
|
||||
exportedSymbols: string;
|
||||
hostManagedHeapSize: string;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -31,6 +31,7 @@ export class WasmTaskProvider implements vscode.TaskProvider {
|
||||
/* target name is used for generated aot target */
|
||||
const targetName =
|
||||
TargetConfigPanel.buildArgs.outputFileName.split('.')[0];
|
||||
const heapSize = TargetConfigPanel.buildArgs.hostManagedHeapSize;
|
||||
|
||||
if (
|
||||
os.platform() === 'linux' ||
|
||||
@ -57,7 +58,7 @@ export class WasmTaskProvider implements vscode.TaskProvider {
|
||||
: (this._script.get('debugScript') as string),
|
||||
options: {
|
||||
executable: this._script.get('debugScript'),
|
||||
shellArgs: [targetName, this._wamrVersion],
|
||||
shellArgs: [targetName, this._wamrVersion, heapSize],
|
||||
},
|
||||
};
|
||||
|
||||
@ -69,7 +70,7 @@ export class WasmTaskProvider implements vscode.TaskProvider {
|
||||
: (this._script.get('runScript') as string),
|
||||
options: {
|
||||
executable: this._script.get('runScript'),
|
||||
shellArgs: [targetName, this._wamrVersion],
|
||||
shellArgs: [targetName, this._wamrVersion, heapSize],
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
@ -9,25 +9,25 @@ import * as os from 'os';
|
||||
import { runTests } from '@vscode/test-electron';
|
||||
|
||||
async function main() {
|
||||
try {
|
||||
// The folder containing the Extension Manifest package.json
|
||||
// Passed to `--extensionDevelopmentPath`
|
||||
const extensionDevelopmentPath = path.resolve(__dirname, '../../');
|
||||
try {
|
||||
// The folder containing the Extension Manifest package.json
|
||||
// Passed to `--extensionDevelopmentPath`
|
||||
const extensionDevelopmentPath = path.resolve(__dirname, '../../');
|
||||
|
||||
// The path to the extension test script
|
||||
// Passed to --extensionTestsPath
|
||||
const extensionTestsPath = path.resolve(__dirname, './suite/index');
|
||||
// The path to the extension test script
|
||||
// Passed to --extensionTestsPath
|
||||
const extensionTestsPath = path.resolve(__dirname, './suite/index');
|
||||
|
||||
// Download VS Code, unzip it and run the integration test
|
||||
await runTests({
|
||||
extensionDevelopmentPath,
|
||||
extensionTestsPath,
|
||||
launchArgs: ['--user-data-dir', `${os.tmpdir()}`]
|
||||
});
|
||||
} catch (err) {
|
||||
console.error('Failed to run tests');
|
||||
process.exit(1);
|
||||
}
|
||||
// Download VS Code, unzip it and run the integration test
|
||||
await runTests({
|
||||
extensionDevelopmentPath,
|
||||
extensionTestsPath,
|
||||
launchArgs: ['--user-data-dir', `${os.tmpdir()}`],
|
||||
});
|
||||
} catch (err) {
|
||||
console.error('Failed to run tests');
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
main();
|
||||
|
||||
@ -3,57 +3,65 @@
|
||||
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
*/
|
||||
|
||||
import {DebugProtocol} from '@vscode/debugprotocol';
|
||||
import {after, before, test, suite} from 'mocha';
|
||||
import {assert} from 'chai';
|
||||
import { DebugProtocol } from '@vscode/debugprotocol';
|
||||
import { after, before, test, suite } from 'mocha';
|
||||
import { assert } from 'chai';
|
||||
import * as vscode from 'vscode';
|
||||
import * as cp from 'child_process';
|
||||
import * as path from "path";
|
||||
import * as path from 'path';
|
||||
import * as os from 'os';
|
||||
import {WasmDebugConfig, WasmDebugConfigurationProvider} from "../../debugConfigurationProvider";
|
||||
import {EXTENSION_PATH, clearAllBp, setBpAtMarker, compileRustToWasm} from "./utils";
|
||||
import {downloadLldb, isLLDBInstalled} from '../../utilities/lldbUtilities';
|
||||
import {
|
||||
WasmDebugConfig,
|
||||
WasmDebugConfigurationProvider,
|
||||
} from '../../debugConfigurationProvider';
|
||||
import {
|
||||
EXTENSION_PATH,
|
||||
clearAllBp,
|
||||
setBpAtMarker,
|
||||
compileRustToWasm,
|
||||
} from './utils';
|
||||
import { downloadLldb, isLLDBInstalled } from '../../utilities/lldbUtilities';
|
||||
|
||||
suite('Unit Tests', function () {
|
||||
test('DebugConfigurationProvider init commands', function () {
|
||||
const testExtensionPath = "/test/path/";
|
||||
const testExtensionPath = '/test/path/';
|
||||
const provider = new WasmDebugConfigurationProvider(testExtensionPath);
|
||||
|
||||
assert.includeMembers(
|
||||
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
||||
provider.getDebugConfig().initCommands!,
|
||||
[`command script import ${testExtensionPath}/formatters/rust.py`],
|
||||
"Debugger init commands did not contain "
|
||||
'Debugger init commands did not contain '
|
||||
);
|
||||
});
|
||||
|
||||
test('DebugConfigurationProvider resolve configuration', function () {
|
||||
const testExtensionPath = "/test/path/";
|
||||
const testExtensionPath = '/test/path/';
|
||||
const provider = new WasmDebugConfigurationProvider(testExtensionPath);
|
||||
|
||||
const actual = provider.resolveDebugConfiguration(undefined, {
|
||||
type: "wamr-debug",
|
||||
name: "Attach",
|
||||
request: "attach",
|
||||
type: 'wamr-debug',
|
||||
name: 'Attach',
|
||||
request: 'attach',
|
||||
initCommands: [],
|
||||
attachCommands: [
|
||||
'process connect -p wasm connect://123.456.789.1:1237',
|
||||
]
|
||||
],
|
||||
});
|
||||
|
||||
assert.deepEqual(
|
||||
actual,
|
||||
{
|
||||
type: "wamr-debug",
|
||||
name: "Attach",
|
||||
request: "attach",
|
||||
type: 'wamr-debug',
|
||||
name: 'Attach',
|
||||
request: 'attach',
|
||||
stopOnEntry: true,
|
||||
initCommands: [],
|
||||
attachCommands: [
|
||||
'process connect -p wasm connect://123.456.789.1:1237',
|
||||
]
|
||||
],
|
||||
},
|
||||
"Configuration did not match the expected configuration after calling resolveDebugConfiguration()"
|
||||
'Configuration did not match the expected configuration after calling resolveDebugConfiguration()'
|
||||
);
|
||||
});
|
||||
});
|
||||
@ -69,16 +77,24 @@ suite('Inegration Tests', function () {
|
||||
// Download LLDB if necessary. Should be available in the CI. Only for local execution.
|
||||
if (!isLLDBInstalled(EXTENSION_PATH)) {
|
||||
this.timeout(downloadTimeout);
|
||||
console.log("Downloading LLDB. This might take a moment...");
|
||||
console.log('Downloading LLDB. This might take a moment...');
|
||||
await downloadLldb(EXTENSION_PATH);
|
||||
assert.isTrue(isLLDBInstalled(EXTENSION_PATH), "LLDB was not installed correctly");
|
||||
assert.isTrue(
|
||||
isLLDBInstalled(EXTENSION_PATH),
|
||||
'LLDB was not installed correctly'
|
||||
);
|
||||
}
|
||||
|
||||
compileRustToWasm();
|
||||
|
||||
const platform = os.platform();
|
||||
assert.isTrue(platform === "darwin" || platform === "linux", `Tests do not support your platform: ${platform}`);
|
||||
const iWasmPath = path.resolve(`${EXTENSION_PATH}/../../../product-mini/platforms/${platform}/build/iwasm`);
|
||||
assert.isTrue(
|
||||
platform === 'darwin' || platform === 'linux',
|
||||
`Tests do not support your platform: ${platform}`
|
||||
);
|
||||
const iWasmPath = path.resolve(
|
||||
`${EXTENSION_PATH}/../../../product-mini/platforms/${platform}/build/iwasm`
|
||||
);
|
||||
const testWasmFilePath = `${EXTENSION_PATH}/resource/test/test.wasm`;
|
||||
|
||||
debuggerProcess = cp.spawn(
|
||||
@ -87,7 +103,7 @@ suite('Inegration Tests', function () {
|
||||
{}
|
||||
);
|
||||
|
||||
debuggerProcess.stderr.on('data', (data) => {
|
||||
debuggerProcess.stderr.on('data', data => {
|
||||
console.log(`Error from debugger process: ${data}`);
|
||||
});
|
||||
});
|
||||
@ -101,44 +117,54 @@ suite('Inegration Tests', function () {
|
||||
// timeout of 1 minutes
|
||||
this.timeout(60 * 1000);
|
||||
clearAllBp();
|
||||
setBpAtMarker(`${EXTENSION_PATH}/resource/test/test.rs`, "BP_MARKER_1");
|
||||
setBpAtMarker(`${EXTENSION_PATH}/resource/test/test.rs`, 'BP_MARKER_1');
|
||||
|
||||
const getVariables = new Promise<DebugProtocol.Variable[]>((resolve, reject) => {
|
||||
vscode.debug.registerDebugAdapterTrackerFactory("wamr-debug", {
|
||||
createDebugAdapterTracker: function () {
|
||||
return {
|
||||
// The debug adapter has sent a Debug Adapter Protocol message to the editor.
|
||||
onDidSendMessage: (message: DebugProtocol.ProtocolMessage) => {
|
||||
if (message.type === "response") {
|
||||
const m = message as DebugProtocol.Response;
|
||||
if (m.command === "variables") {
|
||||
const res = m as DebugProtocol.VariablesResponse;
|
||||
resolve(res.body.variables);
|
||||
const getVariables = new Promise<DebugProtocol.Variable[]>(
|
||||
(resolve, reject) => {
|
||||
vscode.debug.registerDebugAdapterTrackerFactory('wamr-debug', {
|
||||
createDebugAdapterTracker: function () {
|
||||
return {
|
||||
// The debug adapter has sent a Debug Adapter Protocol message to the editor.
|
||||
onDidSendMessage: (
|
||||
message: DebugProtocol.ProtocolMessage
|
||||
) => {
|
||||
if (message.type === 'response') {
|
||||
const m = message as DebugProtocol.Response;
|
||||
if (m.command === 'variables') {
|
||||
const res =
|
||||
m as DebugProtocol.VariablesResponse;
|
||||
resolve(res.body.variables);
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
onError: (error: Error) => {
|
||||
reject("An error occurred before vscode reached the breakpoint: " + error);
|
||||
},
|
||||
onExit: (code: number | undefined) => {
|
||||
reject(`Debugger exited before vscode reached the breakpoint with code: ${code}`);
|
||||
},
|
||||
};
|
||||
}
|
||||
});
|
||||
});
|
||||
},
|
||||
onError: (error: Error) => {
|
||||
reject(
|
||||
'An error occurred before vscode reached the breakpoint: ' +
|
||||
error
|
||||
);
|
||||
},
|
||||
onExit: (code: number | undefined) => {
|
||||
reject(
|
||||
`Debugger exited before vscode reached the breakpoint with code: ${code}`
|
||||
);
|
||||
},
|
||||
};
|
||||
},
|
||||
});
|
||||
}
|
||||
);
|
||||
|
||||
const config: WasmDebugConfig = {
|
||||
type: "wamr-debug",
|
||||
request: "attach",
|
||||
name: "Attach Debugger",
|
||||
type: 'wamr-debug',
|
||||
request: 'attach',
|
||||
name: 'Attach Debugger',
|
||||
stopOnEntry: false,
|
||||
initCommands: [
|
||||
`command script import ${EXTENSION_PATH}/formatters/rust.py`
|
||||
`command script import ${EXTENSION_PATH}/formatters/rust.py`,
|
||||
],
|
||||
attachCommands: [
|
||||
`process connect -p wasm connect://127.0.0.1:${port}`
|
||||
]
|
||||
`process connect -p wasm connect://127.0.0.1:${port}`,
|
||||
],
|
||||
};
|
||||
|
||||
if (os.platform() === 'win32' || os.platform() === 'darwin') {
|
||||
@ -148,36 +174,70 @@ suite('Inegration Tests', function () {
|
||||
try {
|
||||
await vscode.debug.startDebugging(undefined, config);
|
||||
} catch (e) {
|
||||
assert.fail("Could not connect to debug adapter");
|
||||
assert.fail('Could not connect to debug adapter');
|
||||
}
|
||||
|
||||
// wait until vs code has reached breakpoint and has requested the variables.
|
||||
const variables = await getVariables;
|
||||
const namesToVariables = variables.reduce((acc: { [name: string]: DebugProtocol.Variable }, c) => {
|
||||
if (c.evaluateName) {
|
||||
acc[c.evaluateName] = c;
|
||||
}
|
||||
return acc;
|
||||
}, {});
|
||||
const namesToVariables = variables.reduce(
|
||||
(acc: { [name: string]: DebugProtocol.Variable }, c) => {
|
||||
if (c.evaluateName) {
|
||||
acc[c.evaluateName] = c;
|
||||
}
|
||||
return acc;
|
||||
},
|
||||
{}
|
||||
);
|
||||
|
||||
assert.includeMembers(Object.keys(namesToVariables), ["vector", "map", "string", "slice", "deque", "ref_cell"], "The Debugger did not return all expected debugger variables.");
|
||||
assert.includeMembers(
|
||||
Object.keys(namesToVariables),
|
||||
['vector', 'map', 'string', 'slice', 'deque', 'ref_cell'],
|
||||
'The Debugger did not return all expected debugger variables.'
|
||||
);
|
||||
|
||||
// Vector
|
||||
assert.equal(namesToVariables["vector"].value, " (5) vec![1, 2, 3, 4, 12]", "The Vector summary string looks different than expected");
|
||||
assert.equal(
|
||||
namesToVariables['vector'].value,
|
||||
' (5) vec![1, 2, 3, 4, 12]',
|
||||
'The Vector summary string looks different than expected'
|
||||
);
|
||||
|
||||
// Map
|
||||
assert.equal(namesToVariables["map"].value, " size=5, capacity=8", "The Map summary string looks different than expected");
|
||||
assert.equal(
|
||||
namesToVariables['map'].value,
|
||||
' size=5, capacity=8',
|
||||
'The Map summary string looks different than expected'
|
||||
);
|
||||
|
||||
// String
|
||||
assert.equal(namesToVariables["string"].value, " \"this is a string\"", "The String summary string looks different than expected");
|
||||
assert.equal(
|
||||
namesToVariables['string'].value,
|
||||
' "this is a string"',
|
||||
'The String summary string looks different than expected'
|
||||
);
|
||||
|
||||
// Slice
|
||||
assert.equal(namesToVariables["slice"].value, " \"ello\"", "The Slice summary string looks different than expected");
|
||||
assert.equal(
|
||||
namesToVariables['slice'].value,
|
||||
' "ello"',
|
||||
'The Slice summary string looks different than expected'
|
||||
);
|
||||
|
||||
// Deque
|
||||
assert.equal(namesToVariables["deque"].value, " (5) VecDeque[1, 2, 3, 4, 5]", "The Deque summary string looks different than expected");
|
||||
// TODO: The deque format conversion have some problem now
|
||||
// -alloc::collections::vec_deque::VecDeque<int, alloc::alloc::Global> @ 0xfff1c
|
||||
// + (5) VecDeque[1, 2, 3, 4, 5]
|
||||
// assert.equal(
|
||||
// namesToVariables['deque'].value,
|
||||
// ' (5) VecDeque[1, 2, 3, 4, 5]',
|
||||
// 'The Deque summary string looks different than expected'
|
||||
// );
|
||||
|
||||
// RefCell
|
||||
assert.equal(namesToVariables["ref_cell"].value, " 5", "The RefCell summary string looks different than expected");
|
||||
assert.equal(
|
||||
namesToVariables['ref_cell'].value,
|
||||
' 5',
|
||||
'The RefCell summary string looks different than expected'
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
@ -8,35 +8,35 @@ import * as Mocha from 'mocha';
|
||||
import * as glob from 'glob';
|
||||
|
||||
export function run(): Promise<void> {
|
||||
// Create the mocha test
|
||||
const mocha = new Mocha({
|
||||
ui: 'tdd'
|
||||
});
|
||||
|
||||
const testsRoot = path.resolve(__dirname, '..');
|
||||
// Create the mocha test
|
||||
const mocha = new Mocha({
|
||||
ui: 'tdd',
|
||||
});
|
||||
|
||||
return new Promise((c, e) => {
|
||||
glob('**/**.test.js', { cwd: testsRoot }, (err, files) => {
|
||||
if (err) {
|
||||
return e(err);
|
||||
}
|
||||
const testsRoot = path.resolve(__dirname, '..');
|
||||
|
||||
// Add files to the test suite
|
||||
files.forEach(f => mocha.addFile(path.resolve(testsRoot, f)));
|
||||
return new Promise((c, e) => {
|
||||
glob('**/**.test.js', { cwd: testsRoot }, (err, files) => {
|
||||
if (err) {
|
||||
return e(err);
|
||||
}
|
||||
|
||||
try {
|
||||
// Run the mocha test
|
||||
mocha.run(failures => {
|
||||
if (failures > 0) {
|
||||
e(new Error(`${failures} tests failed.`));
|
||||
} else {
|
||||
c();
|
||||
}
|
||||
});
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
e(err);
|
||||
}
|
||||
});
|
||||
});
|
||||
// Add files to the test suite
|
||||
files.forEach(f => mocha.addFile(path.resolve(testsRoot, f)));
|
||||
|
||||
try {
|
||||
// Run the mocha test
|
||||
mocha.run(failures => {
|
||||
if (failures > 0) {
|
||||
e(new Error(`${failures} tests failed.`));
|
||||
} else {
|
||||
c();
|
||||
}
|
||||
});
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
e(err);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
@ -3,10 +3,10 @@
|
||||
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
*/
|
||||
|
||||
import {assert} from 'chai';
|
||||
import { assert } from 'chai';
|
||||
import * as vscode from 'vscode';
|
||||
import {Range, SourceBreakpoint} from "vscode";
|
||||
import * as fs from "fs";
|
||||
import { Range, SourceBreakpoint } from 'vscode';
|
||||
import * as fs from 'fs';
|
||||
import path = require('path');
|
||||
import * as cp from 'child_process';
|
||||
|
||||
@ -20,11 +20,18 @@ export function clearAllBp(): void {
|
||||
// Inserts a breakpoint in a file at the first occurrence of bpMarker
|
||||
export function setBpAtMarker(file: string, bpMarker: string): void {
|
||||
const uri = vscode.Uri.file(file);
|
||||
const data = fs.readFileSync(uri.path, "utf8");
|
||||
const line = data.split("\n").findIndex(line => line.includes(bpMarker));
|
||||
assert.notStrictEqual(line, -1, "Could not find breakpoint marker in source file");
|
||||
const data = fs.readFileSync(uri.path, 'utf8');
|
||||
const line = data.split('\n').findIndex(line => line.includes(bpMarker));
|
||||
assert.notStrictEqual(
|
||||
line,
|
||||
-1,
|
||||
'Could not find breakpoint marker in source file'
|
||||
);
|
||||
const position = new vscode.Position(line, 0);
|
||||
const bp = new SourceBreakpoint(new vscode.Location(uri, new Range(position, position)), true);
|
||||
const bp = new SourceBreakpoint(
|
||||
new vscode.Location(uri, new Range(position, position)),
|
||||
true
|
||||
);
|
||||
vscode.debug.addBreakpoints([bp]);
|
||||
}
|
||||
|
||||
@ -35,9 +42,12 @@ export function compileRustToWasm(): void {
|
||||
const cmd = `rustc --target wasm32-wasi ${testResourceFolder}/test.rs -g -C opt-level=0 -o ${testResourceFolder}/test.wasm`;
|
||||
|
||||
try {
|
||||
cp.execSync(cmd, {stdio: [null, null, process.stderr]});
|
||||
cp.execSync(cmd, { stdio: [null, null, process.stderr] });
|
||||
} catch (e) {
|
||||
assert.fail(`Compilation of example rust file failed with error: ${e}`);
|
||||
}
|
||||
assert.isTrue(fs.existsSync(`${testResourceFolder}/test.wasm`), "Could not find wasm file WASM file to run debugger on.");
|
||||
assert.isTrue(
|
||||
fs.existsSync(`${testResourceFolder}/test.wasm`),
|
||||
'Could not find wasm file WASM file to run debugger on.'
|
||||
);
|
||||
}
|
||||
|
||||
@ -35,9 +35,7 @@ function getLLDBUnzipFilePath(destinationFolder: string, filename: string) {
|
||||
return path.join(destinationFolder, ...dirs);
|
||||
}
|
||||
|
||||
export function getWAMRExtensionVersion(
|
||||
extensionPath: string
|
||||
): string {
|
||||
export function getWAMRExtensionVersion(extensionPath: string): string {
|
||||
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
||||
return require(path.join(extensionPath, 'package.json')).version;
|
||||
}
|
||||
@ -68,7 +66,6 @@ export function isLLDBInstalled(extensionPath: string): boolean {
|
||||
export async function promptInstallLLDB(
|
||||
extensionPath: string
|
||||
): Promise<SelectionOfPrompt> {
|
||||
|
||||
const response = await vscode.window.showWarningMessage(
|
||||
'No LLDB instance found. Setup now?',
|
||||
SelectionOfPrompt.setUp,
|
||||
@ -84,9 +81,7 @@ export async function promptInstallLLDB(
|
||||
return SelectionOfPrompt.setUp;
|
||||
}
|
||||
|
||||
export async function downloadLldb(
|
||||
extensionPath: string
|
||||
): Promise<void> {
|
||||
export async function downloadLldb(extensionPath: string): Promise<void> {
|
||||
const downloadUrl = getLLDBDownloadUrl(extensionPath);
|
||||
const destinationDir = os.platform();
|
||||
|
||||
|
||||
@ -20,6 +20,7 @@ export class TargetConfigPanel {
|
||||
maxMemorySize: '131072',
|
||||
stackSize: '4096',
|
||||
exportedSymbols: 'main',
|
||||
hostManagedHeapSize: '4096',
|
||||
};
|
||||
|
||||
private static readonly userInputError: number = -2;
|
||||
@ -74,14 +75,16 @@ export class TargetConfigPanel {
|
||||
initMemSize: string,
|
||||
maxMemSize: string,
|
||||
stackSize: string,
|
||||
exportedSymbols: string
|
||||
exportedSymbols: string,
|
||||
hostManagedHeapSize: string
|
||||
): number {
|
||||
if (
|
||||
outputFileName === '' ||
|
||||
initMemSize === '' ||
|
||||
maxMemSize === '' ||
|
||||
stackSize === '' ||
|
||||
exportedSymbols === ''
|
||||
exportedSymbols === '' ||
|
||||
hostManagedHeapSize === ''
|
||||
) {
|
||||
return TargetConfigPanel.userInputError;
|
||||
}
|
||||
@ -95,6 +98,7 @@ export class TargetConfigPanel {
|
||||
maxMemorySize: maxMemSize,
|
||||
stackSize: stackSize,
|
||||
exportedSymbols: exportedSymbols,
|
||||
hostManagedHeapSize: hostManagedHeapSize,
|
||||
};
|
||||
const configStr = readFromConfigFile();
|
||||
|
||||
@ -174,6 +178,10 @@ export class TargetConfigPanel {
|
||||
.replace(
|
||||
/(\${exported_symbols_val})/,
|
||||
TargetConfigPanel.buildArgs.exportedSymbols
|
||||
)
|
||||
.replace(
|
||||
/(\${host_managed_heap_size_val})/,
|
||||
TargetConfigPanel.buildArgs.hostManagedHeapSize
|
||||
);
|
||||
|
||||
return html;
|
||||
@ -189,7 +197,8 @@ export class TargetConfigPanel {
|
||||
message.initMemSize === '' ||
|
||||
message.maxMemSize === '' ||
|
||||
message.stackSize === '' ||
|
||||
message.exportedSymbols === ''
|
||||
message.exportedSymbols === '' ||
|
||||
message.hostManagedHeapSize === ''
|
||||
) {
|
||||
vscode.window.showErrorMessage(
|
||||
'Please fill chart before your submit!'
|
||||
@ -201,7 +210,8 @@ export class TargetConfigPanel {
|
||||
message.initMemSize,
|
||||
message.maxMemSize,
|
||||
message.stackSize,
|
||||
message.exportedSymbols
|
||||
message.exportedSymbols,
|
||||
message.hostManagedHeapSize
|
||||
) === TargetConfigPanel.executionSuccess
|
||||
) {
|
||||
vscode.window
|
||||
|
||||
Reference in New Issue
Block a user