diff options
author | obscuren <geffobscura@gmail.com> | 2014-07-04 21:32:25 +0800 |
---|---|---|
committer | obscuren <geffobscura@gmail.com> | 2014-07-04 21:32:25 +0800 |
commit | 3ebcd36667a32cb79c1686e3b74f6196d6ed16b1 (patch) | |
tree | d88bfa53ee9d3572437aa276a3b5e8014e38632d /ethereal/debugger.go | |
parent | 0076fa583ce16c45f904b6cd0a6e5ab3cc1ab197 (diff) | |
parent | 9e38ca555dccd6b9a4a3fa0eb9eb749d2dc3c82c (diff) | |
download | dexon-3ebcd36667a32cb79c1686e3b74f6196d6ed16b1.tar dexon-3ebcd36667a32cb79c1686e3b74f6196d6ed16b1.tar.gz dexon-3ebcd36667a32cb79c1686e3b74f6196d6ed16b1.tar.bz2 dexon-3ebcd36667a32cb79c1686e3b74f6196d6ed16b1.tar.lz dexon-3ebcd36667a32cb79c1686e3b74f6196d6ed16b1.tar.xz dexon-3ebcd36667a32cb79c1686e3b74f6196d6ed16b1.tar.zst dexon-3ebcd36667a32cb79c1686e3b74f6196d6ed16b1.zip |
Merge branch 'develop'
Diffstat (limited to 'ethereal/debugger.go')
-rw-r--r-- | ethereal/debugger.go | 47 |
1 files changed, 31 insertions, 16 deletions
diff --git a/ethereal/debugger.go b/ethereal/debugger.go index 8eab04b4d..89e0f36eb 100644 --- a/ethereal/debugger.go +++ b/ethereal/debugger.go @@ -52,13 +52,31 @@ func (self *DebuggerWindow) SetCode(code string) { func (self *DebuggerWindow) SetData(data string) { self.win.Set("dataText", data) } -func (self *DebuggerWindow) SetAsm(data string) { - dis := ethchain.Disassemble(ethutil.Hex2Bytes(data)) +func (self *DebuggerWindow) SetAsm(data []byte) { + self.win.Root().Call("clearAsm") + + dis := ethchain.Disassemble(data) for _, str := range dis { self.win.Root().Call("setAsm", str) } } +func (self *DebuggerWindow) Compile(code string) { + var err error + script := ethutil.StringToByteFunc(code, func(s string) (ret []byte) { + ret, err = ethutil.Compile(s, true) + return + }) + + if err == nil { + self.SetAsm(script) + } +} + +func (self *DebuggerWindow) ClearLog() { + self.win.Root().Call("clearLog") +} + func (self *DebuggerWindow) Debug(valueStr, gasStr, gasPriceStr, scriptStr, dataStr string) { if !self.Db.done { self.Db.Q <- true @@ -81,7 +99,7 @@ func (self *DebuggerWindow) Debug(valueStr, gasStr, gasPriceStr, scriptStr, data var err error script := ethutil.StringToByteFunc(scriptStr, func(s string) (ret []byte) { - ret, err = ethutil.Compile(s) + ret, err = ethutil.Compile(s, false) return }) @@ -91,27 +109,21 @@ func (self *DebuggerWindow) Debug(valueStr, gasStr, gasPriceStr, scriptStr, data return } - dis := ethchain.Disassemble(script) - self.win.Root().Call("clearAsm") - - for _, str := range dis { - self.win.Root().Call("setAsm", str) - } + self.SetAsm(script) var ( gas = ethutil.Big(gasStr) gasPrice = ethutil.Big(gasPriceStr) value = ethutil.Big(valueStr) // Contract addr as test address - keyPair = self.lib.eth.KeyManager().KeyPair() - callerTx = ethchain.NewContractCreationTx(ethutil.Big(valueStr), gas, gasPrice, script) + keyPair = self.lib.eth.KeyManager().KeyPair() ) - callerTx.Sign(keyPair.PrivateKey) - state := self.lib.eth.BlockChain().CurrentBlock.State() + state := self.lib.eth.StateManager().TransState() account := self.lib.eth.StateManager().TransState().GetAccount(keyPair.Address()) - contract := ethchain.MakeContract(callerTx, state) + contract := ethchain.NewStateObject([]byte{0}) contract.Amount = value + callerClosure := ethchain.NewClosure(account, contract, script, state, gas, gasPrice) block := self.lib.eth.BlockChain().CurrentBlock @@ -179,8 +191,9 @@ func (self *DebuggerWindow) ExecCommand(command string) { cmd := strings.Split(command, " ") switch cmd[0] { case "help": - self.Logln("Debgger commands:") - self.Logln("break, bp Set breakpoint") + self.Logln("Debugger commands:") + self.Logln("break, bp Set breakpoint on instruction") + self.Logln("clear [log, break, bp] Clears previous set sub-command(s)") case "break", "bp": if len(cmd) > 1 { lineNo, err := strconv.Atoi(cmd[1]) @@ -202,6 +215,8 @@ func (self *DebuggerWindow) ExecCommand(command string) { self.vm.BreakPoints = nil self.Logln("Breakpoints cleared") + case "log": + self.ClearLog() default: self.Logf("clear '%s' is not valid", cmd[1]) } |