diff options
author | obscuren <geffobscura@gmail.com> | 2014-07-05 19:24:49 +0800 |
---|---|---|
committer | obscuren <geffobscura@gmail.com> | 2014-07-05 19:24:49 +0800 |
commit | b232acd04ef957fb65e1c49b330165535da7e871 (patch) | |
tree | 59164148d9fb7f1674ee80ae263d19496b29ca43 /ethchain/vm.go | |
parent | 329887df993aefc8799cf64ed20cf1dcc8cfb6ed (diff) | |
download | dexon-b232acd04ef957fb65e1c49b330165535da7e871.tar.gz dexon-b232acd04ef957fb65e1c49b330165535da7e871.tar.zst dexon-b232acd04ef957fb65e1c49b330165535da7e871.zip |
Debugging mode for vm
Diffstat (limited to 'ethchain/vm.go')
-rw-r--r-- | ethchain/vm.go | 31 |
1 files changed, 14 insertions, 17 deletions
diff --git a/ethchain/vm.go b/ethchain/vm.go index cfedadb08..769333649 100644 --- a/ethchain/vm.go +++ b/ethchain/vm.go @@ -24,14 +24,10 @@ var ( GasTx = big.NewInt(500) ) -func CalculateTxGas(initSize *big.Int) *big.Int { - totalGas := new(big.Int) - - txTotalBytes := new(big.Int).Set(initSize) - txTotalBytes.Div(txTotalBytes, ethutil.Big32) - totalGas.Add(totalGas, new(big.Int).Mul(txTotalBytes, GasSStore)) - - return totalGas +type Debugger interface { + BreakHook(step int, op OpCode, mem *Memory, stack *Stack, stateObject *StateObject) bool + StepHook(step int, op OpCode, mem *Memory, stack *Stack, stateObject *StateObject) bool + BreakPoints() []int64 } type Vm struct { @@ -53,14 +49,13 @@ type Vm struct { err error // Debugging - Hook DebugHook + Dbg Debugger + BreakPoints []int64 Stepping bool Fn string } -type DebugHook func(step int, op OpCode, mem *Memory, stack *Stack, stateObject *StateObject) bool - type RuntimeVars struct { Origin []byte Block *Block @@ -754,12 +749,14 @@ func (vm *Vm) RunClosure(closure *Closure) (ret []byte, err error) { vm.Endl() - if vm.Hook != nil { - for _, instrNo := range vm.BreakPoints { - if pc.Cmp(big.NewInt(instrNo)) == 0 || vm.Stepping { - vm.Stepping = true - - if !vm.Hook(prevStep, op, mem, stack, closure.Object()) { + if vm.Dbg != nil { + for _, instrNo := range vm.Dbg.BreakPoints() { + if pc.Cmp(big.NewInt(instrNo)) == 0 { + if !vm.Dbg.BreakHook(prevStep, op, mem, stack, closure.Object()) { + return nil, nil + } + } else if vm.Stepping { + if !vm.Dbg.StepHook(prevStep, op, mem, stack, closure.Object()) { return nil, nil } } |