From 9e782ecf5ec24612f6baa38752c28c1e4429f1d0 Mon Sep 17 00:00:00 2001 From: blagoev Date: Wed, 4 Jan 2017 13:05:17 +0200 Subject: [PATCH] recreate debugger session to fix client reattach resume debugger if paused on breakpoint while disconnecting --- .../java/com/tns/AndroidJsV8Inspector.java | 23 +++++-------------- runtime/src/main/jni/JsV8InspectorClient.cpp | 9 ++++---- runtime/src/main/jni/JsV8InspectorClient.h | 2 +- 3 files changed, 12 insertions(+), 22 deletions(-) diff --git a/runtime/src/main/java/com/tns/AndroidJsV8Inspector.java b/runtime/src/main/java/com/tns/AndroidJsV8Inspector.java index 1586c80ec..1c4a79338 100644 --- a/runtime/src/main/java/com/tns/AndroidJsV8Inspector.java +++ b/runtime/src/main/java/com/tns/AndroidJsV8Inspector.java @@ -16,7 +16,6 @@ public class AndroidJsV8Inspector { private static boolean DEBUG_LOG_ENABLED = false; - public static final String DISCONNECT_MESSAGE = "nativescript-inspector-disconnect"; private JsV8InspectorServer server; private Logger logger; private Context context; @@ -107,8 +106,6 @@ protected void onOpen() Log.d("V8Inspector", "onOpen: ThreadID: " + Thread.currentThread().getId()); } - final Object waitObject = new Object(); - mainHandler.post(new Runnable() { @Override @@ -116,7 +113,7 @@ public void run() { if (DEBUG_LOG_ENABLED) { - Log.d("V8Inspector", "onOpen: runnable ThreadID : " + Thread.currentThread().getId()); + Log.d("V8Inspector", "Connecting. threadID : " + Thread.currentThread().getId()); } connect(JsV8InspectorWebSocket.this); @@ -137,11 +134,13 @@ protected void onClose(NanoWSD.WebSocketFrame.CloseCode code, String reason, boo @Override public void run() { + if (DEBUG_LOG_ENABLED) + { + Log.d("V8Inspector", "Disconnecting"); + } disconnect(); } }); - - inspectorMessages.offer(DISCONNECT_MESSAGE); } @Override @@ -151,6 +150,7 @@ protected void onMessage(final NanoWSD.WebSocketFrame message) { Log.d("V8Inspector", "To dbg backend: " + message.getTextPayload() + " ThreadId:" + Thread.currentThread().getId()); } + inspectorMessages.offer(message.getTextPayload()); mainHandler.post(new Runnable() @@ -184,17 +184,6 @@ public String getInspectorMessage() try { String message = inspectorMessages.take(); - - if (message != null && message.equalsIgnoreCase(DISCONNECT_MESSAGE)) - { - if (DEBUG_LOG_ENABLED) - { - Log.d("V8Inspector", "disconecting"); - } - disconnect(); - return null; - } - return message; } catch (InterruptedException e) diff --git a/runtime/src/main/jni/JsV8InspectorClient.cpp b/runtime/src/main/jni/JsV8InspectorClient.cpp index 5aefc8e25..ad283f85e 100644 --- a/runtime/src/main/jni/JsV8InspectorClient.cpp +++ b/runtime/src/main/jni/JsV8InspectorClient.cpp @@ -43,7 +43,7 @@ void JsV8InspectorClient::connect(jobject connection) this->connection = env.NewGlobalRef(connection); } -void JsV8InspectorClient::doConnect(v8::Isolate *isolate, const v8::Local &context) +void JsV8InspectorClient::createInspectorSession(v8::Isolate *isolate, const v8::Local &context) { session_ = inspector_->connect(0, this, v8_inspector::StringView()); } @@ -58,11 +58,14 @@ void JsV8InspectorClient::disconnect() Isolate::Scope isolate_scope(isolate_); v8::HandleScope handleScope(isolate_); + session_->resume(); session_.reset(); JEnv env; env.DeleteGlobalRef(this->connection); this->connection = nullptr; + + this->createInspectorSession(isolate_, JsV8InspectorClient::PersistentToLocal(isolate_, context_)); } @@ -74,8 +77,6 @@ void JsV8InspectorClient::dispatchMessage(const std::string &message) void JsV8InspectorClient::runMessageLoopOnPause(int context_group_id) { - - if (running_nested_loop_) { return; @@ -204,7 +205,7 @@ void JsV8InspectorClient::init() v8::Persistent persistentContext(context->GetIsolate(), context); context_.Reset(isolate_, persistentContext); - this->doConnect(isolate_, JsV8InspectorClient::PersistentToLocal(isolate_, context_)); + this->createInspectorSession(isolate_, JsV8InspectorClient::PersistentToLocal(isolate_, context_)); } JsV8InspectorClient *JsV8InspectorClient::GetInstance() diff --git a/runtime/src/main/jni/JsV8InspectorClient.h b/runtime/src/main/jni/JsV8InspectorClient.h index d6e0b3cb5..4b0e8237e 100644 --- a/runtime/src/main/jni/JsV8InspectorClient.h +++ b/runtime/src/main/jni/JsV8InspectorClient.h @@ -26,7 +26,7 @@ namespace tns void init(); void connect(jobject connection); - void doConnect(v8::Isolate *isolate, const v8::Local& context); + void createInspectorSession(v8::Isolate *isolate, const v8::Local &context); void disconnect(); void dispatchMessage(const std::string& message); void doDispatchMessage(v8::Isolate *isolate, const std::string& message);