Fixes and improved debugger

This commit is contained in:
obscuren 2014-05-28 23:14:23 +02:00
parent 1eda1d25b0
commit 8fab7ce37d
5 changed files with 1228 additions and 1218 deletions

@ -126,7 +126,7 @@ ApplicationWindow {
SplitView { SplitView {
orientation: Qt.Horizontal orientation: Qt.Horizontal
height: 250 height: 150
TableView { TableView {
id: stackTableView id: stackTableView
@ -152,20 +152,36 @@ ApplicationWindow {
} }
} }
SplitView { Rectangle {
height: 300 height: 100
width: parent.width
TableView { TableView {
id: storageTableView id: storageTableView
property var memModel: ListModel { property var memModel: ListModel {
id: storageModel id: storageModel
} }
height: parent.height height: parent.height
width: parent.width - stackTableView.width width: parent.width
TableViewColumn{ id: key ; role: "key" ; title: "#" ; width: storageTableView.width / 2} TableViewColumn{ id: key ; role: "key" ; title: "#" ; width: storageTableView.width / 2}
TableViewColumn{ role: "value" ; title: "value" ; width: storageTableView.width / 2} TableViewColumn{ role: "value" ; title: "value" ; width: storageTableView.width / 2}
model: storageModel model: storageModel
} }
} }
Rectangle {
height: 200
width: parent.width
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 }
model: logModel
}
}
} }
} }
} }
@ -237,4 +253,8 @@ ApplicationWindow {
function setStorage(storage) { function setStorage(storage) {
storageModel.append({key: storage.key, value: storage.value}) storageModel.append({key: storage.key, value: storage.value})
} }
function setLog(msg) {
logModel.append({message: msg})
}
} }

@ -9,7 +9,7 @@
<script type="text/javascript"> <script type="text/javascript">
var jefcoinAddr = "518546ffa883dcc838a64bc2dabada0fd64af459" var jefcoinAddr = "de0bd4ea1947deabf1749d7ed633f289358c9f6c"
var mAddr = "" var mAddr = ""
function createTransaction() { function createTransaction() {

@ -5,27 +5,9 @@ import (
"github.com/ethereum/eth-go/ethchain" "github.com/ethereum/eth-go/ethchain"
"github.com/ethereum/eth-go/ethutil" "github.com/ethereum/eth-go/ethutil"
"github.com/go-qml/qml" "github.com/go-qml/qml"
"math/big"
"strings" "strings"
) )
func formatData(data string) []byte {
if len(data) == 0 {
return nil
}
// Simple stupid
d := new(big.Int)
if data[0:1] == "\"" && data[len(data)-1:] == "\"" {
d.SetBytes([]byte(data[1 : len(data)-1]))
} else if data[:2] == "0x" {
d.SetBytes(ethutil.FromHex(data[2:]))
} else {
d.SetString(data, 0)
}
return ethutil.BigToBytes(d, 256)
}
type DebuggerWindow struct { type DebuggerWindow struct {
win *qml.Window win *qml.Window
engine *qml.Engine engine *qml.Engine
@ -77,17 +59,10 @@ func (self *DebuggerWindow) Debug(valueStr, gasStr, gasPriceStr, scriptStr, data
self.Db.Q <- true self.Db.Q <- true
} }
defer func() {
if r := recover(); r != nil {
fmt.Println(r)
self.Db.done = true
}
}()
data := ethutil.StringToByteFunc(dataStr, func(s string) (ret []byte) { data := ethutil.StringToByteFunc(dataStr, func(s string) (ret []byte) {
slice := strings.Split(dataStr, "\n") slice := strings.Split(dataStr, "\n")
for _, dataItem := range slice { for _, dataItem := range slice {
d := formatData(dataItem) d := ethutil.FormatData(dataItem)
ret = append(ret, d...) ret = append(ret, d...)
} }
return return
@ -100,7 +75,7 @@ func (self *DebuggerWindow) Debug(valueStr, gasStr, gasPriceStr, scriptStr, data
}) })
if err != nil { if err != nil {
ethutil.Config.Log.Debugln(err) self.Logln(err)
return return
} }
@ -130,11 +105,17 @@ func (self *DebuggerWindow) Debug(valueStr, gasStr, gasPriceStr, scriptStr, data
Coinbase: block.Coinbase, Coinbase: block.Coinbase,
Time: block.Time, Time: block.Time,
Diff: block.Difficulty, Diff: block.Difficulty,
Value: ethutil.Big(valueStr),
}) })
self.Db.done = false self.Db.done = false
go func() { go func() {
callerClosure.Call(vm, data, self.Db.halting) ret, _, err := callerClosure.Call(vm, data, self.Db.halting)
if err != nil {
self.Logln("exited with errors:", err)
} else {
self.Logf("exited: %v", ret)
}
state.Reset() state.Reset()
@ -142,6 +123,15 @@ func (self *DebuggerWindow) Debug(valueStr, gasStr, gasPriceStr, scriptStr, data
}() }()
} }
func (self *DebuggerWindow) Logf(format string, v ...interface{}) {
self.win.Root().Call("setLog", fmt.Sprintf(format, v...))
}
func (self *DebuggerWindow) Logln(v ...interface{}) {
str := fmt.Sprintln(v...)
self.Logf("%s", str[:len(str)-1])
}
func (self *DebuggerWindow) Next() { func (self *DebuggerWindow) Next() {
self.Db.Next() self.Db.Next()
} }

@ -269,5 +269,5 @@ func (gui *Gui) Transact(recipient, value, gas, gasPrice, data string) (*ethpub.
func (gui *Gui) Create(recipient, value, gas, gasPrice, data string) (*ethpub.PReceipt, error) { func (gui *Gui) Create(recipient, value, gas, gasPrice, data string) (*ethpub.PReceipt, error) {
keyPair := ethutil.GetKeyRing().Get(0) keyPair := ethutil.GetKeyRing().Get(0)
return gui.pub.Create(ethutil.Hex(keyPair.PrivateKey), value, gas, gasPrice, data) return gui.pub.Transact(ethutil.Hex(keyPair.PrivateKey), recipient, value, gas, gasPrice, data)
} }