diff --git a/lldb/bindings/interface/SBMixedArkTSDebugger.i b/lldb/bindings/interface/SBMixedArkTSDebugger.i index 11bb629f7eaf18ca5ae4174a7a6951680cbed465..34d77c40106ef6e517f3f912bca4cf0abb48311c 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 595fcbfd4a21096449e900622d959f67d5edad6a..18093215fd96d05fb9b7588ef1ff2ffebbb62ab1 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 464e62b19306e3aa307e8f53886fdb17a806e622..48802466b3148d86d20e465ee2bac3f8755aa826 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 01f43454a8e6a6300bc30b73bcfc1cd2f474be1c..1d43241f47217cb05a4ab94500b02f7193f703f8 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 148f9e473f9b0893caae49a81de81404de244e2b..9115f0553716251150717cfb99d5e3373245ba59 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 cfe46ec7e41d0347b2eeffdccd393a97fdab1808..40a110ecca9cad4b5174b12f8a7389e64c5ace98 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 6560d9261f0549c565f0c304481904672202a901..fca5a8d4b5bf137c0c2016d2a9540456274af0af 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 ae2d25530c6e099b46975a7c4150740718c6fcdf..52ebaef7fc45c2a5ba1ee3269b87edd923ed3c6a 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