Skip to content

Commit 56b2edc

Browse files
author
Nathanael Anderson
authored
fix: Fix Debugger crashing w/ --debug-brk
Bug/debugger crashing out while using --debug-brk
2 parents 6ddb66c + 8e1bd28 commit 56b2edc

File tree

2 files changed

+28
-16
lines changed

2 files changed

+28
-16
lines changed

test-app/runtime/src/main/cpp/JsV8InspectorClient.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,11 @@ void JsV8InspectorClient::connect(jobject connection) {
4545
}
4646

4747
void JsV8InspectorClient::scheduleBreak() {
48+
v8::Locker locker(isolate_);
4849
Isolate::Scope isolate_scope(isolate_);
4950
v8::HandleScope handleScope(isolate_);
51+
auto context = Runtime::GetRuntime(isolate_)->GetContext();
52+
Context::Scope context_scope(context);
5053

5154
this->session_->schedulePauseOnNextStatement(v8_inspector::StringView(), v8_inspector::StringView());
5255
}

test-app/runtime/src/main/cpp/v8_inspector/src/inspector/protocol/DOM.cpp

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1932,34 +1932,43 @@ void DomainDispatcherImpl::getDocument(const v8_crdtp::Dispatchable& dispatchabl
19321932
errors->SetName("depth");
19331933
in_depth = ValueConversions<int>::fromValue(depthValue, errors);
19341934
}
1935+
19351936
protocol::Value* pierceValue = params ? params->get("pierce") : nullptr;
19361937
Maybe<bool> in_pierce;
19371938
if (pierceValue) {
19381939
errors->SetName("pierce");
19391940
in_pierce = ValueConversions<bool>::fromValue(pierceValue, errors);
19401941
}
1942+
19411943
if (MaybeReportInvalidParams(dispatchable, *errors)) return;
19421944
// Declare output parameters.
19431945
std::unique_ptr<protocol::DOM::Node> out_root;
19441946

19451947
std::unique_ptr<DomainDispatcher::WeakPtr> weak = weakPtr();
1946-
DispatchResponse response = m_backend->getDocument(std::move(in_depth), std::move(in_pierce), &out_root);
1947-
if (response.IsFallThrough()) {
1948-
channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("DOM.getDocument"), dispatchable.Serialized());
1949-
return;
1950-
}
1951-
if (weak->get()) {
1952-
std::vector<uint8_t> result;
1953-
if (response.IsSuccess()) {
1954-
v8_crdtp::cbor::EnvelopeEncoder envelope_encoder;
1955-
envelope_encoder.EncodeStart(&result);
1956-
result.push_back(v8_crdtp::cbor::EncodeIndefiniteLengthMapStart());
1957-
v8_crdtp::SerializeField(v8_crdtp::SpanFrom("root"), out_root, &result);
1958-
result.push_back(v8_crdtp::cbor::EncodeStop());
1959-
envelope_encoder.EncodeStop(&result);
1948+
1949+
if (depthValue && pierceValue) {
1950+
//NOTE: in_depth & in_pierce are not used in the method getDocument, see in v8-dom-agent-impl.cpp:63
1951+
DispatchResponse response = m_backend->getDocument(std::move(in_depth),
1952+
std::move(in_pierce), &out_root);
1953+
if (response.IsFallThrough()) {
1954+
channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("DOM.getDocument"),
1955+
dispatchable.Serialized());
1956+
return;
19601957
}
1961-
weak->get()->sendResponse(dispatchable.CallId(), response, v8_crdtp::Serializable::From(std::move(result)));
1962-
}
1958+
if (weak->get()) {
1959+
std::vector<uint8_t> result;
1960+
if (response.IsSuccess()) {
1961+
v8_crdtp::cbor::EnvelopeEncoder envelope_encoder;
1962+
envelope_encoder.EncodeStart(&result);
1963+
result.push_back(v8_crdtp::cbor::EncodeIndefiniteLengthMapStart());
1964+
v8_crdtp::SerializeField(v8_crdtp::SpanFrom("root"), out_root, &result);
1965+
result.push_back(v8_crdtp::cbor::EncodeStop());
1966+
envelope_encoder.EncodeStop(&result);
1967+
}
1968+
weak->get()->sendResponse(dispatchable.CallId(), response,
1969+
v8_crdtp::Serializable::From(std::move(result)));
1970+
}
1971+
}
19631972
return;
19641973
}
19651974

0 commit comments

Comments
 (0)