From 261128e310188f98a298b74a511ed23e672ced1d Mon Sep 17 00:00:00 2001 From: yp9522 Date: Tue, 29 Apr 2025 10:28:03 +0800 Subject: [PATCH] [LLDB]Implement interfaces for get ArkTS variable Description: LLDB interfaces with ARKTSDEBUGGER's GetJsVariable function to acquire JavaScript variable details. Issue: https://gitee.com/openharmony/third_party_llvm-project/issues/IC84QK Signed-off-by: yp9522 Change-Id: I9d3253c6fc966c7cc75694c10ccea4c82659f0b7 --- lldb/bindings/interface/SBMixedArkTSDebugger.i | 2 ++ lldb/include/lldb/API/SBMixedArkTSDebugger.h | 2 ++ lldb/include/lldb/Target/MixedArkTSDebugger.h | 2 ++ lldb/include/lldb/Target/MixedDebugger.h | 2 ++ lldb/source/API/SBMixedArkTSDebugger.cpp | 6 ++++++ lldb/source/Target/MixedArkTSDebugger.cpp | 12 ++++++++++++ .../mixed_debugger/arkts/TestMixedArktsDebugger.py | 8 ++++++++ .../API/functionalities/mixed_debugger/arkts/main.c | 5 +++++ 8 files changed, 39 insertions(+) diff --git a/lldb/bindings/interface/SBMixedArkTSDebugger.i b/lldb/bindings/interface/SBMixedArkTSDebugger.i index 11bb629f7eaf..34d77c40106e 100644 --- a/lldb/bindings/interface/SBMixedArkTSDebugger.i +++ b/lldb/bindings/interface/SBMixedArkTSDebugger.i @@ -35,6 +35,8 @@ public: SBMixedArkTSDebugger(const lldb::TargetSP &taraget_sp); lldb::SBData GetBackTrace(SBError &er); + + lldb::SBData OperateDebugMessage(const char *message, SBError &er); }; } // namespace lldb diff --git a/lldb/include/lldb/API/SBMixedArkTSDebugger.h b/lldb/include/lldb/API/SBMixedArkTSDebugger.h index 595fcbfd4a21..18093215fd96 100644 --- a/lldb/include/lldb/API/SBMixedArkTSDebugger.h +++ b/lldb/include/lldb/API/SBMixedArkTSDebugger.h @@ -44,6 +44,8 @@ public: /// An lldb::SBData object which contain the raw cstring of ArkTS backtrace. lldb::SBData GetBackTrace(SBError &er); + lldb::SBData OperateDebugMessage(const char *message, SBError &er); + private: lldb_private::MixedArkTSDebugger* m_opaque_ptr; }; diff --git a/lldb/include/lldb/Target/MixedArkTSDebugger.h b/lldb/include/lldb/Target/MixedArkTSDebugger.h index 464e62b19306..48802466b314 100644 --- a/lldb/include/lldb/Target/MixedArkTSDebugger.h +++ b/lldb/include/lldb/Target/MixedArkTSDebugger.h @@ -30,6 +30,8 @@ public: ~MixedArkTSDebugger() {}; DataExtractorSP GetCurrentThreadBackTrace(Status &error) override; + + DataExtractorSP GetCurrentThreadOperateDebugMessageResult(const char *message, Status &error) override; }; } // namespace lldb_private diff --git a/lldb/include/lldb/Target/MixedDebugger.h b/lldb/include/lldb/Target/MixedDebugger.h index 01f43454a8e6..1d43241f4721 100644 --- a/lldb/include/lldb/Target/MixedDebugger.h +++ b/lldb/include/lldb/Target/MixedDebugger.h @@ -48,6 +48,8 @@ public: virtual DataExtractorSP GetCurrentThreadBackTrace(Status &error) = 0; + virtual DataExtractorSP GetCurrentThreadOperateDebugMessageResult(const char *message, Status &error) = 0; + protected: TargetSP m_target_sp; diff --git a/lldb/source/API/SBMixedArkTSDebugger.cpp b/lldb/source/API/SBMixedArkTSDebugger.cpp index 148f9e473f9b..9115f0553716 100644 --- a/lldb/source/API/SBMixedArkTSDebugger.cpp +++ b/lldb/source/API/SBMixedArkTSDebugger.cpp @@ -52,3 +52,9 @@ lldb::SBData SBMixedArkTSDebugger::GetBackTrace(SBError &er) { return SBData(m_opaque_ptr->GetCurrentThreadBackTrace(er.ref())); } + +lldb::SBData SBMixedArkTSDebugger::OperateDebugMessage(const char *message, SBError &er) { + LLDB_INSTRUMENT_VA(this, er); + + return SBData(m_opaque_ptr->GetCurrentThreadOperateDebugMessageResult(message, er.ref())); +} \ No newline at end of file diff --git a/lldb/source/Target/MixedArkTSDebugger.cpp b/lldb/source/Target/MixedArkTSDebugger.cpp index cfe46ec7e41d..40a110ecca9c 100644 --- a/lldb/source/Target/MixedArkTSDebugger.cpp +++ b/lldb/source/Target/MixedArkTSDebugger.cpp @@ -22,6 +22,7 @@ using namespace lldb; using namespace lldb_private; static const char* BackTrace = "(const char*)GetJsBacktrace()"; +static const char* DebugMessage = "(const char*)OperateJsDebugMessage(\"{0}\")"; MixedArkTSDebugger::MixedArkTSDebugger(const TargetSP &target_sp) : MixedDebugger(target_sp) {} @@ -35,3 +36,14 @@ DataExtractorSP MixedArkTSDebugger::GetCurrentThreadBackTrace(Status &error) { } return result; } + +DataExtractorSP MixedArkTSDebugger::GetCurrentThreadOperateDebugMessageResult(const char *message, Status &error) { + std::string operateMessage = llvm::formatv(DebugMessage, message).str(); + DataExtractorSP result = ExecuteAction(operateMessage.c_str(), error); + if (!error.Success()) { + Log *log = GetLog(LLDBLog::MixedDebugger); + LLDB_LOGF(log, "[MixedArkTSDebugger::OperateDebugMessage] failed for %s", + error.AsCString()); + } + return result; +} \ No newline at end of file diff --git a/lldb/test/API/functionalities/mixed_debugger/arkts/TestMixedArktsDebugger.py b/lldb/test/API/functionalities/mixed_debugger/arkts/TestMixedArktsDebugger.py index 6560d9261f05..fca5a8d4b5bf 100644 --- a/lldb/test/API/functionalities/mixed_debugger/arkts/TestMixedArktsDebugger.py +++ b/lldb/test/API/functionalities/mixed_debugger/arkts/TestMixedArktsDebugger.py @@ -63,6 +63,8 @@ class MixedArkTSDebuggerTest(TestBase): arkdb = lldb.SBMixedArkTSDebugger(target) er = lldb.SBError() bt = arkdb.GetBackTrace(er) + message = "" + var = arkdb.OperateDebugMessage(message, er) # Check the result self.assertTrue(er.Success(), "ArkTS debugger get backtrace failed.") @@ -70,6 +72,12 @@ class MixedArkTSDebuggerTest(TestBase): self.assertTrue(bt.GetString(er, 0) == 'This is a ArkTS backtrace', 'ArkTS debugger get wrong backtrace.') + # Check the arkTs variable result + self.assertTrue(er.Success(), "ArkTS debugger get operate debug message result failed.") + er.Clear() + self.assertTrue(var.GetString(er, 0) == 'This is a ArkTS operate debug message result', + 'ArkTS debugger get wrong operate debug message result.') + # Run to completion self.runCmd("continue") diff --git a/lldb/test/API/functionalities/mixed_debugger/arkts/main.c b/lldb/test/API/functionalities/mixed_debugger/arkts/main.c index ae2d25530c6e..52ebaef7fc45 100644 --- a/lldb/test/API/functionalities/mixed_debugger/arkts/main.c +++ b/lldb/test/API/functionalities/mixed_debugger/arkts/main.c @@ -15,11 +15,16 @@ static int var = 5; const char *bt = "This is a ArkTS backtrace"; +const char *msg = "This is a ArkTS operate debug message result"; const char *GetJsBacktrace() { return bt; } +const char *OperateJsDebugMessage(const char *message) { + return msg; +} + int main () { printf ("%p is %d\n", &var, var); // break on this line -- Gitee