diff options
author | obscuren <geffobscura@gmail.com> | 2015-06-10 18:23:49 +0800 |
---|---|---|
committer | obscuren <geffobscura@gmail.com> | 2015-06-10 18:23:49 +0800 |
commit | 38c61f6f2567e7943c9a16e2be0a2bfedb3a1fb3 (patch) | |
tree | 3877af08004f9dc2de00001257c9fe678de049d1 /core/vm_logger.go | |
parent | ff5b3ef0877978699235d20b3caa9890b35ec6f8 (diff) | |
download | dexon-38c61f6f2567e7943c9a16e2be0a2bfedb3a1fb3.tar dexon-38c61f6f2567e7943c9a16e2be0a2bfedb3a1fb3.tar.gz dexon-38c61f6f2567e7943c9a16e2be0a2bfedb3a1fb3.tar.bz2 dexon-38c61f6f2567e7943c9a16e2be0a2bfedb3a1fb3.tar.lz dexon-38c61f6f2567e7943c9a16e2be0a2bfedb3a1fb3.tar.xz dexon-38c61f6f2567e7943c9a16e2be0a2bfedb3a1fb3.tar.zst dexon-38c61f6f2567e7943c9a16e2be0a2bfedb3a1fb3.zip |
core, core/vm: added structure logging
This also reduces the time required spend in the VM
Diffstat (limited to 'core/vm_logger.go')
-rw-r--r-- | core/vm_logger.go | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/core/vm_logger.go b/core/vm_logger.go new file mode 100644 index 000000000..84fa71b24 --- /dev/null +++ b/core/vm_logger.go @@ -0,0 +1,40 @@ +package core + +import ( + "fmt" + "os" + "unicode/utf8" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/vm" +) + +func VmStdErrFormat(logs []vm.StructLog) { + fmt.Fprintf(os.Stderr, "VM Stats %d ops\n", len(logs)) + for _, log := range logs { + fmt.Fprintf(os.Stderr, "PC %-3d - %-14s\n", log.Pc, log.Op) + fmt.Fprintln(os.Stderr, "STACK =", len(log.Stack)) + for i, item := range log.Stack { + fmt.Fprintf(os.Stderr, "%04d: %x\n", i, common.LeftPadBytes(item.Bytes(), 32)) + } + + const maxMem = 10 + addr := 0 + fmt.Fprintln(os.Stderr, "MEM =", len(log.Memory)) + for i := 0; i+16 <= len(log.Memory) && addr < maxMem; i += 16 { + data := log.Memory[i : i+16] + str := fmt.Sprintf("%04d: % x ", addr*16, data) + for _, r := range data { + if r == 0 { + str += "." + } else if utf8.ValidRune(rune(r)) { + str += fmt.Sprintf("%s", string(r)) + } else { + str += "?" + } + } + addr++ + fmt.Fprintln(os.Stderr, str) + } + } +} |