diff --git a/js/src/vm/Debugger.cpp b/js/src/vm/Debugger.cpp index e6de5ef1b5..344ee3a4d1 100644 --- a/js/src/vm/Debugger.cpp +++ b/js/src/vm/Debugger.cpp @@ -6286,8 +6286,12 @@ Debugger::observesFrame(const FrameIter& iter) const if (thisVal.isMagic() && thisVal.whyMagic() == JS_IS_CONSTRUCTING) return false; } - if (iter.isWasm()) + if (iter.isWasm()) { + // Skip frame of wasm instances we cannot observe. + if (!iter.wasmDebugEnabled()) + return false; return observesWasm(iter.wasmInstance()); + } return observesScript(iter.script()); } diff --git a/js/src/vm/Stack.h b/js/src/vm/Stack.h index 466e9400ba..42faa1158a 100644 --- a/js/src/vm/Stack.h +++ b/js/src/vm/Stack.h @@ -1835,6 +1835,8 @@ class FrameIter // ----------------------------------------------------------- // The following functions can only be called when isWasm() // ----------------------------------------------------------- + + inline bool wasmDebugEnabled() const; inline wasm::Instance* wasmInstance() const; // ----------------------------------------------------------- @@ -2083,11 +2085,19 @@ FrameIter::script() const return data_.jitFrames_.script(); } +inline bool +FrameIter::wasmDebugEnabled() const +{ + MOZ_ASSERT(!done()); + MOZ_ASSERT(data_.state_ == WASM); + return data_.wasmFrames_.debugEnabled(); +} + inline wasm::Instance* FrameIter::wasmInstance() const { MOZ_ASSERT(!done()); - MOZ_ASSERT(data_.state_ == WASM); + MOZ_ASSERT(data_.state_ == WASM && wasmDebugEnabled()); return data_.wasmFrames_.instance(); }