From 0a82e3b75b85631b1b3877b9518e782b182baf8a Mon Sep 17 00:00:00 2001 From: obscuren Date: Fri, 19 Sep 2014 11:13:01 +0200 Subject: [PATCH] Stack info --- Mist/assets/debugger/debugger.qml | 95 +++++++++++++++++++++++-------- Mist/debugger.go | 24 ++++++-- Mist/flags.go | 2 +- javascript/javascript_runtime.go | 2 +- 4 files changed, 92 insertions(+), 31 deletions(-) diff --git a/Mist/assets/debugger/debugger.qml b/Mist/assets/debugger/debugger.qml index 902e09d2c..d4b8db576 100644 --- a/Mist/assets/debugger/debugger.qml +++ b/Mist/assets/debugger/debugger.qml @@ -86,8 +86,37 @@ ApplicationWindow { TableView { id: asmTableView width: 200 + headerVisible: false TableViewColumn{ role: "value" ; title: "" ; width: asmTableView.width - 2 } model: asmModel + /* + alternatingRowColors: false + itemDelegate: Item { + Rectangle { + anchors.fill: parent + color: "#DDD" + Text { + anchors { + left: parent.left + right: parent.right + leftMargin: 10 + verticalCenter: parent.verticalCenter + } + color: "#333" + elide: styleData.elideMode + text: styleData.value + font.pixelSize: 11 + MouseArea { + acceptedButtons: Qt.LeftButton + anchors.fill: parent + onClicked: { + mouse.accepted = true + } + } + } + } + } + */ } Rectangle { @@ -201,8 +230,8 @@ ApplicationWindow { } height: parent.height width: parent.width - stackTableView.width - TableViewColumn{ id:mnumColmn ; role: "num" ; title: "#" ; width: 50} - TableViewColumn{ role: "value" ; title: "Memory" ; width: 750} + TableViewColumn{ id:mnumColmn ; role: "num" ; title: "#" ; width: 50 } + TableViewColumn{ role: "value" ; title: "Memory" ; width: 750 } model: memModel } } @@ -223,31 +252,21 @@ ApplicationWindow { } } - SplitView { - Rectangle { - height: 200 - width: parent.width * 0.66 - TableView { - id: logTableView - property var logModel: ListModel { - id: logModel - } - height: parent.height - width: parent.width - TableViewColumn{ id: message ; role: "message" ; title: "log" ; width: logTableView.width - 2 } - model: logModel + Rectangle { + height: 200 + width: parent.width * 0.66 + TableView { + id: logTableView + property var logModel: ListModel { + id: logModel } - } - - TextArea { - objectName: "info" - anchors { - top: parent.top - bottom: parent.bottom - } - readOnly: true + height: parent.height + width: parent.width + TableViewColumn{ id: message ; role: "message" ; title: "log" ; width: logTableView.width - 2 } + model: logModel } } + } } } @@ -271,12 +290,37 @@ ApplicationWindow { exec() } } + + RowLayout { + anchors.left: dbgCommand.right + anchors.leftMargin: 10 + spacing: 5 + y: parent.height / 2 - this.height / 2 + + Text { + objectName: "stackFrame" + font.pixelSize: 10 + text: "stack ptr: 0" + } + + Text { + objectName: "stackSize" + font.pixelSize: 10 + text: "stack size: 0" + } + + Text { + objectName: "memSize" + font.pixelSize: 10 + text: "mem size: 0" + } + } } toolBar: ToolBar { height: 30 RowLayout { - spacing: 5 + spacing: 10 Button { property var enabled: true @@ -338,6 +382,7 @@ ApplicationWindow { function setInstruction(num) { asmTableView.selection.clear() asmTableView.selection.select(num) + asmTableView.positionViewAtRow(num, ListView.Center) } function setMem(mem) { diff --git a/Mist/debugger.go b/Mist/debugger.go index 2b9081419..a9086921d 100644 --- a/Mist/debugger.go +++ b/Mist/debugger.go @@ -5,6 +5,7 @@ import ( "math/big" "strconv" "strings" + "unicode" "github.com/ethereum/eth-go/ethchain" "github.com/ethereum/eth-go/ethstate" @@ -271,9 +272,20 @@ func (d *Debugger) halting(pc int, op ethvm.OpCode, mem *ethvm.Memory, stack *et d.win.Root().Call("clearStorage") addr := 0 - for i := 0; i+32 <= mem.Len(); i += 32 { - d.win.Root().Call("setMem", memAddr{fmt.Sprintf("%03d", addr), fmt.Sprintf("% x", mem.Data()[i:i+32])}) - addr++ + for i := 0; i+32 <= mem.Len(); i += 16 { + dat := mem.Data()[i : i+16] + var str string + + for _, d := range dat { + if unicode.IsGraphic(rune(d)) { + str += string(d) + } else { + str += "?" + } + } + + d.win.Root().Call("setMem", memAddr{fmt.Sprintf("%03d", addr), fmt.Sprintf("%s % x", str, dat)}) + addr += 16 } for _, val := range stack.Data() { @@ -284,7 +296,11 @@ func (d *Debugger) halting(pc int, op ethvm.OpCode, mem *ethvm.Memory, stack *et d.win.Root().Call("setStorage", storeVal{fmt.Sprintf("% x", key), fmt.Sprintf("% x", node.Str())}) }) - d.win.Root().ObjectByName("info").Set("text", fmt.Sprintf(`stack frame %v`, new(big.Int).SetBytes(mem.Get(0, 32)))) + stackFrameAt := new(big.Int).SetBytes(mem.Get(0, 32)) + psize := mem.Len() - int(new(big.Int).SetBytes(mem.Get(0, 32)).Uint64()) + d.win.Root().ObjectByName("stackFrame").Set("text", fmt.Sprintf(`stack ptr: %v`, stackFrameAt)) + d.win.Root().ObjectByName("stackSize").Set("text", fmt.Sprintf(`stack size: %d`, psize)) + d.win.Root().ObjectByName("memSize").Set("text", fmt.Sprintf(`mem size: %v`, mem.Len())) out: for { diff --git a/Mist/flags.go b/Mist/flags.go index 388280b8c..d2e7d3fb0 100644 --- a/Mist/flags.go +++ b/Mist/flags.go @@ -44,7 +44,7 @@ func defaultAssetPath() string { // assume a debug build and use the source directory as // asset directory. pwd, _ := os.Getwd() - if pwd == path.Join(os.Getenv("GOPATH"), "src", "github.com", "ethereum", "go-ethereum", "Mist") { + if pwd == path.Join(os.Getenv("GOPATH"), "src", "github.com", "ethereum", "go-ethereum", "mist") { assetPath = path.Join(pwd, "assets") } else { switch runtime.GOOS { diff --git a/javascript/javascript_runtime.go b/javascript/javascript_runtime.go index 94301b859..ffc672a63 100644 --- a/javascript/javascript_runtime.go +++ b/javascript/javascript_runtime.go @@ -42,7 +42,7 @@ func (jsre *JSRE) LoadExtFile(path string) { } func (jsre *JSRE) LoadIntFile(file string) { - assetPath := path.Join(os.Getenv("GOPATH"), "src", "github.com", "ethereum", "go-ethereum", "Mist", "assets", "ext") + assetPath := path.Join(os.Getenv("GOPATH"), "src", "github.com", "ethereum", "go-ethereum", "mist", "assets", "ext") jsre.LoadExtFile(path.Join(assetPath, file)) }