diff --git a/inspector/inspector.cpp b/inspector/inspector.cpp index 6e68cca8dd849ec2a0edb86e2b9e2d53c2d384e6..fb05f60feb48dcab6a669908e1567b6e405c9cb3 100644 --- a/inspector/inspector.cpp +++ b/inspector/inspector.cpp @@ -47,6 +47,7 @@ enum DispatchStatus : int32_t { DISPATCHED }; +using SetDebugApp = void(*)(void*, bool); 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); @@ -410,6 +419,7 @@ bool InitializeDebuggerForSocketpair(void* vm, bool isHybrid) }; } g_initializeDebugger(vm, std::bind(&SendReply, vm, std::placeholders::_2)); + g_setDebugApp(vm, true); return true; } diff --git a/tooling/dynamic/debugger_service.cpp b/tooling/dynamic/debugger_service.cpp index 15488e3c41474abfdba99c23105960c654734cf2..d3f8174b1e403a9faeff7be69506219d4d3cc08e 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, bool isDebugApp) +{ + if (vm == nullptr || vm->GetJsDebuggerManager() == nullptr) { + LOG_DEBUGGER(DEBUG) << "VM has already been destroyed"; + return; + } + vm->GetJsDebuggerManager()->SetIsDebugApp(isDebugApp); +} + 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..49f5335d23fbdd082f15ff5b73d9ed6aeb67ec85 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, bool isDebugApp); + #ifdef __cplusplus #if __cplusplus }