diff --git a/inspector/inspector.cpp b/inspector/inspector.cpp index 6e68cca8dd849ec2a0edb86e2b9e2d53c2d384e6..9027a861bd7edc023457235718dce49a23f39db2 100644 --- a/inspector/inspector.cpp +++ b/inspector/inspector.cpp @@ -47,6 +47,7 @@ enum DispatchStatus : int32_t { DISPATCHED }; +using SetDebugApp = void(*)(void*); using InitializeDebugger = void(*)(void*, const std::function&); using UninitializeDebugger = void(*)(void*); using WaitForDebugger = void(*)(void*); @@ -55,6 +56,7 @@ using ProcessMessage = void(*)(void*); using GetDispatchStatus = int32_t(*)(void*); using GetCallFrames = char*(*)(void*); +SetDebugApp g_setDebugApp = nullptr; OnMessage g_onMessage = nullptr; InitializeDebugger g_initializeDebugger = nullptr; UninitializeDebugger g_uninitializeDebugger = nullptr; @@ -264,12 +266,19 @@ bool InitializeArkFunctionsOthers() ResetServiceLocked(g_vm, true); return false; } + g_setDebugApp = reinterpret_cast( + GetArkDynFunction("SetDebugApp")); + if (g_setDebugApp == nullptr) { + ResetServiceLocked(g_vm, true); + return false; + } return true; } #else bool InitializeArkFunctionsIOS() { using namespace panda::ecmascript; + g_setDebugApp = reinterpret_cast(&tooling::SetDebugApp); g_initializeDebugger = reinterpret_cast(&tooling::InitializeDebugger); g_uninitializeDebugger = reinterpret_cast(&tooling::UninitializeDebugger); g_waitForDebugger = reinterpret_cast(&tooling::WaitForDebugger); @@ -408,6 +417,7 @@ bool InitializeDebuggerForSocketpair(void* vm, bool isHybrid) LOGE("Initialize ark functions failed"); return false; }; + g_setDebugApp(vm); } g_initializeDebugger(vm, std::bind(&SendReply, vm, std::placeholders::_2)); return true; diff --git a/tooling/dynamic/debugger_service.cpp b/tooling/dynamic/debugger_service.cpp index 15488e3c41474abfdba99c23105960c654734cf2..cead0a1ae87c7fe82e69f8a44194edb37733ce08 100644 --- a/tooling/dynamic/debugger_service.cpp +++ b/tooling/dynamic/debugger_service.cpp @@ -35,6 +35,15 @@ void InitializeDebugger(::panda::ecmascript::EcmaVM *vm, vm->GetJsDebuggerManager()->SetDebuggerHandler(new ProtocolHandler(onResponse, vm)); } +void SetDebugApp(::panda::ecmascript::EcmaVM *vm) +{ + if (vm == nullptr || vm->GetJsDebuggerManager() == nullptr) { + LOG_DEBUGGER(DEBUG) << "VM has already been destroyed"; + return; + } + vm->GetJsDebuggerManager()->SetIsDebugApp(true); +} + void UninitializeDebugger(::panda::ecmascript::EcmaVM *vm) { if (vm == nullptr || vm->GetJsDebuggerManager() == nullptr) { diff --git a/tooling/dynamic/debugger_service.h b/tooling/dynamic/debugger_service.h index c5bfa5aedd3757c041907b119422da308ebc241b..b5df95476024a40eb9de17a25e8a165aec23a09c 100644 --- a/tooling/dynamic/debugger_service.h +++ b/tooling/dynamic/debugger_service.h @@ -48,6 +48,9 @@ TOOLCHAIN_EXPORT int32_t GetDispatchStatus(const ::panda::ecmascript::EcmaVM *vm TOOLCHAIN_EXPORT const char* GetCallFrames(const ::panda::ecmascript::EcmaVM *vm); TOOLCHAIN_EXPORT const char* OperateDebugMessage(const ::panda::ecmascript::EcmaVM *vm, const char* message); + +TOOLCHAIN_EXPORT void SetDebugApp(::panda::ecmascript::EcmaVM *vm); + #ifdef __cplusplus #if __cplusplus }