5#ifndef V8_DEBUG_DEBUG_INTERFACE_H_
6#define V8_DEBUG_DEBUG_INTERFACE_H_
35struct CoverageFunction;
39class PostponeInterruptsScope;
192 size_t Length()
const;
198#if V8_ENABLE_WEBASSEMBLY
211 bool WasCompiled()
const;
212 bool IsEmbedded()
const;
214 int StartLine()
const;
215 int StartColumn()
const;
217 int EndColumn()
const;
224 bool IsModule()
const;
225 bool GetPossibleBreakpoints(
227 bool restrict_to_function,
228 std::vector<debug::BreakLocation>* locations)
const;
232 GetSourceOffsetMode mode = GetSourceOffsetMode::kStrict)
const;
235 bool allow_top_frame_live_editing,
239#if V8_ENABLE_WEBASSEMBLY
243 bool SetInstrumentationBreakpoint(
BreakpointId*
id)
const;
249 virtual void AddLine(
const char* src,
size_t length,
250 uint32_t bytecode_offset) = 0;
253#if V8_ENABLE_WEBASSEMBLY
255class WasmScript :
public Script {
257 static WasmScript* Cast(
Script* script);
259 struct DebugSymbols {
260 enum class Type { SourceMap, EmbeddedDWARF, ExternalDWARF };
264 std::vector<DebugSymbols> GetDebugSymbols()
const;
266 int NumFunctions()
const;
267 int NumImportedFunctions()
const;
269 std::pair<int, int> GetFunctionRange(
int function_index)
const;
270 int GetContainingFunction(
int byte_offset)
const;
272 void Disassemble(DisassemblyCollector* collector,
273 std::vector<int>* function_body_offsets);
275 uint32_t GetFunctionHash(
int function_index);
279 int CodeOffset()
const;
280 int CodeLength()
const;
285void Disassemble(base::Vector<const uint8_t> wire_bytes,
286 DisassemblyCollector* collector,
287 std::vector<int>* function_body_offsets);
295 Local<String> source);
303 bool has_compile_error) {}
308 const std::vector<debug::BreakpointId>& inspector_break_points_hit,
338 bool exception_thrown,
343 DebugDelegate* listener);
345#if V8_ENABLE_WEBASSEMBLY
354 bool is_blackboxed) = 0;
370 ConsoleDelegate* delegate);
403 int StartOffset()
const;
404 int EndOffset()
const;
405 uint32_t Count()
const;
409 std::shared_ptr<i::Coverage> coverage)
410 : block_(block), coverage_(
std::move(coverage)) {}
422 int StartOffset()
const;
423 int EndOffset()
const;
424 uint32_t Count()
const;
426 size_t BlockCount()
const;
427 bool HasBlockCoverage()
const;
432 std::shared_ptr<i::Coverage> coverage)
433 :
function_(function), coverage_(
std::move(coverage)) {}
446 size_t FunctionCount()
const;
450 explicit ScriptData(
size_t index, std::shared_ptr<i::Coverage> c);
463 size_t ScriptCount()
const;
465 bool IsEmpty()
const {
return coverage_ ==
nullptr; }
468 explicit Coverage(std::shared_ptr<i::Coverage> coverage)
469 : coverage_(
std::move(coverage)) {}
475 static std::unique_ptr<ScopeIterator> CreateForFunction(
477 static std::unique_ptr<ScopeIterator> CreateForGeneratorObject(
495 ScopeTypeWasmExpressionStack
514 static std::unique_ptr<StackTraceIterator> Create(
Isolate* isolate,
536 bool throw_on_side_effect) = 0;
556 bool throw_on_side_effect);
566 bool repl_mode =
false);
585 std::unique_ptr<i::PostponeInterruptsScope>
scope_;
647 bool skip_indices =
false);
668#if V8_ENABLE_WEBASSEMBLY
671 WasmValueObject() =
delete;
673 static WasmValueObject* Cast(
v8::Value* value) {
674#ifdef V8_ENABLE_CHECKS
677 return static_cast<WasmValueObject*
>(
value);
688#ifdef V8_ENABLE_CHECKS
static void CheckCast(v8::Value *obj)
static V8_INLINE AccessorPair * Cast(v8::Value *obj)
virtual void AsyncEventOccurred(debug::DebugAsyncActionType type, int id, bool is_blackboxed)=0
virtual ~AsyncEventDelegate()=default
MOVE_ONLY_NO_DEFAULT_CONSTRUCTOR(BlockData)
std::shared_ptr< i::Coverage > coverage_
BlockData(i::CoverageBlock *block, std::shared_ptr< i::Coverage > coverage)
i::CoverageBlock * block_
i::CoverageFunction * function_
FunctionData(i::CoverageFunction *function, std::shared_ptr< i::Coverage > coverage)
std::shared_ptr< i::Coverage > coverage_
MOVE_ONLY_NO_DEFAULT_CONSTRUCTOR(FunctionData)
std::shared_ptr< i::Coverage > coverage_
MOVE_ONLY_NO_DEFAULT_CONSTRUCTOR(ScriptData)
i::CoverageScript * script_
Coverage(std::shared_ptr< i::Coverage > coverage)
MOVE_ONLY_NO_DEFAULT_CONSTRUCTOR(Coverage)
std::shared_ptr< i::Coverage > coverage_
virtual ActionAfterInstrumentation BreakOnInstrumentation(v8::Local< v8::Context > paused_context, const debug::BreakpointId instrumentationId)
virtual void ScriptCompiled(v8::Local< Script > script, bool is_live_edited, bool has_compile_error)
virtual void BreakProgramRequested(v8::Local< v8::Context > paused_context, const std::vector< debug::BreakpointId > &inspector_break_points_hit, base::EnumSet< BreakReason > break_reasons={})
virtual bool ShouldBeSkipped(v8::Local< v8::debug::Script > script, int line, int column)
virtual void ExceptionThrown(v8::Local< v8::Context > paused_context, v8::Local< v8::Value > exception, v8::Local< v8::Value > promise, bool is_uncaught, ExceptionType exception_type)
ActionAfterInstrumentation
virtual void BreakpointConditionEvaluated(v8::Local< v8::Context > context, debug::BreakpointId breakpoint_id, bool exception_thrown, v8::Local< v8::Value > exception)
virtual bool IsFunctionBlackboxed(v8::Local< debug::Script > script, const debug::Location &start, const debug::Location &end)
virtual ~DebugDelegate()=default
std::unique_ptr< i::DisableBreak > scope_
virtual void ReserveLineCount(size_t count)=0
virtual void AddLine(const char *src, size_t length, uint32_t bytecode_offset)=0
V8_EXPORT_PRIVATE V8_WARN_UNUSED_RESULT v8::MaybeLocal< v8::Value > Get(v8::Isolate *isolate, v8::Local< v8::Value > key)
static V8_EXPORT_PRIVATE Local< EphemeronTable > New(v8::Isolate *isolate)
V8_EXPORT_PRIVATE V8_WARN_UNUSED_RESULT v8::Local< EphemeronTable > Set(v8::Isolate *isolate, v8::Local< v8::Value > key, v8::Local< v8::Value > value)
static V8_INLINE EphemeronTable * Cast(Value *obj)
static v8::Local< debug::GeneratorObject > Cast(v8::Local< v8::Value > value)
debug::Location SuspendedLocation()
v8::MaybeLocal< debug::Script > Script()
v8::Local< v8::Function > Function()
std::unique_ptr< i::PostponeInterruptsScope > scope_
~PostponeInterruptsScope()
virtual bool Done() const =0
virtual bool is_native_accessor()=0
virtual Maybe< PropertyDescriptor > descriptor()=0
virtual bool has_native_getter()=0
virtual bool is_array_index()=0
virtual v8::Local< v8::Name > name() const =0
virtual V8_WARN_UNUSED_RESULT Maybe< bool > Advance()=0
virtual Maybe< PropertyAttribute > attributes()=0
virtual bool has_native_setter()=0
virtual ~PropertyIterator()=default
virtual int GetScriptId()=0
virtual v8::Local< v8::Object > GetObject()=0
virtual v8::Local< v8::Value > GetFunctionDebugName()=0
virtual bool SetVariableValue(v8::Local< v8::String > name, v8::Local< v8::Value > value)=0
virtual ~ScopeIterator()=default
virtual debug::Location GetStartLocation()=0
ScopeIterator & operator=(const ScopeIterator &)=delete
virtual debug::Location GetEndLocation()=0
virtual ScopeType GetType()=0
ScopeIterator(const ScopeIterator &)=delete
virtual bool HasLocationInfo()=0
virtual bool CanBeRestarted() const =0
virtual v8::MaybeLocal< v8::Value > GetReceiver() const =0
StackTraceIterator & operator=(const StackTraceIterator &)=delete
virtual bool Done() const =0
StackTraceIterator(const StackTraceIterator &)=delete
virtual v8::MaybeLocal< v8::Value > Evaluate(v8::Local< v8::String > source, bool throw_on_side_effect)=0
virtual v8::Local< v8::debug::Script > GetScript() const =0
virtual v8::Local< v8::Value > GetReturnValue() const =0
StackTraceIterator()=default
virtual v8::Local< v8::Function > GetFunction() const =0
virtual v8::Local< v8::String > GetFunctionDebugName() const =0
virtual int GetContextId() const =0
virtual debug::Location GetSourceLocation() const =0
virtual std::unique_ptr< ScopeIterator > GetScopeIterator() const =0
virtual debug::Location GetFunctionLocation() const =0
virtual ~StackTraceIterator()=default
const JSFunctionRef function_
base::Vector< const DirectHandle< Object > > args
ZoneVector< RpoNumber > & result
void SetBreakPointsActive(Isolate *v8_isolate, bool is_active)
int EstimatedValueSize(Isolate *v8_isolate, Local< Value > value)
bool PrepareRestartFrame(Isolate *v8_isolate, int callFrameOrdinal)
MaybeLocal< Value > CallFunctionOn(Local< Context > context, Local< Function > function, Local< Value > recv, base::Vector< Local< Value > > args, bool throw_on_side_effect)
void ResetBlackboxedStateCache(Isolate *v8_isolate, Local< Script > script)
base::EnumSet< BreakReason > BreakReasons
@ kDisableBreaksAndThrowOnSideEffect
void GlobalLexicalScopeNames(v8::Local< v8::Context > v8_context, std::vector< v8::Global< v8::String > > *names)
void BreakRightNow(Isolate *v8_isolate, base::EnumSet< debug::BreakReason > break_reasons)
void SetReturnValue(v8::Isolate *v8_isolate, v8::Local< v8::Value > value)
void SetBreakOnNextFunctionCall(Isolate *isolate)
bool CanBreakProgram(Isolate *v8_isolate)
bool GetPrivateMembers(Local< Context > context, Local< Object > object, int filter, LocalVector< Value > *names_out, LocalVector< Value > *values_out)
void ForceGarbageCollection(Isolate *isolate, StackState embedder_stack_state)
void ChangeBreakOnException(Isolate *isolate, ExceptionBreakState type)
MaybeLocal< UnboundScript > CompileInspectorScript(Isolate *v8_isolate, Local< String > source)
Local< Function > GetBuiltin(Isolate *v8_isolate, Builtin requested_builtin)
bool SetFunctionBreakpoint(v8::Local< v8::Function > function, v8::Local< v8::String > condition, BreakpointId *id)
void SetConsoleDelegate(Isolate *v8_isolate, ConsoleDelegate *delegate)
MaybeLocal< Array > GetInternalProperties(Isolate *v8_isolate, Local< Value > value)
int GetContextId(Local< Context > context)
@ BreakOnUncaughtException
void SetIsolateId(v8::Isolate *v8_isolate, uint64_t id)
void SetTerminateOnResume(Isolate *v8_isolate)
Local< String > GetDateDescription(Local< Date > date)
MaybeLocal< v8::Value > EvaluateGlobal(v8::Isolate *isolate, v8::Local< v8::String > source, EvaluateGlobalMode mode, bool repl)
Local< String > GetFunctionDescription(Local< Function > function)
int64_t GetNextRandomInt64(v8::Isolate *v8_isolate)
void PrepareStep(Isolate *v8_isolate, StepAction action)
void ClearStepping(Isolate *v8_isolate)
MaybeLocal< Message > GetMessageFromPromise(Local< Promise > p)
void RemoveBreakpoint(Isolate *v8_isolate, BreakpointId id)
Platform * GetCurrentPlatform()
void RecordAsyncStackTaggingCreateTaskCall(v8::Isolate *v8_isolate)
int GetDebuggingId(v8::Local< v8::Function > function)
Local< String > GetBigIntStringValue(Isolate *isolate, Local< BigInt > bigint)
void GetLoadedScripts(Isolate *v8_isolate, std::vector< v8::Global< Script > > &scripts)
void SetAsyncEventDelegate(Isolate *v8_isolate, AsyncEventDelegate *delegate)
void ClearBreakOnNextFunctionCall(Isolate *isolate)
void NotifyDebuggerPausedEventSent(v8::Isolate *v8_isolate)
void SetInspector(Isolate *isolate, v8_inspector::V8Inspector *inspector)
uint64_t GetIsolateId(v8::Isolate *v8_isolate)
void SetContextId(Local< Context > context, int id)
v8_inspector::V8Inspector * GetInspector(Isolate *isolate)
v8::Local< v8::Message > CreateMessageFromException(Isolate *v8_isolate, v8::Local< v8::Value > v8_error)
void SetDebugDelegate(Isolate *v8_isolate, DebugDelegate *delegate)
MaybeLocal< Context > GetCreationContext(Local< Object > value)
Local< String > GetBigIntDescription(Isolate *isolate, Local< BigInt > bigint)
#define V8_EXPORT_PRIVATE
v8::Local< v8::String > message
@ BLOCKED_BY_RUNNING_GENERATOR
@ BLOCKED_BY_TOP_LEVEL_ES_MODULE_CHANGE
@ BLOCKED_BY_ACTIVE_FUNCTION
bool restart_top_frame_required
v8::Local< v8::debug::Script > script
v8::Local< v8::Value > value
v8::Local< v8::Value > set
v8::Local< v8::Value > get
#define V8_WARN_UNUSED_RESULT
std::unique_ptr< ValueMirror > value
std::unique_ptr< ValueMirror > key