trufflesuite / truffle

:warning: The Truffle Suite is being sunset. For information on ongoing support, migration options and FAQs, visit the Consensys blog. Thank you for all the support over the years.
https://consensys.io/blog/consensys-announces-the-sunset-of-truffle-and-ganache-and-new-hardhat?utm_source=github&utm_medium=referral&utm_campaign=2023_Sep_truffle-sunset-2023_announcement_
MIT License
14.02k stars 2.31k forks source link

`truffle test --debug` hangs without starting the debugger #6163

Open aardvarkk opened 1 year ago

aardvarkk commented 1 year ago

Issue

When I try to use in-test debugging, it hangs my terminal. Ganache seems to show the contract getting deployed successfully, and the output from the truffle test command shows the contract getting successfully compiled.


> Artifacts written to /var/folders/4x/gnfwkbhn3dv7277cbcd0wjr80000gn/T/test--3627-470AjUBtVWpk
> Compiled successfully using:
   - solc: 0.8.21+commit.d9974bed.Emscripten.clang

However, then it just says "Contract: MyContract" and stalls. I can see pairs of calls to eth_getBlockByNumber being called about once per second in the ganache output. My contract

Steps to Reproduce

Expected Behavior

The debugger should start in the terminal when running truffle test --debug

Actual Results

The terminal hangs, showing only "Contract: MyContract".

Environment

aardvarkk commented 1 year ago

For more context, I've started diving into the debugger a bit and it looks like it's stuck in the checkConfirmation function inside web3.js? It keeps getting called over and over and doesn't seem to resolve properly for some reason.

It looks like confirmationCount keeps having the value 2, and it maybe wants to equal method.transactionConfirmationBlocks + 1, which is 25. Every time the polling happens the values stay the same.

gnidan commented 1 year ago

Hm, you can try disabling the confirmation listener. Not sure if that would make it work better or if it'd cause it to stop working altogether, but it's worth a shot :)

See docs here about how to specify disableConfirmationListener

aardvarkk commented 1 year ago

@gnidan Well it changed the output a bit, but it's still hanging. Now when I inspect the ganache output I see a bit more "stuff":

eth_getTransactionReceipt
eth_getCode
evm_snapshot
Saved snapshot #1
net_version
eth_blockNumber
eth_getBlockByNumber
eth_call

Normally it'd just keep repeating the eth_getBlockByNumber until I set up the disableConfirmationListener. Now it actually tries to call it, but then the truffle test code just sits indefinitely as it did before.

aardvarkk commented 1 year ago

I thought maybe this was a MacOS problem so I tried on my Linux machine with the exact same results.

gnidan commented 1 year ago

Hm, really weird. How much gas does the eth_call require? It's possible that the hanging you're observing is just Ganache taking a long time to execute eth_call. This guess is a long shot.

Not sure what else might be going wrong here. Maybe you could try running truffle test --debug inside truffle console --verbose-rpc (while connecting to a separately running Ganache instance). That might give you a bit more detail.