Unverified Commit 826de86b authored by yann300's avatar yann300 Committed by GitHub

Merge pull request #1979 from ethereum/debuggerView

Debugger view
parents 2c936e31 665491a0
...@@ -93,6 +93,7 @@ export class AbstractPanel { ...@@ -93,6 +93,7 @@ export class AbstractPanel {
const el = this.contents[name] const el = this.contents[name]
delete this.contents[name] delete this.contents[name]
if (el) el.parentElement.removeChild(el) if (el) el.parentElement.removeChild(el)
if (name === this.active) this.active = undefined
} }
/** /**
......
var TxBrowser = require('./debuggerUI/TxBrowser') var TxBrowser = require('./debuggerUI/TxBrowser')
var StepManagerUI = require('./debuggerUI/StepManager') var StepManagerUI = require('./debuggerUI/StepManager')
var VmDebugger = require('./debuggerUI/VmDebugger') var VmDebugger = require('./debuggerUI/VmDebugger')
var toaster = require('../ui/tooltip')
var Debugger = require('remix-debug').TransactionDebugger var Debugger = require('remix-debug').TransactionDebugger
...@@ -104,14 +105,12 @@ class DebuggerUI { ...@@ -104,14 +105,12 @@ class DebuggerUI {
startDebugging (blockNumber, txNumber, tx) { startDebugging (blockNumber, txNumber, tx) {
const self = this const self = this
if (this.debugger) delete this.debugger if (this.debugger) this.unLoad()
let compilers = this.registry.get('compilersartefacts').api let compilers = this.registry.get('compilersartefacts').api
let lastCompilationResult let lastCompilationResult
if (compilers['__last']) lastCompilationResult = compilers['__last'] if (compilers['__last']) lastCompilationResult = compilers['__last']
// TODO debugging with source highlight is disabled. see line 98
executionContext.detectNetwork((error, network) => { executionContext.detectNetwork((error, network) => {
let web3 let web3
if (error || !network) { if (error || !network) {
...@@ -128,11 +127,14 @@ class DebuggerUI { ...@@ -128,11 +127,14 @@ class DebuggerUI {
}) })
this.listenToEvents() this.listenToEvents()
this.debugger.debug(blockNumber, txNumber, tx, () => { this.debugger.debug(blockNumber, txNumber, tx, () => {
self.stepManager = new StepManagerUI(this.debugger.step_manager) self.stepManager = new StepManagerUI(this.debugger.step_manager)
self.vmDebugger = new VmDebugger(this.debugger.vmDebuggerLogic) self.vmDebugger = new VmDebugger(this.debugger.vmDebuggerLogic)
self.txBrowser.setState({ blockNumber, txNumber, debugging: true })
self.renderDebugger() self.renderDebugger()
}).catch((error) => {
toaster(error)
this.unLoad()
}) })
}) })
} }
...@@ -167,8 +169,10 @@ class DebuggerUI { ...@@ -167,8 +169,10 @@ class DebuggerUI {
yo.update(this.stepManagerView, yo`<div></div>`) yo.update(this.stepManagerView, yo`<div></div>`)
if (this.vmDebugger) this.vmDebugger.remove() if (this.vmDebugger) this.vmDebugger.remove()
if (this.stepManager) this.stepManager.remove() if (this.stepManager) this.stepManager.remove()
if (this.txBrowser) this.txBrowser.setState({debugging: false})
this.vmDebugger = null this.vmDebugger = null
this.stepManager = null this.stepManager = null
if (this.debugger) delete this.debugger
this.event.trigger('traceUnloaded') this.event.trigger('traceUnloaded')
} }
......
...@@ -40,52 +40,39 @@ var css = csjs` ...@@ -40,52 +40,39 @@ var css = csjs`
function TxBrowser () { function TxBrowser () {
this.event = new EventManager() this.event = new EventManager()
this.blockNumber this.state = {
this.txNumber txNumber: undefined,
this.view debugging: false
this.setDefaultValues()
}
TxBrowser.prototype.setDefaultValues = function () {
this.connectInfo = ''
if (this.view) {
yo.update(this.view, this.render())
} }
this.view
} }
TxBrowser.prototype.submit = function (tx) { TxBrowser.prototype.submit = function () {
this.event.trigger('requestDebug', [this.blockNumber, this.txNumber, tx]) if (this.state.debugging) {
} this.unload()
} else {
TxBrowser.prototype.update = function (error, tx) { this.event.trigger('requestDebug', [undefined, this.state.txNumber])
if (error) {
this.view.querySelector('#error').innerHTML = error
return
}
if (!tx) {
this.view.querySelector('#error').innerHTML = 'Cannot find transaction with reference. Block number: ' + this.blockNumber + '. Transaction index/hash: ' + this.txNumber
return
} }
yo.update(this.view, this.render())
this.view.querySelector('#error').innerHTML = ''
}
TxBrowser.prototype.updateBlockN = function (ev) {
this.blockNumber = ev.target.value
} }
TxBrowser.prototype.updateTxN = function (ev) { TxBrowser.prototype.updateTxN = function (ev) {
this.txNumber = ev.target.value this.state.txNumber = ev.target.value
} }
TxBrowser.prototype.load = function (txHash, tx) { TxBrowser.prototype.load = function (txHash, tx) {
this.txNumber = txHash this.state.txNumber = txHash
} }
TxBrowser.prototype.unload = function (txHash) { TxBrowser.prototype.unload = function () {
this.event.trigger('unloadRequested') this.event.trigger('unloadRequested')
this.setDefaultValues() }
TxBrowser.prototype.setState = function (state) {
this.state = {...this.state, ...state}
if (this.view) {
yo.update(this.view, this.render())
}
} }
TxBrowser.prototype.render = function () { TxBrowser.prototype.render = function () {
...@@ -93,17 +80,17 @@ TxBrowser.prototype.render = function () { ...@@ -93,17 +80,17 @@ TxBrowser.prototype.render = function () {
var view = yo`<div class="${css.container}"> var view = yo`<div class="${css.container}">
<div class="${css.txContainer}"> <div class="${css.txContainer}">
<div class="${css.txinputs} p-1 input-group"> <div class="${css.txinputs} p-1 input-group">
<input class="form-control" class="${css.txinput}" onkeyup=${function () { self.updateBlockN(arguments[0]) }} type='text' placeholder=${'Block number'} /> <input value="${this.state.txNumber || ''}" class="form-control ${css.txinput}" id='txinput' onkeyup=${function () { self.updateTxN(arguments[0]) }} type='text' placeholder=${'Transaction hash'} />
<input class="form-control" class="${css.txinput}" id='txinput' onkeyup=${function () { self.updateTxN(arguments[0]) }} type='text' placeholder=${'Transaction index or hash'} />
</div> </div>
<div class="${css.txbuttons} btn-group p-1"> <div class="${css.txbuttons} btn-group p-1">
<button class='btn btn-primary btn-sm' id='load' class='${css.txbutton}' title='start debugging' onclick=${function () { self.submit() }}>Start debugging</button> <button class='btn btn-primary btn-sm ${css.txbutton}' id='load' title='${this.state.debugging ? 'Stop' : 'Start'} debugging' onclick=${function () { self.submit() }}>${this.state.debugging ? 'Stop' : 'Start'} debugging</button>
<button class='btn btn-primary btn-sm' id='unload' class='${css.txbutton}' title='stop debugging' onclick=${function () { self.unload() }}>Stop</button>
</div> </div>
</div> </div>
<span id='error'></span> <span id='error'></span>
</div>` </div>`
if (this.state.debugging) {
view.querySelectorAll('input').forEach(element => { element.setAttribute('disabled', '') })
}
if (!this.view) { if (!this.view) {
this.view = view this.view = view
} }
......
...@@ -16,8 +16,10 @@ var DropdownPanel = require('./vmDebugger/DropdownPanel') ...@@ -16,8 +16,10 @@ var DropdownPanel = require('./vmDebugger/DropdownPanel')
var css = csjs` var css = csjs`
.asmCode { .asmCode {
width: 100%;
} }
.stepDetail { .stepDetail {
width: 100%;
} }
.vmheadView { .vmheadView {
margin-top:10px; margin-top:10px;
......
...@@ -121,7 +121,7 @@ DropdownPanel.prototype.render = function (overridestyle, node) { ...@@ -121,7 +121,7 @@ DropdownPanel.prototype.render = function (overridestyle, node) {
<div class='message' style='display:none'></div> <div class='message' style='display:none'></div>
</div>` </div>`
var view = yo` var view = yo`
<div class="border border-primary rounded p-1 m-1"> <div class="border rounded p-1 m-1 bg-light">
<style> <style>
@-moz-keyframes spin { @-moz-keyframes spin {
to { -moz-transform: rotate(359deg); } to { -moz-transform: rotate(359deg); }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment