added launch the debugger from VS Code
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Thu, 11 Aug 2022 11:30:25 +0000 (06:30 -0500)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Thu, 11 Aug 2022 11:30:25 +0000 (06:30 -0500)
misc/vscode/onyx-0.0.3.vsix
misc/vscode/out/ovmDebug.js
misc/vscode/ovmDebug.ts
misc/vscode/package.json

index 45cca5df8f6aad1e57a5ad198cfa0300db534f2b..958ce8d2b8263eb07c3312267360da7e16be8413 100644 (file)
Binary files a/misc/vscode/onyx-0.0.3.vsix and b/misc/vscode/onyx-0.0.3.vsix differ
index edd0972654c229550ba96b1f56bd6abdebc0ea68..08e088e2e747ecc7dc91ade335930ca96f6e9482 100644 (file)
@@ -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) {
index 7877ac586fe161b5a7009533adf90f68653243ed..f5020a4e987b66b9d31353f0ccd4fc97720aa62a 100644 (file)
@@ -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});
     }
 
index c841d322d2b11446cc205a44e410a67afa986ad8..8ad40eaa518f62ec6de7adbf0fa2a8ace701f886 100644 (file)
                                 "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": [
                         "type": "onyx",
                         "request": "attach",
                         "stopOnEntry": true
+                    },
+                    {
+                        "type": "onyx",
+                        "request": "launch",
+                        "wasmFile": "out.wasm",
+                        "workingDir": "${workspaceFolder}",
+                        "stopOnEntry": true
                     }
                 ]
             }