Merge branch 'develop' of github.com:ethereum/go-ethereum into feature/logging
This commit is contained in:
commit
648c418fcd
|
@ -10,9 +10,9 @@ ApplicationWindow {
|
||||||
visible: false
|
visible: false
|
||||||
title: "IceCREAM"
|
title: "IceCREAM"
|
||||||
minimumWidth: 1280
|
minimumWidth: 1280
|
||||||
minimumHeight: 900
|
minimumHeight: 700
|
||||||
width: 1290
|
width: 1290
|
||||||
height: 900
|
height: 700
|
||||||
|
|
||||||
property alias codeText: codeEditor.text
|
property alias codeText: codeEditor.text
|
||||||
property alias dataText: rawDataField.text
|
property alias dataText: rawDataField.text
|
||||||
|
@ -56,7 +56,7 @@ ApplicationWindow {
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
color: "#00000000"
|
color: "#00000000"
|
||||||
height: 500
|
height: 330
|
||||||
anchors.left: parent.left
|
anchors.left: parent.left
|
||||||
anchors.right: parent.right
|
anchors.right: parent.right
|
||||||
|
|
||||||
|
@ -208,6 +208,12 @@ ApplicationWindow {
|
||||||
}
|
}
|
||||||
text: "Next"
|
text: "Next"
|
||||||
}
|
}
|
||||||
|
CheckBox {
|
||||||
|
id: breakEachLine
|
||||||
|
objectName: "breakEachLine"
|
||||||
|
text: "Break each instruction"
|
||||||
|
checked: true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,7 @@ func NewDebuggerWindow(lib *UiLib) *DebuggerWindow {
|
||||||
}
|
}
|
||||||
|
|
||||||
win := component.CreateWindow(nil)
|
win := component.CreateWindow(nil)
|
||||||
db := &Debugger{win, make(chan bool), make(chan bool), true, false}
|
db := &Debugger{win, make(chan bool), make(chan bool), true, false, true}
|
||||||
|
|
||||||
return &DebuggerWindow{engine: engine, win: win, lib: lib, Db: db}
|
return &DebuggerWindow{engine: engine, win: win, lib: lib, Db: db}
|
||||||
}
|
}
|
||||||
|
@ -59,6 +59,7 @@ func (self *DebuggerWindow) Debug(valueStr, gasStr, gasPriceStr, scriptStr, data
|
||||||
if !self.Db.done {
|
if !self.Db.done {
|
||||||
self.Db.Q <- true
|
self.Db.Q <- true
|
||||||
}
|
}
|
||||||
|
self.Db.breakOnInstr = self.win.Root().ObjectByName("breakEachLine").Bool("checked")
|
||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
if r := recover(); r != nil {
|
if r := recover(); r != nil {
|
||||||
|
@ -95,16 +96,20 @@ func (self *DebuggerWindow) Debug(valueStr, gasStr, gasPriceStr, scriptStr, data
|
||||||
self.win.Root().Call("setAsm", str)
|
self.win.Root().Call("setAsm", str)
|
||||||
}
|
}
|
||||||
|
|
||||||
gas := ethutil.Big(gasStr)
|
var (
|
||||||
gasPrice := ethutil.Big(gasPriceStr)
|
gas = ethutil.Big(gasStr)
|
||||||
|
gasPrice = ethutil.Big(gasPriceStr)
|
||||||
|
value = ethutil.Big(valueStr)
|
||||||
// Contract addr as test address
|
// Contract addr as test address
|
||||||
keyPair := ethutil.GetKeyRing().Get(0)
|
keyPair = ethutil.GetKeyRing().Get(0)
|
||||||
callerTx := ethchain.NewContractCreationTx(ethutil.Big(valueStr), gas, gasPrice, script)
|
callerTx = ethchain.NewContractCreationTx(ethutil.Big(valueStr), gas, gasPrice, script)
|
||||||
|
)
|
||||||
callerTx.Sign(keyPair.PrivateKey)
|
callerTx.Sign(keyPair.PrivateKey)
|
||||||
|
|
||||||
state := self.lib.eth.BlockChain().CurrentBlock.State()
|
state := self.lib.eth.BlockChain().CurrentBlock.State()
|
||||||
account := self.lib.eth.StateManager().TransState().GetAccount(keyPair.Address())
|
account := self.lib.eth.StateManager().TransState().GetAccount(keyPair.Address())
|
||||||
contract := ethchain.MakeContract(callerTx, state)
|
contract := ethchain.MakeContract(callerTx, state)
|
||||||
|
contract.Amount = value
|
||||||
callerClosure := ethchain.NewClosure(account, contract, script, state, gas, gasPrice)
|
callerClosure := ethchain.NewClosure(account, contract, script, state, gas, gasPrice)
|
||||||
|
|
||||||
block := self.lib.eth.BlockChain().CurrentBlock
|
block := self.lib.eth.BlockChain().CurrentBlock
|
||||||
|
@ -164,6 +169,7 @@ type Debugger struct {
|
||||||
N chan bool
|
N chan bool
|
||||||
Q chan bool
|
Q chan bool
|
||||||
done, interrupt bool
|
done, interrupt bool
|
||||||
|
breakOnInstr bool
|
||||||
}
|
}
|
||||||
|
|
||||||
type storeVal struct {
|
type storeVal struct {
|
||||||
|
@ -190,7 +196,8 @@ func (d *Debugger) halting(pc int, op ethchain.OpCode, mem *ethchain.Memory, sta
|
||||||
d.win.Root().Call("setStorage", storeVal{fmt.Sprintf("% x", key), fmt.Sprintf("% x", node.Str())})
|
d.win.Root().Call("setStorage", storeVal{fmt.Sprintf("% x", key), fmt.Sprintf("% x", node.Str())})
|
||||||
})
|
})
|
||||||
|
|
||||||
out:
|
if d.breakOnInstr {
|
||||||
|
out:
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case <-d.N:
|
case <-d.N:
|
||||||
|
@ -202,6 +209,7 @@ out:
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
|
@ -173,10 +173,6 @@ func (gui *Gui) createWindow(comp qml.Object) *qml.Window {
|
||||||
gui.win = win
|
gui.win = win
|
||||||
gui.uiLib.win = win
|
gui.uiLib.win = win
|
||||||
|
|
||||||
db := &Debugger{gui.win, make(chan bool), make(chan bool), true, false}
|
|
||||||
gui.lib.Db = db
|
|
||||||
gui.uiLib.Db = db
|
|
||||||
|
|
||||||
return gui.win
|
return gui.win
|
||||||
}
|
}
|
||||||
func (gui *Gui) setInitialBlockChain() {
|
func (gui *Gui) setInitialBlockChain() {
|
||||||
|
|
Loading…
Reference in New Issue