From 8daf2d07b46f0f9d077c51d8f5adc0653c67231f Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Thu, 11 Aug 2022 06:30:25 -0500 Subject: [PATCH] added launch the debugger from VS Code --- misc/vscode/onyx-0.0.3.vsix | Bin 701286 -> 701719 bytes misc/vscode/out/ovmDebug.js | 17 +++++++++++++++-- misc/vscode/ovmDebug.ts | 33 ++++++++++++++++++++++++++++++--- misc/vscode/package.json | 26 ++++++++++++++++++++++++++ 4 files changed, 71 insertions(+), 5 deletions(-) diff --git a/misc/vscode/onyx-0.0.3.vsix b/misc/vscode/onyx-0.0.3.vsix index 45cca5df8f6aad1e57a5ad198cfa0300db534f2b..958ce8d2b8263eb07c3312267360da7e16be8413 100644 GIT binary patch delta 15913 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 { + this.sendEvent(new debugadapter_1.OutputEvent(chunk, "console")); + }); this.attachRequest(response, { "socketPath": "/tmp/ovm-debug.0000", "stopOnEntry": true }); } attachRequest(response, args, request) { diff --git a/misc/vscode/ovmDebug.ts b/misc/vscode/ovmDebug.ts index 7877ac58..f5020a4e 100644 --- a/misc/vscode/ovmDebug.ts +++ b/misc/vscode/ovmDebug.ts @@ -10,6 +10,9 @@ import EventEmitter = require('node:events'); import { Subject } from "await-notify"; import * as net from "node:net"; +import * as child_process from "node:child_process"; +import { ChildProcess } from 'node:child_process'; +import { Message } from '@vscode/debugadapter/lib/messages'; interface IOVMAttachRequestArguments extends DebugProtocol.AttachRequestArguments { @@ -17,9 +20,16 @@ interface IOVMAttachRequestArguments extends DebugProtocol.AttachRequestArgument stopOnEntry?: boolean; } +interface IOVMLaunchRequestArguments extends DebugProtocol.AttachRequestArguments { + wasmFile: string; + workingDir: string; + stopOnEntry?: boolean; +} + export class OVMDebugSession extends LoggingDebugSession { private debugger: OVMDebugger; + private running_process: ChildProcess; private _configurationDone: Subject = new Subject(); private _clientConnectedNotifier: Subject = new Subject(); @@ -141,6 +151,16 @@ export class OVMDebugSession extends LoggingDebugSession { protected disconnectRequest(response: DebugProtocol.DisconnectResponse, args: DebugProtocol.DisconnectArguments, request?: DebugProtocol.Request): void { console.log(`disconnectRequest suspend: ${args.suspendDebuggee}, terminate: ${args.terminateDebuggee}`); + + if (args.terminateDebuggee) { + console.log("TERMINATE"); + + if (this.running_process) { + this.running_process.kill('SIGTERM'); + } + } + + this.sendResponse(response); } protected cancelRequest(response: DebugProtocol.CancelResponse, args: DebugProtocol.CancelArguments, request?: DebugProtocol.Request): void { @@ -222,9 +242,16 @@ export class OVMDebugSession extends LoggingDebugSession { this.sendResponse(response); } - protected launchRequest(response: DebugProtocol.LaunchResponse, args: DebugProtocol.LaunchRequestArguments, request?: DebugProtocol.Request): void { - console.log("LAUNCH"); - // console.error(`Unable to launch a new Onyx debugging session. Please use { "request": "attach" } instead.`); + protected launchRequest(response: DebugProtocol.LaunchResponse, args: IOVMLaunchRequestArguments, request?: DebugProtocol.Request): void { + this.running_process = child_process.spawn("onyx-run", ["--debug", args.wasmFile], { + "cwd": args.workingDir, + }); + + this.running_process.stdout.setEncoding("utf-8"); + this.running_process.stdout.on("data", (chunk) => { + this.sendEvent(new OutputEvent(chunk, "console")); + }); + this.attachRequest(response, {"socketPath": "/tmp/ovm-debug.0000", "stopOnEntry": true}); } diff --git a/misc/vscode/package.json b/misc/vscode/package.json index c841d322..8ad40eaa 100644 --- a/misc/vscode/package.json +++ b/misc/vscode/package.json @@ -80,6 +80,25 @@ "default": true } } + }, + "launch": { + "properties": { + "wasmFile": { + "type": "string", + "description": "The WASM file for debugging, compiled with the --debug flag.", + "default": "out.wasm" + }, + "workingDir": { + "type": "string", + "description": "The working directory for the execution", + "default": "${workspaceFolder}" + }, + "stopOnEntry": { + "type": "boolean", + "description": "Automatically stop after launch.", + "default": true + } + } } }, "initialConfigurations": [ @@ -87,6 +106,13 @@ "type": "onyx", "request": "attach", "stopOnEntry": true + }, + { + "type": "onyx", + "request": "launch", + "wasmFile": "out.wasm", + "workingDir": "${workspaceFolder}", + "stopOnEntry": true } ] } -- 2.25.1