Struct BreakpointState
pub struct BreakpointState<'a> { /* private fields */ }Expand description
A store’s breakpoint state: its breakpoints, single-stepping, and watchpoints, borrowed for editing.
Obtained with Store::edit_breakpoints (or the same method on
StoreContextMut and Caller).
Changes to breakpoints and single-stepping are batched for efficiency, because code-patching has some overhead (e.g. syscalls to write-protect/re-publish code).
Implementations§
§impl<'a> BreakpointState<'a>
impl<'a> BreakpointState<'a>
pub fn add_breakpoint(
&mut self,
module: &Module,
pc: ModulePC,
) -> Result<(), Error>
pub fn add_breakpoint( &mut self, module: &Module, pc: ModulePC, ) -> Result<(), Error>
Add a breakpoint in the given module at the given PC in that module.
If the requested PC does not fall exactly on an opcode boundary, the breakpoint is “slipped” forward to the next available opcode PC.
No effect if the breakpoint is already set.
§Errors
Returns an error if module was not compiled by the same engine as
the store being edited.
pub fn remove_breakpoint(
&mut self,
module: &Module,
pc: ModulePC,
) -> Result<(), Error>
pub fn remove_breakpoint( &mut self, module: &Module, pc: ModulePC, ) -> Result<(), Error>
Remove a breakpoint in the given module at the given PC in that module.
No effect if the breakpoint was not set.
§Errors
Returns an error if module was not compiled by the same engine as
the store being edited.
pub fn single_step(&mut self, enabled: bool) -> Result<(), Error>
pub fn single_step(&mut self, enabled: bool) -> Result<(), Error>
Turn on or off single-step mode.
In single-step mode, a breakpoint event is emitted at every Wasm PC.
pub fn watch(&mut self, memory: Memory, range: Range<u64>) -> Result<(), Error>
pub fn watch(&mut self, memory: Memory, range: Range<u64>) -> Result<(), Error>
Watches guest writes to the bytes in range of memory. A guest
store or bulk memory operation that writes a watched byte raises
DebugEvent::Watchpoint before writing.
Whether a byte is watched is a per-byte property: watching an
already-watched byte has no further effect. See
BreakpointState::unwatch.
§Errors
Returns an error if range extends beyond the memory’s current size.
§Panics
Panics if memory does not belong to this store.
pub fn unwatch(
&mut self,
memory: Memory,
range: Range<u64>,
) -> Result<(), Error>
pub fn unwatch( &mut self, memory: Memory, range: Range<u64>, ) -> Result<(), Error>
Stops watching guest writes to the bytes in range of memory.
Whether a byte is watched is a per-byte property, so this unwatches
every byte in range, regardless of how many (possibly overlapping)
calls to BreakpointState::watch watched it.
§Errors
Returns an error if range extends beyond the memory’s current size.
§Panics
Panics if memory does not belong to this store.
Trait Implementations§
§impl<'a> Drop for BreakpointState<'a>
impl<'a> Drop for BreakpointState<'a>
Auto Trait Implementations§
impl<'a> !RefUnwindSafe for BreakpointState<'a>
impl<'a> !UnwindSafe for BreakpointState<'a>
impl<'a> Freeze for BreakpointState<'a>
impl<'a> Send for BreakpointState<'a>
impl<'a> Sync for BreakpointState<'a>
impl<'a> Unpin for BreakpointState<'a>
impl<'a> UnsafeUnpin for BreakpointState<'a>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more