parent
afe0e596ee
commit
1f0e23b565
@ -0,0 +1,59 @@ |
|||||||
|
var CmdLine = require('./src/cmdline/index.js') |
||||||
|
|
||||||
|
var compilation = require('./compilation.json') |
||||||
|
|
||||||
|
var cmd_line = new CmdLine() |
||||||
|
cmd_line.connect("http", "http://localhost:8545") |
||||||
|
cmd_line.loadCompilationResult(compilation) |
||||||
|
cmd_line.initDebugger() |
||||||
|
|
||||||
|
var deployContract = function (cb) { |
||||||
|
let _web3 = cmd_line.debugger.debugger.web3 |
||||||
|
|
||||||
|
let blockNumber = null |
||||||
|
let txNumber = null |
||||||
|
let tx = null |
||||||
|
|
||||||
|
let code = compilation.data.contracts['browser/ballot.sol'].Ballot.evm.bytecode.object |
||||||
|
_web3.eth.sendTransaction({data: "0x" + code, from: _web3.eth.accounts[0], gas: 800000}, cb) |
||||||
|
} |
||||||
|
|
||||||
|
deployContract((err, tx) => { |
||||||
|
cmd_line.startDebug(tx, "browser/ballot.sol") |
||||||
|
}) |
||||||
|
|
||||||
|
const repl = require('repl') |
||||||
|
|
||||||
|
const r = repl.start({ |
||||||
|
prompt: '> ', |
||||||
|
eval: (cmd, context, filename, cb) => { |
||||||
|
let command = cmd.trim() |
||||||
|
if (command === 'next' || command === 'n') { |
||||||
|
cmd_line.debugger.step_manager.stepOverForward() |
||||||
|
} |
||||||
|
if (command === 'previous' || command === 'p' || command === 'prev') { |
||||||
|
cmd_line.debugger.step_manager.stepOverBack() |
||||||
|
} |
||||||
|
if (command === 'step' || command === 's') { |
||||||
|
cmd_line.debugger.step_manager.stepIntoForward() |
||||||
|
} |
||||||
|
if (command === 'stepback' || command === 'sb') { |
||||||
|
cmd_line.debugger.step_manager.stepIntoBack() |
||||||
|
} |
||||||
|
if (command === 'exit' || command === 'quit') { |
||||||
|
process.exit(0) |
||||||
|
} |
||||||
|
if (command === 'var local' || command === 'v l' || command === 'vl') { |
||||||
|
cmd_line.displayLocals() |
||||||
|
} |
||||||
|
if (command === 'var global' || command === 'v g' || command === 'vg') { |
||||||
|
cmd_line.displayGlobals() |
||||||
|
} |
||||||
|
if (command.split(' ')[0] === 'jump') { |
||||||
|
let stepIndex = parseInt(command.split(' ')[1], 10) |
||||||
|
cmd_line.debugger.step_manager.jumpTo(stepIndex) |
||||||
|
} |
||||||
|
cb(null, ''); |
||||||
|
} |
||||||
|
}); |
||||||
|
|
@ -0,0 +1,103 @@ |
|||||||
|
var Web3 = require('web3') |
||||||
|
var Debugger = require('../debugger/debugger.js') |
||||||
|
var ContextManager = require('./contextManager.js') |
||||||
|
|
||||||
|
class CmdLine { |
||||||
|
|
||||||
|
constructor () { |
||||||
|
} |
||||||
|
|
||||||
|
connect (providerType, url) { |
||||||
|
if (providerType !== 'http') throw new Error("unsupported provider type") |
||||||
|
this.web3 = new Web3(new Web3.providers.HttpProvider(url)) |
||||||
|
} |
||||||
|
|
||||||
|
loadCompilationResult (compilationResult) { |
||||||
|
this.compilation = {} |
||||||
|
this.compilation.lastCompilationResult = compilationResult |
||||||
|
} |
||||||
|
|
||||||
|
initDebugger () { |
||||||
|
const self = this |
||||||
|
this.contextManager = new ContextManager() |
||||||
|
|
||||||
|
this.debugger = new Debugger({ |
||||||
|
web3: this.contextManager.getWeb3(), |
||||||
|
compiler: this.compilation |
||||||
|
}) |
||||||
|
|
||||||
|
this.contextManager.event.register('providerChanged', () => { |
||||||
|
self.debugger.updateWeb3(self.contextManager.getWeb3()) |
||||||
|
}) |
||||||
|
|
||||||
|
this.contextManager.initProviders() |
||||||
|
|
||||||
|
this.contextManager.addProvider('debugger_web3', this.web3) |
||||||
|
this.contextManager.switchProvider('debugger_web3') |
||||||
|
} |
||||||
|
|
||||||
|
// TODO: is filename really necessary?
|
||||||
|
startDebug(txNumber, filename) { |
||||||
|
const self = this |
||||||
|
this.debugger.debug(null, txNumber, null, () => { |
||||||
|
|
||||||
|
self.debugger.event.register('newSourceLocation', function (lineColumnPos, rawLocation) { |
||||||
|
console.dir("newSourceLocation") |
||||||
|
|
||||||
|
if (!lineColumnPos || !lineColumnPos.start) return; |
||||||
|
|
||||||
|
let line |
||||||
|
line = self.compilation.lastCompilationResult.source.sources['browser/ballot.sol'].content.split("\n")[lineColumnPos.start.line - 1] |
||||||
|
console.dir(line) |
||||||
|
line = self.compilation.lastCompilationResult.source.sources['browser/ballot.sol'].content.split("\n")[lineColumnPos.start.line] |
||||||
|
console.dir(line) |
||||||
|
console.dir("^^^^^^^^^^^^^^^ ") |
||||||
|
line = self.compilation.lastCompilationResult.source.sources['browser/ballot.sol'].content.split("\n")[lineColumnPos.start.line + 1] |
||||||
|
console.dir(line) |
||||||
|
}); |
||||||
|
|
||||||
|
self.debugger.step_manager.event.register('stepChanged', (stepIndex) => { |
||||||
|
// console.dir("---------")
|
||||||
|
// console.dir("stepChanged: " + stepIndex)
|
||||||
|
// console.dir("---------")
|
||||||
|
}) |
||||||
|
|
||||||
|
self.debugger.step_manager.event.register('traceLengthChanged', (traceLength) => { |
||||||
|
// console.dir("---------")
|
||||||
|
// console.dir("traceLengthChanged: " + traceLength)
|
||||||
|
// console.dir("---------")
|
||||||
|
}); |
||||||
|
|
||||||
|
self.debugger.vmDebuggerLogic.event.register('solidityState', (data) => { |
||||||
|
self.solidityState = data |
||||||
|
}); |
||||||
|
|
||||||
|
self.debugger.vmDebuggerLogic.event.register('solidityLocals', (data) => { |
||||||
|
self.solidityLocals = data |
||||||
|
}); |
||||||
|
|
||||||
|
self.debugger.vmDebuggerLogic.event.register('traceManagerMemoryUpdate', (data) => { |
||||||
|
// console.dir("---------")
|
||||||
|
// console.dir("traceManagerMemoryUpdate")
|
||||||
|
// console.dir(data)
|
||||||
|
// console.dir("---------")
|
||||||
|
}); |
||||||
|
|
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
displayLocals () { |
||||||
|
console.dir(this.solidityLocals) |
||||||
|
} |
||||||
|
|
||||||
|
displayGlobals () { |
||||||
|
console.dir(this.solidityState) |
||||||
|
if (this.solidityState && this.solidityState.voters) { |
||||||
|
console.dir(this.solidityState.voters) |
||||||
|
console.dir(this.solidityState.voters.value) |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
module.exports = CmdLine |
||||||
|
|
@ -1,139 +0,0 @@ |
|||||||
|
|
||||||
// options
|
|
||||||
// * executionContext
|
|
||||||
// * offsetToLineColumnConverter
|
|
||||||
// *** disable for now
|
|
||||||
// * compiler
|
|
||||||
// ** lastCompilationResult
|
|
||||||
|
|
||||||
var remixLib = require('remix-lib') |
|
||||||
//var executionContext = remixLib.execution.executionContext
|
|
||||||
|
|
||||||
var Debugger = require('./src/debugger/debugger.js') |
|
||||||
|
|
||||||
var compilation = { |
|
||||||
} |
|
||||||
|
|
||||||
compilation.lastCompilationResult = require('./compilation.json') |
|
||||||
|
|
||||||
// connecting to a node
|
|
||||||
var Web3 = require('web3') |
|
||||||
web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545")) |
|
||||||
// global.my_web3 = web3
|
|
||||||
|
|
||||||
// with vm
|
|
||||||
var ContextManager = require('./contextManager.js') |
|
||||||
var contextManager = new ContextManager() |
|
||||||
|
|
||||||
_debugger = new Debugger({ |
|
||||||
//web3: web3,
|
|
||||||
web3: contextManager.getWeb3(), |
|
||||||
//executionContext: executionContext,
|
|
||||||
//offsetToLineColumnConverter: this.registry.get('offsettolinecolumnconverter').api,
|
|
||||||
compiler: compilation |
|
||||||
}) |
|
||||||
|
|
||||||
// with vm
|
|
||||||
contextManager.event.register('providerChanged', () => { |
|
||||||
_debugger.updateWeb3(contextManager.getWeb3()) |
|
||||||
}) |
|
||||||
|
|
||||||
contextManager.initProviders() |
|
||||||
|
|
||||||
contextManager.addProvider('myweb3', web3) |
|
||||||
contextManager.switchProvider('myweb3') |
|
||||||
|
|
||||||
//contextManager.switchProvider('vm')
|
|
||||||
|
|
||||||
_debugger.event.register('debuggerStatus', function (isActive) { |
|
||||||
console.dir("debugger status") |
|
||||||
console.dir(isActive) |
|
||||||
}); |
|
||||||
|
|
||||||
_debugger.event.register('newSourceLocation', function (lineColumnPos, rawLocation) { |
|
||||||
console.dir("newSourceLocation") |
|
||||||
|
|
||||||
if (!lineColumnPos || !lineColumnPos.start) return; |
|
||||||
|
|
||||||
let line |
|
||||||
//let line = compilation.lastCompilationResult.source.sources['browser/ballot.sol'].content.split("\n")[lineColumnPos.start.line].slice(lineColumnPos.start.column, lineColumnPos.start.column + lineColumnPos.end.column)
|
|
||||||
line = compilation.lastCompilationResult.source.sources['browser/ballot.sol'].content.split("\n")[lineColumnPos.start.line - 1] |
|
||||||
console.dir(line) |
|
||||||
line = compilation.lastCompilationResult.source.sources['browser/ballot.sol'].content.split("\n")[lineColumnPos.start.line] |
|
||||||
console.dir(line) |
|
||||||
console.dir("^^^^^^^^^^^^^^^ ") |
|
||||||
line = compilation.lastCompilationResult.source.sources['browser/ballot.sol'].content.split("\n")[lineColumnPos.start.line + 1] |
|
||||||
console.dir(line) |
|
||||||
}); |
|
||||||
|
|
||||||
_debugger.event.register('debuggerUnloaded', function() { |
|
||||||
console.dir("debugger unloaded") |
|
||||||
}); |
|
||||||
|
|
||||||
let _web3 = _debugger.debugger.web3 |
|
||||||
// let web3 = _debugger.debugger.executionContext.web3()
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
let blockNumber = null |
|
||||||
let txNumber = null |
|
||||||
let tx = null |
|
||||||
|
|
||||||
let code = compilation.lastCompilationResult.data.contracts['browser/ballot.sol'].Ballot.evm.bytecode.object |
|
||||||
_web3.eth.sendTransaction({data: "0x" + code, from: _web3.eth.accounts[0], gas: 800000}, (err, txHash) => { |
|
||||||
//console.dir(err)
|
|
||||||
//console.dir(txHash)
|
|
||||||
|
|
||||||
|
|
||||||
txNumber = txHash |
|
||||||
global.mytx = txHash |
|
||||||
|
|
||||||
_debugger.event.register('newSourceLocation', (lineColumnPos, rawLocation) => { |
|
||||||
console.dir("************ new source location *********") |
|
||||||
console.dir(lineColumnPos) |
|
||||||
console.dir(rawLocation) |
|
||||||
}) |
|
||||||
|
|
||||||
_debugger.debug(blockNumber, txNumber, tx, () => { |
|
||||||
|
|
||||||
_debugger.step_manager.event.register('stepChanged', (stepIndex) => { |
|
||||||
console.dir("---------") |
|
||||||
console.dir("stepChanged: " + stepIndex) |
|
||||||
console.dir("---------") |
|
||||||
}) |
|
||||||
|
|
||||||
_debugger.step_manager.event.register('traceLengthChanged', (traceLength) => { |
|
||||||
console.dir("---------") |
|
||||||
console.dir("traceLengthChanged: " + traceLength) |
|
||||||
console.dir("---------") |
|
||||||
}); |
|
||||||
|
|
||||||
_debugger.vmDebuggerLogic.event.register('codeManagerChanged', (code, address, index) => { |
|
||||||
console.dir("---------") |
|
||||||
console.dir("codeManagerChanged") |
|
||||||
console.dir("address: " + address) |
|
||||||
console.dir("asm code: " + code[index]) |
|
||||||
console.dir("---------") |
|
||||||
}); |
|
||||||
|
|
||||||
_debugger.vmDebuggerLogic.event.register('traceManagerMemoryUpdate', (data) => { |
|
||||||
console.dir("---------") |
|
||||||
console.dir("traceManagerMemoryUpdate") |
|
||||||
console.dir(data) |
|
||||||
console.dir("---------") |
|
||||||
}); |
|
||||||
|
|
||||||
console.dir('debugger started') |
|
||||||
}) |
|
||||||
|
|
||||||
}) |
|
||||||
|
|
||||||
//_debugger.debug(blockNumber, txNumber, tx, () => {
|
|
||||||
// console.dir('debugger started')
|
|
||||||
//})
|
|
||||||
|
|
||||||
//_debugger.debugger.web3.eth.accounts()
|
|
||||||
|
|
||||||
console.dir("done!") |
|
||||||
|
|
||||||
module.exports = _debugger |
|
Loading…
Reference in new issue