diff --git a/Mist/assets/debugger/debugger.qml b/Mist/assets/debugger/debugger.qml
index 902e09d2cf..d4b8db576d 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 2b90814191..a9086921dd 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 388280b8c7..d2e7d3fb08 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 94301b859a..ffc672a63a 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))
}