pub struct DebuggerState {
pub current_step: usize,
pub display_mode: DisplayMode,
/* private fields */
}Fields§
§current_step: usize§display_mode: DisplayModeImplementations§
Source§impl DebuggerState
impl DebuggerState
pub fn new() -> Self
Sourcepub fn load_trace(&mut self, trace: TransactionTrace) -> SoldbResult<()>
pub fn load_trace(&mut self, trace: TransactionTrace) -> SoldbResult<()>
Loads a trace and maps its call structure. Source lines arrive with
DebuggerState::attach_debug_info; until then stepping is by instruction. Fails
on a trace whose top-level calls no execution produces.
Sourcepub fn load_trace_with_debug_info(
&mut self,
trace: TransactionTrace,
contracts: Vec<ContractDebugInfo>,
) -> SoldbResult<()>
pub fn load_trace_with_debug_info( &mut self, trace: TransactionTrace, contracts: Vec<ContractDebugInfo>, ) -> SoldbResult<()>
Loads a trace and maps every step through the contracts’ debug info, as
DebuggerState::load_trace followed by DebuggerState::attach_debug_info does,
but maps the trace once instead of twice. Fails on a trace whose top-level calls no
execution produces.
Sourcepub fn attach_debug_info(&mut self, contracts: Vec<ContractDebugInfo>)
pub fn attach_debug_info(&mut self, contracts: Vec<ContractDebugInfo>)
Maps every step through the contracts’ debug info, enabling source-level stepping, line and function breakpoints, and source locations in frames.
Sourcepub fn storage_words(&self) -> Option<StorageWords<'_>>
pub fn storage_words(&self) -> Option<StorageWords<'_>>
The storage words known at the current step, in the storage context it runs in.
Sourcepub fn transient_words(&self) -> Option<StorageWords<'_>>
pub fn transient_words(&self) -> Option<StorageWords<'_>>
The transient storage words known at the current step, in the context it runs in.
Sourcepub fn storage_words_with_chain<'a>(
&'a self,
chain: Option<&'a dyn ChainStorage>,
) -> Option<StorageWords<'a>>
pub fn storage_words_with_chain<'a>( &'a self, chain: Option<&'a dyn ChainStorage>, ) -> Option<StorageWords<'a>>
The same words, with a chain the frontend can read slots the transaction never touched from.
Sourcepub fn storage_address(&self) -> Option<&str>
pub fn storage_address(&self) -> Option<&str>
The account whose storage the current step reads and writes.
Sourcepub fn storage_layout(&self) -> Option<&StorageLayout>
pub fn storage_layout(&self) -> Option<&StorageLayout>
The storage layout of the contract executing at the current step, when it was compiled with one.
Sourcepub fn transient_storage_layout(&self) -> Option<&StorageLayout>
pub fn transient_storage_layout(&self) -> Option<&StorageLayout>
The layout of the transient state variables of the contract executing at the
current step, when it was compiled with one.
pub fn trace(&self) -> Option<&TransactionTrace>
pub fn step_map(&self) -> Option<&StepMap>
Sourcepub fn has_source(&self) -> bool
pub fn has_source(&self) -> bool
Whether any step maps to a source line, which is what source-level stepping needs.
pub fn current_step_data(&self) -> Option<StepView<'_>>
Sourcepub fn location(&self) -> Option<StepLocation>
pub fn location(&self) -> Option<StepLocation>
The source location of the current step, when it has one.
pub fn step_count(&self) -> usize
pub fn breakpoints(&self) -> &[Breakpoint]
pub fn set_display_mode(&mut self, mode: DisplayMode) -> StepOutcome
pub fn next_instruction(&mut self) -> StepOutcome
Sourcepub fn next_source(&mut self) -> StepOutcome
pub fn next_source(&mut self) -> StepOutcome
Moves to the start of the next source line in this frame or a caller’s, stopping early at a breakpoint in code it steps over. Without source information this is one instruction.
Sourcepub fn step_into(&mut self) -> StepOutcome
pub fn step_into(&mut self) -> StepOutcome
Moves to the start of the next source line anywhere, entering calls.
Sourcepub fn finish(&mut self) -> StepOutcome
pub fn finish(&mut self) -> StepOutcome
Runs until the current frame has returned to its caller, or to the end of the recording when there is no caller.
pub fn continue_execution(&mut self) -> StepOutcome
Sourcepub fn previous_instruction(&mut self) -> StepOutcome
pub fn previous_instruction(&mut self) -> StepOutcome
Steps back one instruction. The trace is a complete recording, so moving backward is as cheap and exact as moving forward.
Sourcepub fn previous_source(&mut self) -> StepOutcome
pub fn previous_source(&mut self) -> StepOutcome
Moves back to the start of the previous source line in this frame or a caller’s, skipping over calls it made and stopping at a breakpoint on the way.
Sourcepub fn reverse_step_into(&mut self) -> StepOutcome
pub fn reverse_step_into(&mut self) -> StepOutcome
Moves back to the start of the previous source line anywhere, entering calls.
Sourcepub fn reverse_finish(&mut self) -> StepOutcome
pub fn reverse_finish(&mut self) -> StepOutcome
Runs backward to the step in the caller that entered the current frame, or to the first step when there is no caller.
Sourcepub fn reverse_continue(&mut self) -> StepOutcome
pub fn reverse_continue(&mut self) -> StepOutcome
Runs backward to the nearest earlier breakpoint, or to the first step.
pub fn goto_step(&mut self, step: usize) -> StepOutcome
Sourcepub fn set_breakpoint(&mut self, pc: u64) -> StepOutcome
pub fn set_breakpoint(&mut self, pc: u64) -> StepOutcome
Sets a breakpoint on a program counter.
Sourcepub fn clear_breakpoint(&mut self, pc: u64) -> StepOutcome
pub fn clear_breakpoint(&mut self, pc: u64) -> StepOutcome
Clears the breakpoint on a program counter.
Sourcepub fn set_breakpoint_target(
&mut self,
target: &BreakpointTarget,
) -> StepOutcome
pub fn set_breakpoint_target( &mut self, target: &BreakpointTarget, ) -> StepOutcome
Resolves a target against the trace and its debug info and sets a breakpoint on it.
Sourcepub fn set_conditional_breakpoint_target(
&mut self,
target: &BreakpointTarget,
condition: Option<&str>,
) -> StepOutcome
pub fn set_conditional_breakpoint_target( &mut self, target: &BreakpointTarget, condition: Option<&str>, ) -> StepOutcome
Sets a breakpoint that only stops when condition holds there.
Sourcepub fn clear_breakpoint_target(
&mut self,
target: &BreakpointTarget,
) -> StepOutcome
pub fn clear_breakpoint_target( &mut self, target: &BreakpointTarget, ) -> StepOutcome
Clears the breakpoint that target resolves to.
Sourcepub fn delete_breakpoint(&mut self, id: u32) -> StepOutcome
pub fn delete_breakpoint(&mut self, id: u32) -> StepOutcome
Removes a breakpoint by its number.
Sourcepub fn breakpoint_hit(&self, step: usize) -> Option<Breakpoint>
pub fn breakpoint_hit(&self, step: usize) -> Option<Breakpoint>
The first breakpoint that step triggers.
Sourcepub fn evaluate_condition(
&self,
condition: &Condition,
step: usize,
) -> Evaluation
pub fn evaluate_condition( &self, condition: &Condition, step: usize, ) -> Evaluation
Evaluates a breakpoint condition at step.
A condition that cannot be read there — an untouched slot, an unknown name — does
not stop, and the reason is kept for DebuggerState::take_note.
Sourcepub fn take_note(&self) -> Option<String>
pub fn take_note(&self) -> Option<String>
Takes what the frontend should tell the user since the last call: a breakpoint that cannot be hit, or a condition that could not be evaluated.
Sourcepub fn frames_at(&self, step: usize) -> Vec<Frame>
pub fn frames_at(&self, step: usize) -> Vec<Frame>
The call structure at any step, with each frame’s arguments.
Sourcepub fn frames(&self) -> Vec<Frame>
pub fn frames(&self) -> Vec<Frame>
The call structure at the current step, innermost frame first.
Sourcepub fn source_listing(&self, radius: u64) -> Option<SourceListing>
pub fn source_listing(&self, radius: u64) -> Option<SourceListing>
Source lines around the current step.
Sourcepub fn variables(&self) -> Result<StepVariables, String>
pub fn variables(&self) -> Result<StepVariables, String>
The variables of the function executing at the current step, or why there are none: the artifact’s ETHDebug variable locations when it carries any, otherwise the legacy stack layout when the contract’s code generator keeps one.
Sourcepub fn local_path(&self, path: &str) -> Option<Result<DebugVariable, String>>
pub fn local_path(&self, path: &str) -> Option<Result<DebugVariable, String>>
The value of path at the current step when its first name is a local variable
in scope: the variable itself, or a member, element, mapping entry, or length
reached from it, such as item.tags[1] or stored.owners[0xabc]. None when no
local has that name, so the caller can look the path up as a state variable.
Sourcepub fn calldata(&self) -> Option<String>
pub fn calldata(&self) -> Option<String>
The calldata the current frame was called with: the input of its top-level call at the root, the recorded call’s input in a nested frame, or nothing when the backend did not record calls.