fixes debugger

This commit is contained in:
andri lim 2019-09-24 20:18:48 +07:00 committed by zah
parent b189e1604f
commit 4c48244cbb
1 changed files with 16 additions and 2 deletions

View File

@ -49,6 +49,7 @@ type
debugMode: bool debugMode: bool
trace: bool trace: bool
vmState: BaseVMState vmState: BaseVMState
debugData: JsonNode
MiningHeader* = object MiningHeader* = object
parentHash*: Hash256 parentHash*: Hash256
@ -528,11 +529,22 @@ func shouldCheckSeal(tester: Tester): bool =
if tester.sealEngine.isSome: if tester.sealEngine.isSome:
result = tester.sealEngine.get() != NoProof result = tester.sealEngine.get() != NoProof
proc collectDebugData(tester: var Tester) =
let vmState = tester.vmState
let tracingResult = if tester.trace: vmState.getTracingResult() else: %[]
tester.debugData.add %{
"blockNumber": %($vmState.blockNumber),
"structLogs": tracingResult,
}
proc runTester(tester: var Tester, chainDB: BaseChainDB, testStatusIMPL: var TestStatus) = proc runTester(tester: var Tester, chainDB: BaseChainDB, testStatusIMPL: var TestStatus) =
discard chainDB.persistHeaderToDb(tester.genesisBlockHeader) discard chainDB.persistHeaderToDb(tester.genesisBlockHeader)
check chainDB.getCanonicalHead().blockHash == tester.genesisBlockHeader.blockHash check chainDB.getCanonicalHead().blockHash == tester.genesisBlockHeader.blockHash
let checkSeal = tester.shouldCheckSeal let checkSeal = tester.shouldCheckSeal
if tester.debugMode:
tester.debugData = newJArray()
for idx, testerBlock in tester.blocks: for idx, testerBlock in tester.blocks:
let shouldBeGoodBlock = testerBlock.blockHeader.isSome let shouldBeGoodBlock = testerBlock.blockHeader.isSome
@ -552,6 +564,9 @@ proc runTester(tester: var Tester, chainDB: BaseChainDB, testStatusIMPL: var Tes
# Block should have caused a validation error # Block should have caused a validation error
check noError == false check noError == false
if tester.debugMode:
tester.collectDebugData()
proc dumpAccount(accountDb: ReadOnlyStateDB, address: EthAddress, name: string): JsonNode = proc dumpAccount(accountDb: ReadOnlyStateDB, address: EthAddress, name: string): JsonNode =
result = %{ result = %{
"name": %name, "name": %name,
@ -572,9 +587,8 @@ proc dumpDebugData(tester: Tester, fixture: JsonNode, fixtureName: string, fixtu
accounts[$account] = dumpAccount(vmState.readOnlyStateDB, account, "acc" & $i) accounts[$account] = dumpAccount(vmState.readOnlyStateDB, account, "acc" & $i)
inc i inc i
let tracingResult = if tester.trace: vmState.getTracingResult() else: %[]
let debugData = %{ let debugData = %{
"structLogs": tracingResult, "debugData": tester.debugData,
"accounts": accounts "accounts": accounts
} }