Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
B
baas-ide
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
guxukai
baas-ide
Commits
7df0cf27
Commit
7df0cf27
authored
Oct 11, 2018
by
Iuri Matias
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add basic cmd line debugger
parent
ffa2f6fb
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
162 additions
and
139 deletions
+162
-139
rdb.js
remix-debug/rdb.js
+59
-0
contextManager.js
remix-debug/src/cmdline/contextManager.js
+0
-0
index.js
remix-debug/src/cmdline/index.js
+103
-0
test.js
remix-debug/test.js
+0
-139
No files found.
remix-debug/rdb.js
0 → 100644
View file @
7df0cf27
var
CmdLine
=
require
(
'./src/cmdline/index.js'
)
var
compilation
=
require
(
'./compilation.json'
)
var
cmd_line
=
new
CmdLine
()
cmd_line
.
connect
(
"http"
,
"http://localhost:8545"
)
cmd_line
.
loadCompilationResult
(
compilation
)
cmd_line
.
initDebugger
()
var
deployContract
=
function
(
cb
)
{
let
_web3
=
cmd_line
.
debugger
.
debugger
.
web3
let
blockNumber
=
null
let
txNumber
=
null
let
tx
=
null
let
code
=
compilation
.
data
.
contracts
[
'browser/ballot.sol'
].
Ballot
.
evm
.
bytecode
.
object
_web3
.
eth
.
sendTransaction
({
data
:
"0x"
+
code
,
from
:
_web3
.
eth
.
accounts
[
0
],
gas
:
800000
},
cb
)
}
deployContract
((
err
,
tx
)
=>
{
cmd_line
.
startDebug
(
tx
,
"browser/ballot.sol"
)
})
const
repl
=
require
(
'repl'
)
const
r
=
repl
.
start
({
prompt
:
'> '
,
eval
:
(
cmd
,
context
,
filename
,
cb
)
=>
{
let
command
=
cmd
.
trim
()
if
(
command
===
'next'
||
command
===
'n'
)
{
cmd_line
.
debugger
.
step_manager
.
stepOverForward
()
}
if
(
command
===
'previous'
||
command
===
'p'
||
command
===
'prev'
)
{
cmd_line
.
debugger
.
step_manager
.
stepOverBack
()
}
if
(
command
===
'step'
||
command
===
's'
)
{
cmd_line
.
debugger
.
step_manager
.
stepIntoForward
()
}
if
(
command
===
'stepback'
||
command
===
'sb'
)
{
cmd_line
.
debugger
.
step_manager
.
stepIntoBack
()
}
if
(
command
===
'exit'
||
command
===
'quit'
)
{
process
.
exit
(
0
)
}
if
(
command
===
'var local'
||
command
===
'v l'
||
command
===
'vl'
)
{
cmd_line
.
displayLocals
()
}
if
(
command
===
'var global'
||
command
===
'v g'
||
command
===
'vg'
)
{
cmd_line
.
displayGlobals
()
}
if
(
command
.
split
(
' '
)[
0
]
===
'jump'
)
{
let
stepIndex
=
parseInt
(
command
.
split
(
' '
)[
1
],
10
)
cmd_line
.
debugger
.
step_manager
.
jumpTo
(
stepIndex
)
}
cb
(
null
,
''
);
}
});
remix-debug/contextManager.js
→
remix-debug/
src/cmdline/
contextManager.js
View file @
7df0cf27
File moved
remix-debug/src/cmdline/index.js
0 → 100644
View file @
7df0cf27
var
Web3
=
require
(
'web3'
)
var
Debugger
=
require
(
'../debugger/debugger.js'
)
var
ContextManager
=
require
(
'./contextManager.js'
)
class
CmdLine
{
constructor
()
{
}
connect
(
providerType
,
url
)
{
if
(
providerType
!==
'http'
)
throw
new
Error
(
"unsupported provider type"
)
this
.
web3
=
new
Web3
(
new
Web3
.
providers
.
HttpProvider
(
url
))
}
loadCompilationResult
(
compilationResult
)
{
this
.
compilation
=
{}
this
.
compilation
.
lastCompilationResult
=
compilationResult
}
initDebugger
()
{
const
self
=
this
this
.
contextManager
=
new
ContextManager
()
this
.
debugger
=
new
Debugger
({
web3
:
this
.
contextManager
.
getWeb3
(),
compiler
:
this
.
compilation
})
this
.
contextManager
.
event
.
register
(
'providerChanged'
,
()
=>
{
self
.
debugger
.
updateWeb3
(
self
.
contextManager
.
getWeb3
())
})
this
.
contextManager
.
initProviders
()
this
.
contextManager
.
addProvider
(
'debugger_web3'
,
this
.
web3
)
this
.
contextManager
.
switchProvider
(
'debugger_web3'
)
}
// TODO: is filename really necessary?
startDebug
(
txNumber
,
filename
)
{
const
self
=
this
this
.
debugger
.
debug
(
null
,
txNumber
,
null
,
()
=>
{
self
.
debugger
.
event
.
register
(
'newSourceLocation'
,
function
(
lineColumnPos
,
rawLocation
)
{
console
.
dir
(
"newSourceLocation"
)
if
(
!
lineColumnPos
||
!
lineColumnPos
.
start
)
return
;
let
line
line
=
self
.
compilation
.
lastCompilationResult
.
source
.
sources
[
'browser/ballot.sol'
].
content
.
split
(
"
\
n"
)[
lineColumnPos
.
start
.
line
-
1
]
console
.
dir
(
line
)
line
=
self
.
compilation
.
lastCompilationResult
.
source
.
sources
[
'browser/ballot.sol'
].
content
.
split
(
"
\
n"
)[
lineColumnPos
.
start
.
line
]
console
.
dir
(
line
)
console
.
dir
(
"^^^^^^^^^^^^^^^ "
)
line
=
self
.
compilation
.
lastCompilationResult
.
source
.
sources
[
'browser/ballot.sol'
].
content
.
split
(
"
\
n"
)[
lineColumnPos
.
start
.
line
+
1
]
console
.
dir
(
line
)
});
self
.
debugger
.
step_manager
.
event
.
register
(
'stepChanged'
,
(
stepIndex
)
=>
{
// console.dir("---------")
// console.dir("stepChanged: " + stepIndex)
// console.dir("---------")
})
self
.
debugger
.
step_manager
.
event
.
register
(
'traceLengthChanged'
,
(
traceLength
)
=>
{
// console.dir("---------")
// console.dir("traceLengthChanged: " + traceLength)
// console.dir("---------")
});
self
.
debugger
.
vmDebuggerLogic
.
event
.
register
(
'solidityState'
,
(
data
)
=>
{
self
.
solidityState
=
data
});
self
.
debugger
.
vmDebuggerLogic
.
event
.
register
(
'solidityLocals'
,
(
data
)
=>
{
self
.
solidityLocals
=
data
});
self
.
debugger
.
vmDebuggerLogic
.
event
.
register
(
'traceManagerMemoryUpdate'
,
(
data
)
=>
{
// console.dir("---------")
// console.dir("traceManagerMemoryUpdate")
// console.dir(data)
// console.dir("---------")
});
})
}
displayLocals
()
{
console
.
dir
(
this
.
solidityLocals
)
}
displayGlobals
()
{
console
.
dir
(
this
.
solidityState
)
if
(
this
.
solidityState
&&
this
.
solidityState
.
voters
)
{
console
.
dir
(
this
.
solidityState
.
voters
)
console
.
dir
(
this
.
solidityState
.
voters
.
value
)
}
}
}
module
.
exports
=
CmdLine
remix-debug/test.js
deleted
100644 → 0
View file @
ffa2f6fb
// options
// * executionContext
// * offsetToLineColumnConverter
// *** disable for now
// * compiler
// ** lastCompilationResult
var
remixLib
=
require
(
'remix-lib'
)
//var executionContext = remixLib.execution.executionContext
var
Debugger
=
require
(
'./src/debugger/debugger.js'
)
var
compilation
=
{
}
compilation
.
lastCompilationResult
=
require
(
'./compilation.json'
)
// connecting to a node
var
Web3
=
require
(
'web3'
)
web3
=
new
Web3
(
new
Web3
.
providers
.
HttpProvider
(
"http://localhost:8545"
))
// global.my_web3 = web3
// with vm
var
ContextManager
=
require
(
'./contextManager.js'
)
var
contextManager
=
new
ContextManager
()
_debugger
=
new
Debugger
({
//web3: web3,
web3
:
contextManager
.
getWeb3
(),
//executionContext: executionContext,
//offsetToLineColumnConverter: this.registry.get('offsettolinecolumnconverter').api,
compiler
:
compilation
})
// with vm
contextManager
.
event
.
register
(
'providerChanged'
,
()
=>
{
_debugger
.
updateWeb3
(
contextManager
.
getWeb3
())
})
contextManager
.
initProviders
()
contextManager
.
addProvider
(
'myweb3'
,
web3
)
contextManager
.
switchProvider
(
'myweb3'
)
//contextManager.switchProvider('vm')
_debugger
.
event
.
register
(
'debuggerStatus'
,
function
(
isActive
)
{
console
.
dir
(
"debugger status"
)
console
.
dir
(
isActive
)
});
_debugger
.
event
.
register
(
'newSourceLocation'
,
function
(
lineColumnPos
,
rawLocation
)
{
console
.
dir
(
"newSourceLocation"
)
if
(
!
lineColumnPos
||
!
lineColumnPos
.
start
)
return
;
let
line
//let line = compilation.lastCompilationResult.source.sources['browser/ballot.sol'].content.split("\n")[lineColumnPos.start.line].slice(lineColumnPos.start.column, lineColumnPos.start.column + lineColumnPos.end.column)
line
=
compilation
.
lastCompilationResult
.
source
.
sources
[
'browser/ballot.sol'
].
content
.
split
(
"
\
n"
)[
lineColumnPos
.
start
.
line
-
1
]
console
.
dir
(
line
)
line
=
compilation
.
lastCompilationResult
.
source
.
sources
[
'browser/ballot.sol'
].
content
.
split
(
"
\
n"
)[
lineColumnPos
.
start
.
line
]
console
.
dir
(
line
)
console
.
dir
(
"^^^^^^^^^^^^^^^ "
)
line
=
compilation
.
lastCompilationResult
.
source
.
sources
[
'browser/ballot.sol'
].
content
.
split
(
"
\
n"
)[
lineColumnPos
.
start
.
line
+
1
]
console
.
dir
(
line
)
});
_debugger
.
event
.
register
(
'debuggerUnloaded'
,
function
()
{
console
.
dir
(
"debugger unloaded"
)
});
let
_web3
=
_debugger
.
debugger
.
web3
// let web3 = _debugger.debugger.executionContext.web3()
let
blockNumber
=
null
let
txNumber
=
null
let
tx
=
null
let
code
=
compilation
.
lastCompilationResult
.
data
.
contracts
[
'browser/ballot.sol'
].
Ballot
.
evm
.
bytecode
.
object
_web3
.
eth
.
sendTransaction
({
data
:
"0x"
+
code
,
from
:
_web3
.
eth
.
accounts
[
0
],
gas
:
800000
},
(
err
,
txHash
)
=>
{
//console.dir(err)
//console.dir(txHash)
txNumber
=
txHash
global
.
mytx
=
txHash
_debugger
.
event
.
register
(
'newSourceLocation'
,
(
lineColumnPos
,
rawLocation
)
=>
{
console
.
dir
(
"************ new source location *********"
)
console
.
dir
(
lineColumnPos
)
console
.
dir
(
rawLocation
)
})
_debugger
.
debug
(
blockNumber
,
txNumber
,
tx
,
()
=>
{
_debugger
.
step_manager
.
event
.
register
(
'stepChanged'
,
(
stepIndex
)
=>
{
console
.
dir
(
"---------"
)
console
.
dir
(
"stepChanged: "
+
stepIndex
)
console
.
dir
(
"---------"
)
})
_debugger
.
step_manager
.
event
.
register
(
'traceLengthChanged'
,
(
traceLength
)
=>
{
console
.
dir
(
"---------"
)
console
.
dir
(
"traceLengthChanged: "
+
traceLength
)
console
.
dir
(
"---------"
)
});
_debugger
.
vmDebuggerLogic
.
event
.
register
(
'codeManagerChanged'
,
(
code
,
address
,
index
)
=>
{
console
.
dir
(
"---------"
)
console
.
dir
(
"codeManagerChanged"
)
console
.
dir
(
"address: "
+
address
)
console
.
dir
(
"asm code: "
+
code
[
index
])
console
.
dir
(
"---------"
)
});
_debugger
.
vmDebuggerLogic
.
event
.
register
(
'traceManagerMemoryUpdate'
,
(
data
)
=>
{
console
.
dir
(
"---------"
)
console
.
dir
(
"traceManagerMemoryUpdate"
)
console
.
dir
(
data
)
console
.
dir
(
"---------"
)
});
console
.
dir
(
'debugger started'
)
})
})
//_debugger.debug(blockNumber, txNumber, tx, () => {
// console.dir('debugger started')
//})
//_debugger.debugger.web3.eth.accounts()
console
.
dir
(
"done!"
)
module
.
exports
=
_debugger
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment