diff options
Diffstat (limited to 'deps/v8/src/inspector/v8-stack-trace-impl.cc')
-rw-r--r-- | deps/v8/src/inspector/v8-stack-trace-impl.cc | 44 |
1 files changed, 40 insertions, 4 deletions
diff --git a/deps/v8/src/inspector/v8-stack-trace-impl.cc b/deps/v8/src/inspector/v8-stack-trace-impl.cc index e2be811069..04feca284c 100644 --- a/deps/v8/src/inspector/v8-stack-trace-impl.cc +++ b/deps/v8/src/inspector/v8-stack-trace-impl.cc @@ -6,7 +6,6 @@ #include <algorithm> -#include "src/base/template-utils.h" #include "src/inspector/v8-debugger.h" #include "src/inspector/v8-inspector-impl.h" #include "src/inspector/wasm-translation.h" @@ -17,6 +16,10 @@ int V8StackTraceImpl::maxCallStackSizeToCapture = 200; namespace { +static const char kId[] = "id"; +static const char kDebuggerId[] = "debuggerId"; +static const char kShouldPause[] = "shouldPause"; + static const v8::StackTrace::StackTraceOptions stackTraceOptions = static_cast<v8::StackTrace::StackTraceOptions>( v8::StackTrace::kDetailed | @@ -74,7 +77,7 @@ std::unique_ptr<protocol::Runtime::StackTrace> buildInspectorObjectCommon( } auto inspectorFrames = - v8::base::make_unique<protocol::Array<protocol::Runtime::CallFrame>>(); + std::make_unique<protocol::Array<protocol::Runtime::CallFrame>>(); for (const std::shared_ptr<StackFrame>& frame : frames) { V8InspectorClient* client = nullptr; if (debugger && debugger->inspector()) @@ -102,7 +105,7 @@ std::unique_ptr<protocol::Runtime::StackTrace> buildInspectorObjectCommon( stackTrace->setParentId( protocol::Runtime::StackTraceId::create() .setId(stackTraceIdToString(externalParent.id)) - .setDebuggerId(debuggerIdToString(externalParent.debugger_id)) + .setDebuggerId(V8DebuggerId(externalParent.debugger_id).toString()) .build()); } return stackTrace; @@ -110,14 +113,47 @@ std::unique_ptr<protocol::Runtime::StackTrace> buildInspectorObjectCommon( } // namespace -V8StackTraceId::V8StackTraceId() : id(0), debugger_id(std::make_pair(0, 0)) {} +V8StackTraceId::V8StackTraceId() : id(0), debugger_id(V8DebuggerId().pair()) {} V8StackTraceId::V8StackTraceId(uintptr_t id, const std::pair<int64_t, int64_t> debugger_id) : id(id), debugger_id(debugger_id) {} +V8StackTraceId::V8StackTraceId(uintptr_t id, + const std::pair<int64_t, int64_t> debugger_id, + bool should_pause) + : id(id), debugger_id(debugger_id), should_pause(should_pause) {} + +V8StackTraceId::V8StackTraceId(const StringView& json) + : id(0), debugger_id(V8DebuggerId().pair()) { + auto dict = + protocol::DictionaryValue::cast(protocol::StringUtil::parseJSON(json)); + if (!dict) return; + String16 s; + if (!dict->getString(kId, &s)) return; + bool isOk = false; + int64_t parsedId = s.toInteger64(&isOk); + if (!isOk || !parsedId) return; + if (!dict->getString(kDebuggerId, &s)) return; + V8DebuggerId debuggerId(s); + if (!debuggerId.isValid()) return; + if (!dict->getBoolean(kShouldPause, &should_pause)) return; + id = parsedId; + debugger_id = debuggerId.pair(); +} + bool V8StackTraceId::IsInvalid() const { return !id; } +std::unique_ptr<StringBuffer> V8StackTraceId::ToString() { + if (IsInvalid()) return nullptr; + auto dict = protocol::DictionaryValue::create(); + dict->setString(kId, String16::fromInteger64(id)); + dict->setString(kDebuggerId, V8DebuggerId(debugger_id).toString()); + dict->setBoolean(kShouldPause, should_pause); + String16 json = dict->toJSONString(); + return StringBufferImpl::adopt(json); +} + StackFrame::StackFrame(v8::Isolate* isolate, v8::Local<v8::StackFrame> v8Frame) : m_functionName(toProtocolString(isolate, v8Frame->GetFunctionName())), m_scriptId(String16::fromInteger(v8Frame->GetScriptId())), |