diff options
author | obscuren <geffobscura@gmail.com> | 2014-05-27 19:28:11 +0800 |
---|---|---|
committer | obscuren <geffobscura@gmail.com> | 2014-05-27 19:28:11 +0800 |
commit | 47417506c377dd0848739473fa14a51708b6a034 (patch) | |
tree | 13b37fd06822bc53924bd7e61c7784ca57ee0e19 /ethereal/ui | |
parent | d0b31e203053f3f176e61719d877dcaa04169bb3 (diff) | |
download | dexon-47417506c377dd0848739473fa14a51708b6a034.tar dexon-47417506c377dd0848739473fa14a51708b6a034.tar.gz dexon-47417506c377dd0848739473fa14a51708b6a034.tar.bz2 dexon-47417506c377dd0848739473fa14a51708b6a034.tar.lz dexon-47417506c377dd0848739473fa14a51708b6a034.tar.xz dexon-47417506c377dd0848739473fa14a51708b6a034.tar.zst dexon-47417506c377dd0848739473fa14a51708b6a034.zip |
New debugger implemented
Diffstat (limited to 'ethereal/ui')
-rw-r--r-- | ethereal/ui/debugger.go | 24 | ||||
-rw-r--r-- | ethereal/ui/gui.go | 2 |
2 files changed, 21 insertions, 5 deletions
diff --git a/ethereal/ui/debugger.go b/ethereal/ui/debugger.go index ce2d73b9a..817c0b08f 100644 --- a/ethereal/ui/debugger.go +++ b/ethereal/ui/debugger.go @@ -24,7 +24,7 @@ func NewDebuggerWindow(lib *UiLib) *DebuggerWindow { } win := component.CreateWindow(nil) - db := &Debugger{win, make(chan bool), true} + db := &Debugger{win, make(chan bool), make(chan bool), true} return &DebuggerWindow{engine: engine, win: win, lib: lib, Db: db} } @@ -40,8 +40,18 @@ func (self *DebuggerWindow) Show() { } func (self *DebuggerWindow) Debug(valueStr, gasStr, gasPriceStr, data string) { + if !self.Db.done { + self.Db.Q <- true + } + state := self.lib.eth.BlockChain().CurrentBlock.State() + defer func() { + if r := recover(); r != nil { + fmt.Println(r) + } + }() + script, err := ethutil.Compile(data) if err != nil { ethutil.Config.Log.Debugln(err) @@ -50,7 +60,7 @@ func (self *DebuggerWindow) Debug(valueStr, gasStr, gasPriceStr, data string) { } dis := ethchain.Disassemble(script) - self.lib.win.Root().Call("clearAsm") + self.win.Root().Call("clearAsm") for _, str := range dis { self.win.Root().Call("setAsm", str) @@ -91,6 +101,7 @@ func (self *DebuggerWindow) Next() { type Debugger struct { win *qml.Window N chan bool + Q chan bool done bool } @@ -98,7 +109,7 @@ type storeVal struct { Key, Value string } -func (d *Debugger) halting(pc int, op ethchain.OpCode, mem *ethchain.Memory, stack *ethchain.Stack, stateObject *ethchain.StateObject) { +func (d *Debugger) halting(pc int, op ethchain.OpCode, mem *ethchain.Memory, stack *ethchain.Stack, stateObject *ethchain.StateObject) bool { d.win.Root().Call("setInstruction", pc) d.win.Root().Call("clearMem") d.win.Root().Call("clearStack") @@ -123,9 +134,14 @@ out: select { case <-d.N: break out - default: + case <-d.Q: + d.done = true + + return false } } + + return true } func (d *Debugger) Next() { diff --git a/ethereal/ui/gui.go b/ethereal/ui/gui.go index 1018d77ac..ca6da5c49 100644 --- a/ethereal/ui/gui.go +++ b/ethereal/ui/gui.go @@ -130,7 +130,7 @@ func (gui *Gui) createWindow(comp qml.Object) *qml.Window { gui.win = win gui.uiLib.win = win - db := &Debugger{gui.win, make(chan bool), true} + db := &Debugger{gui.win, make(chan bool), make(chan bool), true} gui.lib.Db = db gui.uiLib.Db = db |