Skip to main content

BreakpointState

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>

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>

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>

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>

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>

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>

§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

fn pin_drop(self: Pin<&mut Self>)

🔬This is a nightly-only experimental API. (pin_ergonomics)
Execute the destructor for this type, but different to Drop::drop, it requires self to be pinned. Read more

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> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts 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
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Pointee for T

Source§

type Pointer = u32

Source§

fn debug( pointer: <T as Pointee>::Pointer, f: &mut Formatter<'_>, ) -> Result<(), Error>

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more