good morning!!!!
Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
B
bor
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package registry
Container registry
Harbor Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
open
bor
Commits
0076fa58
Commit
0076fa58
authored
Jul 2, 2014
by
Jeffrey Wilcke
Browse files
Options
Downloads
Plain Diff
Merge branch 'develop'
parents
98f21669
a0dd1ebb
Branches
Branches containing commit
Tags
Tags containing commit
No related merge requests found
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
ethereal/assets/debugger/debugger.qml
+58
-7
58 additions, 7 deletions
ethereal/assets/debugger/debugger.qml
ethereal/debugger.go
+65
-18
65 additions, 18 deletions
ethereal/debugger.go
with
123 additions
and
25 deletions
ethereal/assets/debugger/debugger.qml
+
58
−
7
View file @
0076fa58
...
@@ -12,7 +12,7 @@ ApplicationWindow {
...
@@ -12,7 +12,7 @@ ApplicationWindow {
minimumWidth
:
1280
minimumWidth
:
1280
minimumHeight
:
700
minimumHeight
:
700
width
:
1290
width
:
1290
height
:
7
0
0
height
:
7
5
0
property
alias
codeText
:
codeEditor
.
text
property
alias
codeText
:
codeEditor
.
text
property
alias
dataText
:
rawDataField
.
text
property
alias
dataText
:
rawDataField
.
text
...
@@ -31,6 +31,12 @@ ApplicationWindow {
...
@@ -31,6 +31,12 @@ ApplicationWindow {
shortcut
:
"
Ctrl+n
"
shortcut
:
"
Ctrl+n
"
onTriggered
:
dbg
.
next
()
onTriggered
:
dbg
.
next
()
}
}
MenuItem
{
text
:
"
Continue
"
shortcut
:
"
Ctrl+c
"
onTriggered
:
dbg
.
continue
()
}
}
}
}
}
...
@@ -39,6 +45,7 @@ ApplicationWindow {
...
@@ -39,6 +45,7 @@ ApplicationWindow {
property
var
asmModel
:
ListModel
{
property
var
asmModel
:
ListModel
{
id
:
asmModel
id
:
asmModel
}
}
TableView
{
TableView
{
id
:
asmTableView
id
:
asmTableView
width
:
200
width
:
200
...
@@ -187,6 +194,36 @@ ApplicationWindow {
...
@@ -187,6 +194,36 @@ ApplicationWindow {
}
}
}
}
function
exec
()
{
dbg
.
execCommand
(
dbgCommand
.
text
);
dbgCommand
.
text
=
""
;
}
statusBar
:
StatusBar
{
height
:
30
TextField
{
id
:
dbgCommand
y
:
1
x
:
asmTableView
.
width
width
:
500
placeholderText
:
"
Debugger command (help for help)
"
Keys.onReturnPressed
:
{
exec
()
}
}
Button
{
anchors
{
left
:
dbgCommand
.
right
}
text
:
"
Exec
"
onClicked
:
{
exec
()
}
}
}
toolBar
:
ToolBar
{
toolBar
:
ToolBar
{
RowLayout
{
RowLayout
{
spacing
:
5
spacing
:
5
...
@@ -208,11 +245,13 @@ ApplicationWindow {
...
@@ -208,11 +245,13 @@ ApplicationWindow {
}
}
text
:
"
Next
"
text
:
"
Next
"
}
}
CheckBox
{
id
:
breakEachLine
Button
{
objectName
:
"
breakEachLine
"
id
:
debugContinueButton
text
:
"
Break each instruction
"
onClicked
:
{
checked
:
true
dbg
.
continue
()
}
text
:
"
Continue
"
}
}
}
}
}
}
...
@@ -261,7 +300,19 @@ ApplicationWindow {
...
@@ -261,7 +300,19 @@ ApplicationWindow {
}
}
function
setLog
(
msg
)
{
function
setLog
(
msg
)
{
logModel
.
insert
(
0
,
{
message
:
msg
})
// Remove first item once we've reached max log items
if
(
logModel
.
count
>
250
)
{
logModel
.
remove
(
0
)
}
if
(
msg
.
len
!=
0
)
{
if
(
logTableView
.
flickableItem
.
atYEnd
)
{
logModel
.
append
({
message
:
msg
})
logTableView
.
positionViewAtRow
(
logTableView
.
rowCount
-
1
,
ListView
.
Contain
)
}
else
{
logModel
.
append
({
message
:
msg
})
}
}
}
}
function
clearLog
()
{
function
clearLog
()
{
...
...
This diff is collapsed.
Click to expand it.
ethereal/debugger.go
+
65
−
18
View file @
0076fa58
...
@@ -6,6 +6,7 @@ import (
...
@@ -6,6 +6,7 @@ import (
"github.com/ethereum/eth-go/ethutil"
"github.com/ethereum/eth-go/ethutil"
"github.com/go-qml/qml"
"github.com/go-qml/qml"
"math/big"
"math/big"
"strconv"
"strings"
"strings"
)
)
...
@@ -13,7 +14,10 @@ type DebuggerWindow struct {
...
@@ -13,7 +14,10 @@ type DebuggerWindow struct {
win
*
qml
.
Window
win
*
qml
.
Window
engine
*
qml
.
Engine
engine
*
qml
.
Engine
lib
*
UiLib
lib
*
UiLib
vm
*
ethchain
.
Vm
Db
*
Debugger
Db
*
Debugger
breakPoints
[]
int64
}
}
func
NewDebuggerWindow
(
lib
*
UiLib
)
*
DebuggerWindow
{
func
NewDebuggerWindow
(
lib
*
UiLib
)
*
DebuggerWindow
{
...
@@ -26,9 +30,9 @@ func NewDebuggerWindow(lib *UiLib) *DebuggerWindow {
...
@@ -26,9 +30,9 @@ func NewDebuggerWindow(lib *UiLib) *DebuggerWindow {
}
}
win
:=
component
.
CreateWindow
(
nil
)
win
:=
component
.
CreateWindow
(
nil
)
db
:=
&
Debugger
{
win
,
make
(
chan
bool
),
make
(
chan
bool
),
true
,
false
,
true
}
db
:=
&
Debugger
{
win
,
make
(
chan
bool
),
make
(
chan
bool
),
true
,
false
}
return
&
DebuggerWindow
{
engine
:
engine
,
win
:
win
,
lib
:
lib
,
Db
:
db
}
return
&
DebuggerWindow
{
engine
:
engine
,
win
:
win
,
lib
:
lib
,
Db
:
db
,
vm
:
&
ethchain
.
Vm
{}
}
}
}
func
(
self
*
DebuggerWindow
)
Show
()
{
func
(
self
*
DebuggerWindow
)
Show
()
{
...
@@ -59,7 +63,6 @@ func (self *DebuggerWindow) Debug(valueStr, gasStr, gasPriceStr, scriptStr, data
...
@@ -59,7 +63,6 @@ func (self *DebuggerWindow) Debug(valueStr, gasStr, gasPriceStr, scriptStr, data
if
!
self
.
Db
.
done
{
if
!
self
.
Db
.
done
{
self
.
Db
.
Q
<-
true
self
.
Db
.
Q
<-
true
}
}
self
.
Db
.
breakOnInstr
=
self
.
win
.
Root
()
.
ObjectByName
(
"breakEachLine"
)
.
Bool
(
"checked"
)
defer
func
()
{
defer
func
()
{
if
r
:=
recover
();
r
!=
nil
{
if
r
:=
recover
();
r
!=
nil
{
...
@@ -90,7 +93,6 @@ func (self *DebuggerWindow) Debug(valueStr, gasStr, gasPriceStr, scriptStr, data
...
@@ -90,7 +93,6 @@ func (self *DebuggerWindow) Debug(valueStr, gasStr, gasPriceStr, scriptStr, data
dis
:=
ethchain
.
Disassemble
(
script
)
dis
:=
ethchain
.
Disassemble
(
script
)
self
.
win
.
Root
()
.
Call
(
"clearAsm"
)
self
.
win
.
Root
()
.
Call
(
"clearAsm"
)
self
.
win
.
Root
()
.
Call
(
"clearLog"
)
for
_
,
str
:=
range
dis
{
for
_
,
str
:=
range
dis
{
self
.
win
.
Root
()
.
Call
(
"setAsm"
,
str
)
self
.
win
.
Root
()
.
Call
(
"setAsm"
,
str
)
...
@@ -125,7 +127,9 @@ func (self *DebuggerWindow) Debug(valueStr, gasStr, gasPriceStr, scriptStr, data
...
@@ -125,7 +127,9 @@ func (self *DebuggerWindow) Debug(valueStr, gasStr, gasPriceStr, scriptStr, data
})
})
vm
.
Verbose
=
true
vm
.
Verbose
=
true
vm
.
Hook
=
self
.
Db
.
halting
vm
.
Hook
=
self
.
Db
.
halting
vm
.
BreakPoints
=
self
.
breakPoints
self
.
vm
=
vm
self
.
Db
.
done
=
false
self
.
Db
.
done
=
false
self
.
Logf
(
"callsize %d"
,
len
(
script
))
self
.
Logf
(
"callsize %d"
,
len
(
script
))
go
func
()
{
go
func
()
{
...
@@ -165,12 +169,57 @@ func (self *DebuggerWindow) Next() {
...
@@ -165,12 +169,57 @@ func (self *DebuggerWindow) Next() {
self
.
Db
.
Next
()
self
.
Db
.
Next
()
}
}
func
(
self
*
DebuggerWindow
)
Continue
()
{
self
.
vm
.
Stepping
=
false
self
.
Next
()
}
func
(
self
*
DebuggerWindow
)
ExecCommand
(
command
string
)
{
if
len
(
command
)
>
0
{
cmd
:=
strings
.
Split
(
command
,
" "
)
switch
cmd
[
0
]
{
case
"help"
:
self
.
Logln
(
"Debgger commands:"
)
self
.
Logln
(
"break, bp Set breakpoint"
)
case
"break"
,
"bp"
:
if
len
(
cmd
)
>
1
{
lineNo
,
err
:=
strconv
.
Atoi
(
cmd
[
1
])
if
err
!=
nil
{
self
.
Logln
(
err
)
break
}
self
.
breakPoints
=
append
(
self
.
breakPoints
,
int64
(
lineNo
))
self
.
vm
.
BreakPoints
=
self
.
breakPoints
self
.
Logf
(
"break point set on instruction %d"
,
lineNo
)
}
else
{
self
.
Logf
(
"'%s' requires line number"
,
cmd
[
0
])
}
case
"clear"
:
if
len
(
cmd
)
>
1
{
switch
cmd
[
1
]
{
case
"break"
,
"bp"
:
self
.
breakPoints
=
nil
self
.
vm
.
BreakPoints
=
nil
self
.
Logln
(
"Breakpoints cleared"
)
default
:
self
.
Logf
(
"clear '%s' is not valid"
,
cmd
[
1
])
}
}
else
{
self
.
Logln
(
"'clear' requires sub command"
)
}
default
:
self
.
Logf
(
"Unknown command %s"
,
cmd
[
0
])
}
}
}
type
Debugger
struct
{
type
Debugger
struct
{
win
*
qml
.
Window
win
*
qml
.
Window
N
chan
bool
N
chan
bool
Q
chan
bool
Q
chan
bool
done
,
interrupt
bool
done
,
interrupt
bool
breakOnInstr
bool
}
}
type
storeVal
struct
{
type
storeVal
struct
{
...
@@ -197,7 +246,6 @@ func (d *Debugger) halting(pc int, op ethchain.OpCode, mem *ethchain.Memory, sta
...
@@ -197,7 +246,6 @@ func (d *Debugger) halting(pc int, op ethchain.OpCode, mem *ethchain.Memory, sta
d
.
win
.
Root
()
.
Call
(
"setStorage"
,
storeVal
{
fmt
.
Sprintf
(
"% x"
,
key
),
fmt
.
Sprintf
(
"% x"
,
node
.
Str
())})
d
.
win
.
Root
()
.
Call
(
"setStorage"
,
storeVal
{
fmt
.
Sprintf
(
"% x"
,
key
),
fmt
.
Sprintf
(
"% x"
,
node
.
Str
())})
})
})
if
d
.
breakOnInstr
{
out
:
out
:
for
{
for
{
select
{
select
{
...
@@ -210,7 +258,6 @@ func (d *Debugger) halting(pc int, op ethchain.OpCode, mem *ethchain.Memory, sta
...
@@ -210,7 +258,6 @@ func (d *Debugger) halting(pc int, op ethchain.OpCode, mem *ethchain.Memory, sta
return
false
return
false
}
}
}
}
}
return
true
return
true
}
}
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment