From b0005a39dbad2066386b63e88d2dbe8e19b8631a Mon Sep 17 00:00:00 2001 From: fangting Date: Thu, 21 Aug 2025 20:26:43 +0800 Subject: [PATCH] fix hybrid debug Issue:#ICU4P3 Signed-off-by: fangting --- inspector/inspector.cpp | 10 ++++++++++ tooling/dynamic/debugger_service.cpp | 9 +++++++++ tooling/dynamic/debugger_service.h | 3 +++ 3 files changed, 22 insertions(+) diff --git a/inspector/inspector.cpp b/inspector/inspector.cpp index 6e68cca8..fb05f60f 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 15488e3c..d3f8174b 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 c5bfa5ae..49f5335d 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 } -- Gitee