/
Sample Code - Plugin
Sample Code - Plugin
import * as vscode from 'vscode';
import { DelveDebugAdapterDescriptorFactory } from './delveDebugAdapterFactory';
export function activate(context: vscode.ExtensionContext) {
console.log('Hyperledger Chaincode Debugger is active.');
// Register the debug adapter factory
context.subscriptions.push(
vscode.debug.registerDebugAdapterDescriptorFactory('delve', new DelveDebugAdapterDescriptorFactory())
);
// Listen for debugging session events
vscode.debug.onDidStartDebugSession((session) => {
console.log(`Debugging started: ${session.name}`);
vscode.window.showInformationMessage(`Debugging started: ${session.name}`);
});
vscode.debug.onDidTerminateDebugSession((session) => {
console.log(`Debugging terminated: ${session.name}`);
vscode.window.showInformationMessage(`Debugging terminated: ${session.name}`);
});
}
export function deactivate() {
console.log('Hyperledger Chaincode Debugger is deactivated.');
}
import * as vscode from 'vscode';
import { spawn, ChildProcess } from 'child_process';
import * as path from 'path';
import { DelveDebugAdapter } from './delveDebugAdapter';
export class DelveDebugAdapterDescriptorFactory implements vscode.DebugAdapterDescriptorFactory {
private delveProcess: ChildProcess | undefined;
createDebugAdapterDescriptor(
session: vscode.DebugSession
): vscode.ProviderResult<vscode.DebugAdapterDescriptor> {
const config = session.configuration;
const program = config.program;
const port = config.port || 2345;
if (!program) {
vscode.window.showErrorMessage('No program specified to debug.');
return;
}
// Start Delve as a headless server
this.delveProcess = spawn('dlv', [
'debug',
'--headless',
`--listen=127.0.0.1:${port}`,
'--log',
'--api-version=2',
program
], {
cwd: path.dirname(program),
env: process.env
});
this.delveProcess.stdout.on('data', (data) => {
console.log(`Delve: ${data}`);
});
this.delveProcess.stderr.on('data', (data) => {
console.error(`Delve Error: ${data}`);
});
this.delveProcess.on('exit', (code) => {
console.log(`Delve exited with code ${code}`);
});
// Return a custom debug adapter to handle requests
return new DelveDebugAdapter(port, '127.0.0.1');
}
dispose() {
if (this.delveProcess) {
this.delveProcess.kill();
this.delveProcess = undefined;
}
}
}
import { DebugSession, InitializedEvent, StoppedEvent, TerminatedEvent } from '@vscode/debugadapter';
import { DebugProtocol } from '@vscode/debugprotocol';
import { Socket } from 'net';
export class DelveDebugAdapter extends DebugSession {
private socket: Socket;
constructor(port: number, host: string) {
super();
// Connect to the Delve server
this.socket = new Socket();
this.socket.connect(port, host, () => {
console.log('Connected to Delve server');
});
this.socket.on('data', (data) => {
console.log(`Received data from Delve: ${data}`);
});
this.socket.on('error', (err) => {
console.error(`Socket error: ${err.message}`);
});
this.socket.on('close', () => {
console.log('Connection to Delve server closed');
});
}
protected async dispatchRequest(request: DebugProtocol.Request): Promise<void> {
console.log(`Received request: ${request.command}`);
switch (request.command) {
case 'initialize':
console.log('Debugging session initialized');
break;
case 'next':
console.log('User clicked Step Over');
break;
case 'stepIn':
console.log('User clicked Step In');
break;
case 'stepOut':
console.log('User clicked Step Out');
break;
case 'continue':
console.log('User clicked Continue');
break;
case 'pause':
console.log('User clicked Pause');
break;
default:
console.log(`Unhandled command: ${request.command}`);
}
// Forward the request to Delve
this.socket.write(JSON.stringify(request));
await super.dispatchRequest(request);
}
dispose() {
this.socket.destroy();
}
}
, multiple selections available,
Related content
VS Code Debugger Plugin for Hyperledger Fabric Chaincode
VS Code Debugger Plugin for Hyperledger Fabric Chaincode
More like this
VS Code Plugin - Project Plan
VS Code Plugin - Project Plan
More like this
July 14 2024
July 14 2024
More like this
July 21 2024
July 21 2024
More like this
Project Plan
Project Plan
More like this
July 07 2024
July 07 2024
More like this