split assemblyitemsbrowser

pull/7/head
yann300 9 years ago
parent 79ae4bf993
commit 5e7a26a36e
  1. 6
      src/asmCode.js
  2. 133
      src/assemblyItemsBrowser.js
  3. 41
      src/calldataPanel.js
  4. 41
      src/callstackPanel.js
  5. 6
      src/debugger.js
  6. 91
      src/memoryPanel.js
  7. 41
      src/stackPanel.js
  8. 9
      src/stepManager.js
  9. 59
      src/storagePanel.js

@ -45,7 +45,7 @@ module.exports = React.createClass({
},
componentWillReceiveProps: function (nextProps) {
console.log('asm' + JSON.stringify(nextProps))
console.log('new prop asmCode')
if (nextProps.currentStepIndex < 0) return
codeResolver.setWeb3(this.context.web3)
var self = this
@ -61,6 +61,10 @@ module.exports = React.createClass({
})
var self = this
codeResolver.resolveCode(address, currentStep, this.context.tx, function (address, code) {
if (window.ethDebuggerSelectedItem !== currentStep) {
console.log(currentStep + ' discarded. current is ' + window.ethDebuggerSelectedItem)
return
}
self.setState({
code: code,
address: address

@ -1,23 +1,22 @@
'use strict'
var React = require('react')
var BasicPanel = require('./basicPanel')
var Sticker = require('./sticker')
var style = require('./basicStyles')
var ASMCode = require('./asmCode')
var CalldataPanel = require('./calldataPanel')
var MemoryPanel = require('./memoryPanel')
var CallstackPanel = require('./callstackPanel')
var StackPanel = require('./stackPanel')
var StoragePanel = require('./storagePanel')
module.exports = React.createClass({
contextTypes: {
traceManager: React.PropTypes.object,
web3: React.PropTypes.object
traceManager: React.PropTypes.object
},
getInitialState: function () {
return {
currentAddress: null,
currentStack: null,
currentStorage: null,
currentMemory: null,
currentCallData: null
currentAddress: null
}
},
@ -44,23 +43,23 @@ module.exports = React.createClass({
</div>
</td>
<td>
<BasicPanel name='CallData' data={this.state.currentCallData} />
<CalldataPanel currentStepIndex={this.props.currentStepIndex} />
</td>
</tr>
<tr>
<td>
<BasicPanel name='Stack' data={this.state.currentStack} />
<StackPanel currentStepIndex={this.props.currentStepIndex} />
</td>
<td>
<BasicPanel name='CallStack' data={this.state.currentCallStack} />
<CallstackPanel currentStepIndex={this.props.currentStepIndex} />
</td>
</tr>
<tr>
<td>
<BasicPanel name='Storage' data={this.state.currentStorage} renderRow={this.renderStorageRow} />
<StoragePanel currentStepIndex={this.props.currentStepIndex} />
</td>
<td>
<BasicPanel name='Memory' data={this.state.currentMemory} renderRow={this.renderMemoryRow} />
<MemoryPanel currentStepIndex={this.props.currentStepIndex} />
</td>
</tr>
</tbody>
@ -70,112 +69,16 @@ module.exports = React.createClass({
)
},
renderStorageRow: function (data) {
var ret = []
if (data) {
for (var key in data) {
ret.push(
<tr key={key}>
<td>
{key}
</td>
<td>
{data[key]}
</td>
</tr>)
}
}
return ret
},
renderMemoryRow: function (data) {
var ret = []
if (data) {
for (var key in data) {
var memSlot = data[key]
ret.push(
<tr key={key}>
<td>
{memSlot.address}
</td>
<td>
{memSlot.content.raw}
</td>
<td>
{memSlot.content.ascii}
</td>
</tr>)
}
}
return ret
},
componentWillReceiveProps: function (nextProps) {
console.log("asse " + JSON.stringify(nextProps))
if (nextProps.currentStepIndex < 0) return
if (window.ethDebuggerSelectedItem !== nextProps.currentStepIndex) return
var self = this
this.context.traceManager.getCallDataAt(nextProps.currentStepIndex, function (calldata) {
self.setState({
currentCallData: calldata
})
})
this.context.traceManager.getCallStackAt(nextProps.currentStepIndex, function (callstack) {
self.setState({
currentCallStack: callstack
})
})
this.context.traceManager.getMemoryAt(nextProps.currentStepIndex, function (memory) {
self.setState({
currentMemory: self.formatMemory(memory, 16)
})
})
this.context.traceManager.getStorageAt(nextProps.currentStepIndex, function (storage) {
self.setState({
currentStorage: storage
})
})
this.context.traceManager.getStackAt(nextProps.currentStepIndex, function (stack) {
self.setState({
currentStack: stack
})
})
this.context.traceManager.getCurrentCalledAddressAt(nextProps.currentStepIndex, function (address) {
self.setState({
currentAddress: address
})
})
},
formatMemory: function (mem, width) {
var ret = []
for (var k = 0; k < mem.length; k += (width * 2)) {
var memory = mem.substr(k, width * 2)
ret.push({
address: this.context.web3.toHex(k),
content: this.tryAsciiFormat(memory)
})
}
return ret
},
tryAsciiFormat: function (memorySlot) {
var ret = { ascii: '', raw: '' }
for (var k = 0; k < memorySlot.length; k += 2) {
var raw = memorySlot.substr(k, 2)
var ascii = this.context.web3.toAscii(raw)
if (ascii === String.fromCharCode(0)) {
ret.ascii += '?'
} else {
ret.ascii += ascii
if (window.ethDebuggerSelectedItem === nextProps.currentStepIndex) {
self.setState({
currentAddress: address
})
}
ret.raw += ' ' + raw
}
return ret
})
}
})

@ -0,0 +1,41 @@
'use strict'
var React = require('react')
var BasicPanel = require('./basicPanel')
module.exports = React.createClass({
contextTypes: {
traceManager: React.PropTypes.object
},
getDefaultProps: function () {
return {
currentStepIndex: -1
}
},
getInitialState: function () {
return {
data: null
}
},
render: function () {
return (
<BasicPanel name='CallData' data={this.state.data} />
)
},
componentWillReceiveProps: function (nextProps) {
if (nextProps.currentStepIndex < 0) return
if (window.ethDebuggerSelectedItem !== nextProps.currentStepIndex) return
var self = this
this.context.traceManager.getCallDataAt(nextProps.currentStepIndex, function (calldata) {
if (window.ethDebuggerSelectedItem === nextProps.currentStepIndex) {
self.setState({
data: calldata
})
}
})
}
})

@ -0,0 +1,41 @@
'use strict'
var React = require('react')
var BasicPanel = require('./basicPanel')
module.exports = React.createClass({
contextTypes: {
traceManager: React.PropTypes.object
},
getDefaultProps: function () {
return {
currentStepIndex: -1
}
},
getInitialState: function () {
return {
data: null
}
},
render: function () {
return (
<BasicPanel name='CallStack' data={this.state.data} />
)
},
componentWillReceiveProps: function (nextProps) {
if (nextProps.currentStepIndex < 0) return
if (window.ethDebuggerSelectedItem !== nextProps.currentStepIndex) return
var self = this
this.context.traceManager.getCallStackAt(nextProps.currentStepIndex, function (callstack) {
if (window.ethDebuggerSelectedItem === nextProps.currentStepIndex) {
self.setState({
data: callstack
})
}
})
}
})

@ -9,8 +9,8 @@ var style = require('./basicStyles')
module.exports = React.createClass({
getInitialState: function () {
return {
tx: null,
currentStepIndex: -1 // index of the selected item in the vmtrace
currentStepIndex: -1, // index of the selected item in the vmtrace
tx: null
}
},
@ -38,7 +38,7 @@ module.exports = React.createClass({
<h1 style={style.container}>Eth Debugger</h1>
<TxBrowser onNewTxRequested={this.startDebugging} />
<StepManager ref='stepManager' onStepChanged={this.stepChanged} />
<AssemblyItemsBrowser currentStepIndex={this.state.currentStepIndex} />
<AssemblyItemsBrowser ref='assemblyitemsbrowser' currentStepIndex={this.state.currentStepIndex} />
</div>
)
},

@ -0,0 +1,91 @@
'use strict'
var React = require('react')
var BasicPanel = require('./basicPanel')
module.exports = React.createClass({
contextTypes: {
traceManager: React.PropTypes.object,
web3: React.PropTypes.object
},
getDefaultProps: function () {
return {
currentStepIndex: -1
}
},
getInitialState: function () {
return {
data: null
}
},
render: function () {
return (
<BasicPanel name='Memory' data={this.state.data} renderRow={this.renderMemoryRow} />
)
},
componentWillReceiveProps: function (nextProps) {
if (nextProps.currentStepIndex < 0) return
if (window.ethDebuggerSelectedItem !== nextProps.currentStepIndex) return
var self = this
this.context.traceManager.getMemoryAt(nextProps.currentStepIndex, function (memory) {
if (window.ethDebuggerSelectedItem === nextProps.currentStepIndex) {
self.setState({
data: self.formatMemory(memory, 16)
})
}
})
},
renderMemoryRow: function (data) {
var ret = []
if (data) {
for (var key in data) {
var memSlot = data[key]
ret.push(
<tr key={key}>
<td>
{memSlot.address}
</td>
<td>
{memSlot.content.raw}
</td>
<td>
{memSlot.content.ascii}
</td>
</tr>)
}
}
return ret
},
formatMemory: function (mem, width) {
var ret = []
for (var k = 0; k < mem.length; k += (width * 2)) {
var memory = mem.substr(k, width * 2)
ret.push({
address: this.context.web3.toHex(k),
content: this.tryAsciiFormat(memory)
})
}
return ret
},
tryAsciiFormat: function (memorySlot) {
var ret = { ascii: '', raw: '' }
for (var k = 0; k < memorySlot.length; k += 2) {
var raw = memorySlot.substr(k, 2)
var ascii = this.context.web3.toAscii(raw)
if (ascii === String.fromCharCode(0)) {
ret.ascii += '?'
} else {
ret.ascii += ascii
}
ret.raw += ' ' + raw
}
return ret
}
})

@ -0,0 +1,41 @@
'use strict'
var React = require('react')
var BasicPanel = require('./basicPanel')
module.exports = React.createClass({
contextTypes: {
traceManager: React.PropTypes.object
},
getDefaultProps: function () {
return {
currentStepIndex: -1
}
},
getInitialState: function () {
return {
data: null
}
},
render: function () {
return (
<BasicPanel name='Stack' data={this.state.data} />
)
},
componentWillReceiveProps: function (nextProps) {
if (nextProps.currentStepIndex < 0) return
if (window.ethDebuggerSelectedItem !== nextProps.currentStepIndex) return
var self = this
this.context.traceManager.getStackAt(nextProps.currentStepIndex, function (stack) {
if (window.ethDebuggerSelectedItem === nextProps.currentStepIndex) {
self.setState({
data: stack
})
}
})
}
})

@ -39,6 +39,14 @@ module.exports = React.createClass({
)
},
componentDidMount: function () {
this.updateGlobalSelectedItem(0)
},
updateGlobalSelectedItem: function (value) {
window.ethDebuggerSelectedItem = value
},
init: function () {
this.refs.slider.setValue(0)
},
@ -91,6 +99,7 @@ module.exports = React.createClass({
},
changeState: function (step) {
this.updateGlobalSelectedItem(step)
this.setState({
currentStepIndex: step
})

@ -0,0 +1,59 @@
'use strict'
var React = require('react')
var BasicPanel = require('./basicPanel')
module.exports = React.createClass({
contextTypes: {
traceManager: React.PropTypes.object
},
getDefaultProps: function () {
return {
currentStepIndex: -1
}
},
getInitialState: function () {
return {
data: null
}
},
render: function () {
return (
<BasicPanel name='Storage' data={this.state.data} renderRow={this.renderStorageRow} />
)
},
componentWillReceiveProps: function (nextProps) {
if (nextProps.currentStepIndex < 0) return
if (window.ethDebuggerSelectedItem !== nextProps.currentStepIndex) return
var self = this
this.context.traceManager.getStorageAt(nextProps.currentStepIndex, function (storage) {
if (window.ethDebuggerSelectedItem === nextProps.currentStepIndex) {
self.setState({
data: storage
})
}
})
},
renderStorageRow: function (data) {
var ret = []
if (data) {
for (var key in data) {
ret.push(
<tr key={key}>
<td>
{key}
</td>
<td>
{data[key]}
</td>
</tr>)
}
}
return ret
}
})
Loading…
Cancel
Save