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..c01ff4426a06af499b2031544ecc5273fd3d5040 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 OperateCurrentThreadDebugMessage(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..c596d71963834715d3a6cd7e396ac490abab5d8b 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 OperateCurrentThreadDebugMessage(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..00f265ead406fe85bf6d0a8b59a9844dd58307b7 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->OperateCurrentThreadDebugMessage(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..ce3b86b8955a0a8961272919b81d56fe5ae56f2f 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* operateDebugMessage = "(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::OperateCurrentThreadDebugMessage(const char *message, Status &error) { + std::string msgOperateDebugMessage = llvm::formatv(operateDebugMessage, message).str(); + DataExtractorSP result = ExecuteAction(msgOperateDebugMessage.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..688de3d81e6d3b968e7de9a7a52528d1f2539419 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 = "" + varOperateDebugMessage = 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 OperateDebugMessage result + self.assertTrue(er.Success(), "ArkTS debugger OperateDebugMessage failed.") + er.Clear() + self.assertTrue(varOperateDebugMessage.GetString(er, 0) == 'This is a ArkTS OperateDebugMessage', + 'ArkTS debugger get wrong OperateDebugMessage.') + # 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..3494b3e5f1b151449fe178ed4d76df4df2240d87 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 *str = "This is a ArkTS OperateDebugMessage"; const char *GetJsBacktrace() { return bt; } +const char *OperateJsDebugMessage(const char *message) { + return str; +} + int main () { printf ("%p is %d\n", &var, var); // break on this line