From e4d2d00d414704559b38f80a918030613ea1cdf4 Mon Sep 17 00:00:00 2001 From: obscuren Date: Wed, 2 Jul 2014 13:08:32 +0200 Subject: [PATCH] Added support for breakpoints on specific instructions --- ethchain/vm.go | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/ethchain/vm.go b/ethchain/vm.go index cd7516db7..909b375ae 100644 --- a/ethchain/vm.go +++ b/ethchain/vm.go @@ -53,7 +53,10 @@ type Vm struct { err error - Hook DebugHook + // Debugging + Hook DebugHook + BreakPoints []int64 + Stepping bool } type DebugHook func(step int, op OpCode, mem *Memory, stack *Stack, stateObject *StateObject) bool @@ -742,9 +745,16 @@ func (vm *Vm) RunClosure(closure *Closure) (ret []byte, err error) { vm.Endl() if vm.Hook != nil { - if !vm.Hook(prevStep, op, mem, stack, closure.Object()) { - return nil, 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()) { + return nil, nil + } + } } } + } }