From: Brendan Hansen Date: Thu, 11 Aug 2022 11:30:25 +0000 (-0500) Subject: added launch the debugger from VS Code X-Git-Url: https://git.brendanfh.com/?a=commitdiff_plain;h=8daf2d07b46f0f9d077c51d8f5adc0653c67231f;p=onyx.git added launch the debugger from VS Code --- diff --git a/misc/vscode/onyx-0.0.3.vsix b/misc/vscode/onyx-0.0.3.vsix index 45cca5df..958ce8d2 100644 Binary files a/misc/vscode/onyx-0.0.3.vsix and b/misc/vscode/onyx-0.0.3.vsix differ diff --git a/misc/vscode/out/ovmDebug.js b/misc/vscode/out/ovmDebug.js index edd09726..08e088e2 100644 --- a/misc/vscode/out/ovmDebug.js +++ b/misc/vscode/out/ovmDebug.js @@ -14,6 +14,7 @@ const debugadapter_1 = require("@vscode/debugadapter"); const EventEmitter = require("node:events"); const await_notify_1 = require("await-notify"); const net = require("node:net"); +const child_process = require("node:child_process"); class OVMDebugSession extends debugadapter_1.LoggingDebugSession { constructor() { super("ovm-debug-log.txt"); @@ -103,6 +104,13 @@ class OVMDebugSession extends debugadapter_1.LoggingDebugSession { } disconnectRequest(response, args, request) { 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); } cancelRequest(response, args, request) { this.sendResponse(response); @@ -165,8 +173,13 @@ class OVMDebugSession extends debugadapter_1.LoggingDebugSession { this.sendResponse(response); } launchRequest(response, args, request) { - console.log("LAUNCH"); - // console.error(`Unable to launch a new Onyx debugging session. Please use { "request": "attach" } instead.`); + 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 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 } ] }