From dafa5f5d01fea0983efbb50b795aa6aa2de1c405 Mon Sep 17 00:00:00 2001 From: yann300 Date: Tue, 14 Aug 2018 10:29:36 +0200 Subject: [PATCH] fix debugging --- package.json | 4 +-- src/app/debugger/debugger.js | 19 +++++----- .../remix-debugger/src/ui/CalldataPanel.js | 10 +++--- .../remix-debugger/src/ui/EthdebuggerUI.js | 36 +++++++++---------- .../remix-debugger/src/ui/SolidityState.js | 3 +- .../remix-debugger/src/ui/StepDetail.js | 11 +++--- .../remix-debugger/src/ui/StepManager.js | 4 +-- .../remix-debugger/src/ui/StoragePanel.js | 4 +-- .../remix-debugger/src/ui/VmDebugger.js | 16 ++++----- 9 files changed, 54 insertions(+), 53 deletions(-) diff --git a/package.json b/package.json index cc38bf6842..00a453a088 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "npm-run-all": "^4.0.2", "onchange": "^3.2.1", "remix-analyzer": "latest", - "remix-lib": "../remix/remix-lib", + "remix-lib": "./remix/remix-lib", "remix-solidity": "latest", "remix-tests": "latest", "remixd": "git+https://github.com/ethereum/remixd.git", @@ -58,7 +58,7 @@ }, "dependencies": { "http-server": "0.9.0", - "remix-debug": "../remix/remix-debug", + "remix-debug": "./remix/remix-debug", "remixd": "git+https://github.com/ethereum/remixd.git" }, "repository": { diff --git a/src/app/debugger/debugger.js b/src/app/debugger/debugger.js index 296fc0c9f3..ea1d0d9727 100644 --- a/src/app/debugger/debugger.js +++ b/src/app/debugger/debugger.js @@ -75,15 +75,18 @@ function Debugger (container, sourceHighlighter, localRegistry) { }) // register selected code item, highlight the corresponding source location - this.debugger.codeManager.event.register('changed', this, function (code, address, index) { + this.debugger_ui.event.register('indexChanged', function (index) { if (self._deps.compiler.lastCompilationResult) { - self.debugger.callTree.sourceLocationTracker.getSourceLocationFromInstructionIndex(address, index, self._deps.compiler.lastCompilationResult.data.contracts, function (error, rawLocation) { - if (!error && self._deps.compiler.lastCompilationResult && self._deps.compiler.lastCompilationResult.data) { - var lineColumnPos = self._deps.offsetToLineColumnConverter.offsetToLineColumn(rawLocation, rawLocation.file, self._deps.compiler.lastCompilationResult.source.sources) - self._components.sourceHighlighter.currentSourceLocation(lineColumnPos, rawLocation) - } else { - self._components.sourceHighlighter.currentSourceLocation(null) - } + self.debugger.traceManager.getCurrentCalledAddressAt(index, (error, address) => { + if (error) return console.log(error) + self.debugger.callTree.sourceLocationTracker.getSourceLocationFromInstructionIndex(address, index, self._deps.compiler.lastCompilationResult.data.contracts, function (error, rawLocation) { + if (!error && self._deps.compiler.lastCompilationResult && self._deps.compiler.lastCompilationResult.data) { + var lineColumnPos = self._deps.offsetToLineColumnConverter.offsetToLineColumn(rawLocation, rawLocation.file, self._deps.compiler.lastCompilationResult.source.sources) + self._components.sourceHighlighter.currentSourceLocation(lineColumnPos, rawLocation) + } else { + self._components.sourceHighlighter.currentSourceLocation(null) + } + }) }) } }) diff --git a/src/app/debugger/remix-debugger/src/ui/CalldataPanel.js b/src/app/debugger/remix-debugger/src/ui/CalldataPanel.js index e2fef57b74..6207b078cb 100644 --- a/src/app/debugger/remix-debugger/src/ui/CalldataPanel.js +++ b/src/app/debugger/remix-debugger/src/ui/CalldataPanel.js @@ -2,8 +2,8 @@ var DropdownPanel = require('./DropdownPanel') var yo = require('yo-yo') -function CalldataPanel (_parent, _traceManager) { - this.parent = _parent +function CalldataPanel (_parentUI, _traceManager) { + this._parentUI = _parentUI this.traceManager = _traceManager this.basicPanel = new DropdownPanel('Call Data', {json: true}) this.init() @@ -15,15 +15,15 @@ CalldataPanel.prototype.render = function () { CalldataPanel.prototype.init = function () { var self = this - this.parent.event.register('indexChanged', this, function (index) { + this._parentUI.event.register('indexChanged', this, function (index) { if (index < 0) return - if (self.parent.currentStepIndex !== index) return + if (self._parentUI.currentStepIndex !== index) return self.traceManager.getCallDataAt(index, function (error, calldata) { if (error) { self.basicPanel.update({}) console.log(error) - } else if (self.parent.currentStepIndex === index) { + } else if (self._parentUI.currentStepIndex === index) { self.basicPanel.update(calldata) } }) diff --git a/src/app/debugger/remix-debugger/src/ui/EthdebuggerUI.js b/src/app/debugger/remix-debugger/src/ui/EthdebuggerUI.js index f6461b03f6..f4e448aee6 100644 --- a/src/app/debugger/remix-debugger/src/ui/EthdebuggerUI.js +++ b/src/app/debugger/remix-debugger/src/ui/EthdebuggerUI.js @@ -69,18 +69,7 @@ function EthdebuggerUI (opts) { this.txBrowser.event.register('unloadRequested', this, function (blockNumber, txIndex, tx) { self.unLoad() }) - this.stepManager = new StepManager(this, this.debugger.traceManager) - this.stepManager.event.register('stepChanged', this, function (stepIndex) { - self.stepChanged(stepIndex) - }) - this.debugger.codeManager.event.register('changed', this, (code, address, instIndex) => { - self.debugger.callTree.sourceLocationTracker.getSourceLocationFromVMTraceIndex(address, this.currentStepIndex, this.debugger.solidityProxy.contracts, (error, sourceLocation) => { - if (!error) { - self.event.trigger('sourceLocationChanged', [sourceLocation]) - } - }) - }) } EthdebuggerUI.prototype.setManagers = function () { @@ -186,11 +175,11 @@ EthdebuggerUI.prototype.debug = function (tx) { } EthdebuggerUI.prototype.render = function () { - var view = yo`
-
+ this.browserView = yo`
${this.txBrowser.render()} - ${this.stepManager.render()} -
+
` + var view = yo`
+ ${this.browserView}
${this.statusMessage}
` if (!this.view) { @@ -220,8 +209,6 @@ EthdebuggerUI.prototype.startDebugging = function (blockNumber, txIndex, tx) { return } - this.statusMessage = 'Loading trace...' - yo.update(this.view, this.render()) console.log('loading trace...') this.tx = tx //this.tx.hash = txIndex @@ -232,8 +219,21 @@ EthdebuggerUI.prototype.startDebugging = function (blockNumber, txIndex, tx) { //this.debugger.addProvider('web3', executionContext.web3()) //this.debugger.switchProvider('web3') - this.vmDebugger = new VmDebugger(this, this.debugger.traceManager, this.debugger.codeManager, this.debugger.solidityProxy, this.debugger.callTree) + this.stepManager = new StepManager(this, this.debugger.traceManager) + this.stepManager.event.register('stepChanged', this, function (stepIndex) { + self.stepChanged(stepIndex) + }) + this.debugger.codeManager.event.register('changed', this, (code, address, instIndex) => { + self.debugger.callTree.sourceLocationTracker.getSourceLocationFromVMTraceIndex(address, this.currentStepIndex, this.debugger.solidityProxy.contracts, (error, sourceLocation) => { + if (!error) { + self.event.trigger('sourceLocationChanged', [sourceLocation]) + } + }) + }) + + this.vmDebugger = new VmDebugger(this, this.debugger.traceManager, this.debugger.codeManager, this.debugger.solidityProxy, this.debugger.callTree) + this.browserView.appendChild(this.stepManager.render()) this.view.appendChild(this.vmDebugger.render()) this.debugger.debug(tx) diff --git a/src/app/debugger/remix-debugger/src/ui/SolidityState.js b/src/app/debugger/remix-debugger/src/ui/SolidityState.js index 282d553bee..2f9ec08d6c 100644 --- a/src/app/debugger/remix-debugger/src/ui/SolidityState.js +++ b/src/app/debugger/remix-debugger/src/ui/SolidityState.js @@ -3,8 +3,7 @@ var DropdownPanel = require('./DropdownPanel') var remixDebug = require('remix-debug') var stateDecoder = remixDebug.SolidityDecoder.stateDecoder var solidityTypeFormatter = require('./SolidityTypeFormatter') -var remixLib = require('remix-lib') -var StorageViewer = remixLib.Storage.StorageViewer +var StorageViewer = remixDebug.storage.StorageViewer var yo = require('yo-yo') function SolidityState (_parent, _traceManager, _codeManager, _solidityProxy) { diff --git a/src/app/debugger/remix-debugger/src/ui/StepDetail.js b/src/app/debugger/remix-debugger/src/ui/StepDetail.js index 7e19f0d941..a14b9e192d 100644 --- a/src/app/debugger/remix-debugger/src/ui/StepDetail.js +++ b/src/app/debugger/remix-debugger/src/ui/StepDetail.js @@ -2,8 +2,9 @@ var yo = require('yo-yo') var DropdownPanel = require('./DropdownPanel') -function StepDetail (_parent, _traceManager) { - this.parent = _parent +function StepDetail (_parentUI, _traceManager) { + this.debugger = _parentUI.debugger + this.parentUI = _parentUI this.traceManager = _traceManager this.basicPanel = new DropdownPanel('Step detail', {json: true, displayContentOnly: true}) @@ -19,17 +20,17 @@ StepDetail.prototype.render = function () { StepDetail.prototype.init = function () { var self = this - this.parent.event.register('traceUnloaded', this, function () { + this.debugger.event.register('traceUnloaded', this, function () { self.detail = initDetail() self.basicPanel.update(self.detail) }) - this.parent.event.register('newTraceLoaded', this, function () { + this.debugger.event.register('newTraceLoaded', this, function () { self.detail = initDetail() self.basicPanel.update(self.detail) }) - this.parent.event.register('indexChanged', this, function (index) { + this.parentUI.event.register('indexChanged', this, function (index) { if (index < 0) return self.detail['vm trace step'] = index diff --git a/src/app/debugger/remix-debugger/src/ui/StepManager.js b/src/app/debugger/remix-debugger/src/ui/StepManager.js index 9f65feade2..da2ec20b2a 100644 --- a/src/app/debugger/remix-debugger/src/ui/StepManager.js +++ b/src/app/debugger/remix-debugger/src/ui/StepManager.js @@ -80,12 +80,10 @@ StepManager.prototype.resolveToReducedTrace = function (value, incr) { } StepManager.prototype.render = function () { - return ( - yo`
+ return yo`
${this.slider.render()} ${this.buttonNavigator.render()}
` - ) } StepManager.prototype.reset = function () { diff --git a/src/app/debugger/remix-debugger/src/ui/StoragePanel.js b/src/app/debugger/remix-debugger/src/ui/StoragePanel.js index fca196aee6..3fdb8218c5 100644 --- a/src/app/debugger/remix-debugger/src/ui/StoragePanel.js +++ b/src/app/debugger/remix-debugger/src/ui/StoragePanel.js @@ -1,7 +1,7 @@ 'use strict' var DropdownPanel = require('./DropdownPanel') -var remixLib = require('remix-lib') -var StorageViewer = remixLib.Storage.StorageViewer +var remixDebug = require('remix-debug') +var StorageViewer = remixDebug.storage.StorageViewer var yo = require('yo-yo') function StoragePanel (_parent, _traceManager) { diff --git a/src/app/debugger/remix-debugger/src/ui/VmDebugger.js b/src/app/debugger/remix-debugger/src/ui/VmDebugger.js index 1e73e5ea92..9b7e233f1e 100644 --- a/src/app/debugger/remix-debugger/src/ui/VmDebugger.js +++ b/src/app/debugger/remix-debugger/src/ui/VmDebugger.js @@ -29,14 +29,14 @@ function VmDebugger (_parentUI, _traceManager, _codeManager, _solidityProxy, _ca let _parent = _parentUI.debugger this.asmCode = new CodeListView(_parent, _codeManager) - this.stackPanel = new StackPanel(_parent, _traceManager) - this.storagePanel = new StoragePanel(_parent, _traceManager) - this.memoryPanel = new MemoryPanel(_parent, _traceManager) - this.calldataPanel = new CalldataPanel(_parent, _traceManager) - this.callstackPanel = new CallstackPanel(_parent, _traceManager) - this.stepDetail = new StepDetail(_parent, _traceManager) - this.solidityState = new SolidityState(_parent, _traceManager, _codeManager, _solidityProxy) - this.solidityLocals = new SolidityLocals(_parent, _traceManager, _callTree) + this.stackPanel = new StackPanel(_parentUI, _traceManager) + this.storagePanel = new StoragePanel(_parentUI, _traceManager) + this.memoryPanel = new MemoryPanel(_parentUI, _traceManager) + this.calldataPanel = new CalldataPanel(_parentUI, _traceManager) + this.callstackPanel = new CallstackPanel(_parentUI, _traceManager) + this.stepDetail = new StepDetail(_parentUI, _traceManager) + this.solidityState = new SolidityState(_parentUI, _traceManager, _codeManager, _solidityProxy) + this.solidityLocals = new SolidityLocals(_parentUI, _traceManager, _callTree) /* Return values - */ this.returnValuesPanel = new DropdownPanel('Return Value', {json: true})