diff options
author | obscuren <geffobscura@gmail.com> | 2014-05-29 05:14:23 +0800 |
---|---|---|
committer | obscuren <geffobscura@gmail.com> | 2014-05-29 05:14:23 +0800 |
commit | 8fab7ce37d6748cbf34ebee96622448ec8a4c9e3 (patch) | |
tree | 2df5f7e76d39163c8c2f72558bd9d6d682dbf44f /ethereal/ui/debugger.go | |
parent | 1eda1d25b0d27fe57287698fb883c9153ddda292 (diff) | |
download | dexon-8fab7ce37d6748cbf34ebee96622448ec8a4c9e3.tar dexon-8fab7ce37d6748cbf34ebee96622448ec8a4c9e3.tar.gz dexon-8fab7ce37d6748cbf34ebee96622448ec8a4c9e3.tar.bz2 dexon-8fab7ce37d6748cbf34ebee96622448ec8a4c9e3.tar.lz dexon-8fab7ce37d6748cbf34ebee96622448ec8a4c9e3.tar.xz dexon-8fab7ce37d6748cbf34ebee96622448ec8a4c9e3.tar.zst dexon-8fab7ce37d6748cbf34ebee96622448ec8a4c9e3.zip |
Fixes and improved debugger
Diffstat (limited to 'ethereal/ui/debugger.go')
-rw-r--r-- | ethereal/ui/debugger.go | 46 |
1 files changed, 18 insertions, 28 deletions
diff --git a/ethereal/ui/debugger.go b/ethereal/ui/debugger.go index 342e3a7d0..9bca7e4fe 100644 --- a/ethereal/ui/debugger.go +++ b/ethereal/ui/debugger.go @@ -5,27 +5,9 @@ import ( "github.com/ethereum/eth-go/ethchain" "github.com/ethereum/eth-go/ethutil" "github.com/go-qml/qml" - "math/big" "strings" ) -func formatData(data string) []byte { - if len(data) == 0 { - return nil - } - // Simple stupid - d := new(big.Int) - if data[0:1] == "\"" && data[len(data)-1:] == "\"" { - d.SetBytes([]byte(data[1 : len(data)-1])) - } else if data[:2] == "0x" { - d.SetBytes(ethutil.FromHex(data[2:])) - } else { - d.SetString(data, 0) - } - - return ethutil.BigToBytes(d, 256) -} - type DebuggerWindow struct { win *qml.Window engine *qml.Engine @@ -77,17 +59,10 @@ func (self *DebuggerWindow) Debug(valueStr, gasStr, gasPriceStr, scriptStr, data self.Db.Q <- true } - defer func() { - if r := recover(); r != nil { - fmt.Println(r) - self.Db.done = true - } - }() - data := ethutil.StringToByteFunc(dataStr, func(s string) (ret []byte) { slice := strings.Split(dataStr, "\n") for _, dataItem := range slice { - d := formatData(dataItem) + d := ethutil.FormatData(dataItem) ret = append(ret, d...) } return @@ -100,7 +75,7 @@ func (self *DebuggerWindow) Debug(valueStr, gasStr, gasPriceStr, scriptStr, data }) if err != nil { - ethutil.Config.Log.Debugln(err) + self.Logln(err) return } @@ -130,11 +105,17 @@ func (self *DebuggerWindow) Debug(valueStr, gasStr, gasPriceStr, scriptStr, data Coinbase: block.Coinbase, Time: block.Time, Diff: block.Difficulty, + Value: ethutil.Big(valueStr), }) self.Db.done = false go func() { - callerClosure.Call(vm, data, self.Db.halting) + ret, _, err := callerClosure.Call(vm, data, self.Db.halting) + if err != nil { + self.Logln("exited with errors:", err) + } else { + self.Logf("exited: %v", ret) + } state.Reset() @@ -142,6 +123,15 @@ func (self *DebuggerWindow) Debug(valueStr, gasStr, gasPriceStr, scriptStr, data }() } +func (self *DebuggerWindow) Logf(format string, v ...interface{}) { + self.win.Root().Call("setLog", fmt.Sprintf(format, v...)) +} + +func (self *DebuggerWindow) Logln(v ...interface{}) { + str := fmt.Sprintln(v...) + self.Logf("%s", str[:len(str)-1]) +} + func (self *DebuggerWindow) Next() { self.Db.Next() } |