Tenderly has two core dedicated workflows for transaction debugging, each for different use cases: The Debugger lets you dissect a confirmed onchain transaction line by line, while the Simulator lets you rehearse an unbroadcast transaction without spending or risking any real assets. If you are troubleshooting "why this transaction failed", start with the Debugger. If you want to check "what will happen after I send this transaction", start with the Simulator. Replay itself is not the end goal: the point of replaying is to clearly see state changes and the exact rollback point.

A leading global cryptocurrency platform,suitable for both beginners and experienced traders.
New user benefit: 20% off trading fees upon registration!!
Debugger: Enter from failed transactions to locate rollback points
The Debugger entry is at the top right of the transaction detail page. After you open a specific transaction, click the Debugger button, and you will see 4 sections: top left for Execution Trace, top right for contract source code, bottom left for stack trace, bottom right for call details.
The Execution Trace shows every single call in the full lifecycle of the transaction. If the transaction failed, the trace will mark the exact position where rollback happened. Click that position, and the smart contract source code on the right will jump to the corresponding line. This is the most direct use of Debugger: turn the vague "transaction failed" result, and pinpoint the error to a specific line of Solidity code, or a specific EVM opcode.
Make sure you understand the navigation buttons clearly: Next/Previous moves step by step through the call trace, Step Up and Step Over jump across stack levels. Step Over skips the internal calls inside the current function, Step Up returns to the upper call level. If you only want to check the cross-contract call relationship and avoid getting stuck in internal function details, use the filter at the top of Execution Trace section to switch to display only CALL and DELEGATECALL operations.
The call details panel at bottom right shows decoded details of the current call in JSON format, including function name, opcode, caller address, decoded input and output, and gas usage stats. If you need to check the value of a specific variable at a certain execution step, use the Evaluate function to enter an expression. It supports arrays and structs, but does not support tuples.
Simulator: Pre-test transactions, state override is the key
You can access the Simulator from its dedicated page, or click Re-Simulate on any transaction detail page to load all parameters of an existing transaction into the builder. A single simulation is a one-step bundle: you can set the From address, target contract, function and parameters, then run it.
A unique feature of the Simulator is cheatcodes, which take effect immediately before the simulation step runs. The most commonly used cheatcodes include:
Fund address: Add token balance to any arbitrary address, so you can test transfers without holding the real assets
State overrides: Override contract storage slots, native token balance or contract bytecode
Increase block / Override timestamp: Adjust block context parameters
Override gas & value: Set custom gas limit and attached ETH value
If you are testing a workflow that requires approve first then transferFrom, a single simulation step is not enough. Use Simulation bundle, which supports up to 5 steps that share the same state: run approve as the first step, then transferFrom as the second step, you can see all state changes caused by previous steps after each step.
After the simulation runs, the right panel will show full results: decoded output, gas used, emitted events, state changes, fund flow and Gas Profiler. The standard to verify if a simulation is successful is not the success pop-up, but whether the state changes match your expectation. The State Changes tab will list all modified storage variables and balances, with both old and new values. If you broadcast a real transaction only after seeing the "simulation success" notification, you may miss some unexpected contract state modifications.
Replay and State Verification: Two easily confused concepts
The word "replay" has at least two different meanings in Tenderly. Debugger replay is a line-by-line retrospective of the execution process of a confirmed onchain transaction, it never modifies any state, it only lets you clearly see what happened on chain in history. Simulator replay (Re-Simulate) loads parameters of an existing transaction into the builder, and re-runs it on the latest network state or a specified block. Its result may differ from the original transaction, as the onchain state has already changed.
When you verify state, note that Debugger and Simulator show information at different layers. The State Changes panel in Debugger shows storage changes during the execution of this confirmed transaction. The State Changes panel in Simulator shows the final state after the simulation finishes. If you used cheatcodes such as Fund address, the simulation result will include these manually injected states, and cannot be directly treated as real onchain results.
A practical verification workflow: first run pre-tests with Simulator, confirm the State Changes and Fund Flow match your intention; then broadcast the real transaction; after you get the txHash, use Debugger to check if the actual execution path is consistent with your simulation. Any inconsistency is the difference you need to troubleshoot.
When your Simulator result does not match expectation
First check if cheatcodes interfere with the result. If you used Fund address to top up an address, the balance of that address in simulation is manually set, not matching the real onchain state. If you used State overrides to modify storage slots, all subsequent calls that depend on that storage slot will run based on the modified value. These changes are visible in the State Changes tab, but they are easy to miss.
Another common issue is the selection of block number and transaction_index. Simulator runs on the latest state of the Pending block by default. If you want to reproduce the conditions at a specific historical point, you need to specify the exact block_number. The transaction_index parameter controls "after which transaction in the target block the simulation runs": 0 means running before the first transaction of the block, the total transaction count of the block means running after the last transaction of the block. Wrong selection of these two parameters will make the simulation result not match the scenario you are trying to reproduce.
Where should you get started
If you already have a failed transaction, copy its txHash, open it in Tenderly Explorer, click Debugger, and find the red rollback point in the Execution Trace. That is the starting point for your troubleshooting.
If you haven't broadcast your transaction yet, and want to verify if a contract call will work, go to the Simulator page, select the target network and contract, fill in the parameters, then run the simulation. If you meet issues like missing approval or insufficient balance, use cheatcodes to inject the required state and test again. Only broadcast the real transaction after the simulation passes.
No matter which workflow you use, the completion standard of verification is that you see the exact state changes and execution path, not just a "success" badge. The value of Tenderly is to let you see full details before broadcasting a transaction or after a transaction fails, and you need to confirm these details in the State Changes and Execution Trace panels manually.

A leading global cryptocurrency platform,suitable for both beginners and experienced traders.
New user benefit: 20% off trading fees upon registration!!
References
- Tenderly Documentation: How to Use Tenderly Debugger, page published or updated on 2026-10-14; verified on 2026-10-19.
- Tenderly Documentation: How to Use Tenderly Debugger (Chinese Version), page published or updated on 2026-08-24; verified on 2026-10-19.
- Tenderly Documentation: Use Advanced Debugger to Evaluate Expressions, page published or updated on 2026-08-24; verified on 2026-10-19.
- Tenderly Documentation: Simulator UI Guide, page published or updated on 2026-08-27; verified on 2026-10-19.
- Tenderly Documentation: Single Transaction Simulations, page published or updated on 2026-07-07; verified on 2026-10-19.


