Using Python debugger#
woke test and
woke fuzz support entering pdb, the Python debugger, when an error occurs.
Woke uses an enhanced version of the Python debugger, pdrb, which provides a more user-friendly interface.
It is also possible to enter the debugger manually by inserting a
breakpoint() statement in the code.
from woke.testing import * @default_chain.connect() def test_breakpoint(): breakpoint() block = default_chain.blocks
breakpoint() is not currently supported with
Inside pdbr, any expression can be evaluated by typing it and pressing
This can be used to get the value of a variable, to call a function, including contract functions, or even to deploy a new contract.
help: show help
continue: continue execution
next: step over the next line
list: show the current line and a few lines around it
quit: quit the debugger
down: move up or down the call stack
Every transaction object has a
call_trace property that visualizes the call stack of the transaction.
It can be used to debug failing transactions.
from woke.testing import * from pytypes.contracts.Counter import Counter from pytypes.contracts.Gateway import Gateway @default_chain.connect() def test_call_trace(): default_chain.set_default_accounts(default_chain.accounts) gateway = Gateway.deploy() counter = Counter.deploy() counter.addToWhitelist(gateway) tx = gateway.execute( counter, Abi.encode_call(counter.decrement, ), confirmations=0, ) print(tx.call_trace) tx = gateway.execute( counter, Abi.encode_call(counter.increment, ), ) print(tx.call_trace)
Internal calls are not currently visualized in call traces.
console.sol library from Hardhat
may be the easiest way to debug a contract. Logs can be accessed through the
console_logs property of a transaction object.
Console logs are available even for failed transactions.
from woke.testing import * from pytypes.contracts.Counter import Counter @default_chain.connect() def test_console_logs(): default_chain.tx_callback = lambda tx: print(tx.console_logs) default_chain.set_default_accounts(default_chain.accounts) counter = Counter.deploy() counter.increment() counter.setCount(42)
Woke integrates the
console.sol library implementing the same functionalities as Hardhat's
It can serve as a drop-in replacement in case that the tested project is not using Hardhat.
console_logs is not currently supported with Hardhat and Ganache.