From 44a060f8d6366ba4394e20b9d55ce112850b5265 Mon Sep 17 00:00:00 2001 From: Alexander Polyakov Date: Sat, 9 Jun 2018 15:11:37 +0000 Subject: [PATCH] [lldb, lldb-mi] Re-implement MI -exec-continue command. Summary: Now -exec-continue command uses SB API to resume target's process. Reviewers: aprantl, clayborg, labath Reviewed By: clayborg Subscribers: apolyakov, labath, ki.stfu, llvm-commits, lldb-commits Differential Revision: https://reviews.llvm.org/D47415 llvm-svn: 334350 --- .../lit/tools/lldb-mi/exec/exec-continue.test | 20 +++++++++ lldb/tools/lldb-mi/MICmdCmdExec.cpp | 42 +++++-------------- lldb/tools/lldb-mi/MICmdCmdExec.h | 2 - 3 files changed, 30 insertions(+), 34 deletions(-) create mode 100644 lldb/lit/tools/lldb-mi/exec/exec-continue.test diff --git a/lldb/lit/tools/lldb-mi/exec/exec-continue.test b/lldb/lit/tools/lldb-mi/exec/exec-continue.test new file mode 100644 index 000000000000..c363422373d3 --- /dev/null +++ b/lldb/lit/tools/lldb-mi/exec/exec-continue.test @@ -0,0 +1,20 @@ +# XFAIL: windows +# -> llvm.org/pr24452 +# +# RUN: %cc -o %t %p/inputs/main.c -g +# RUN: %lldbmi %t < %s | FileCheck %s + +# Test lldb-mi -exec-continue command. + +# Check that we have a valid target created via '%lldbmi %t'. +# CHECK: ^done + +-break-insert main +# CHECK: ^done,bkpt={number="1" + +-exec-run +# CHECK: ^running +# CHECK: *stopped,reason="breakpoint-hit" + +-exec-continue +# CHECK: ^running diff --git a/lldb/tools/lldb-mi/MICmdCmdExec.cpp b/lldb/tools/lldb-mi/MICmdCmdExec.cpp index 12d95d7afa93..784307c4e72e 100644 --- a/lldb/tools/lldb-mi/MICmdCmdExec.cpp +++ b/lldb/tools/lldb-mi/MICmdCmdExec.cpp @@ -233,15 +233,10 @@ CMICmdCmdExecContinue::~CMICmdCmdExecContinue() {} // Throws: None. //-- bool CMICmdCmdExecContinue::Execute() { - const char *pCmd = "continue"; - CMICmnLLDBDebugSessionInfo &rSessionInfo( - CMICmnLLDBDebugSessionInfo::Instance()); - const lldb::ReturnStatus rtn = - rSessionInfo.GetDebugger().GetCommandInterpreter().HandleCommand( - pCmd, m_lldbResult); - MIunused(rtn); - - if (m_lldbResult.GetErrorSize() == 0) { + lldb::SBError error = + CMICmnLLDBDebugSessionInfo::Instance().GetProcess().Continue(); + + if (error.Success()) { // CODETAG_DEBUG_SESSION_RUNNING_PROG_RECEIVED_SIGINT_PAUSE_PROGRAM if (!CMIDriver::Instance().SetDriverStateRunningDebugging()) { const CMIUtilString &rErrMsg(CMIDriver::Instance().GetErrorDescription()); @@ -250,18 +245,11 @@ bool CMICmdCmdExecContinue::Execute() { rErrMsg.c_str())); return MIstatus::failure; } - } else { - // ToDo: Re-evaluate if this is required when application near finished as - // this is parsing LLDB error message - // which seems a hack and is code brittle - const char *pLldbErr = m_lldbResult.GetError(); - const CMIUtilString strLldbMsg(CMIUtilString(pLldbErr).StripCREndOfLine()); - if (strLldbMsg == "error: Process must be launched.") { - CMIDriver::Instance().SetExitApplicationFlag(true); - } + return MIstatus::success; } - return MIstatus::success; + SetError(error.GetCString()); + return MIstatus::failure; } //++ @@ -276,19 +264,9 @@ bool CMICmdCmdExecContinue::Execute() { // Throws: None. //-- bool CMICmdCmdExecContinue::Acknowledge() { - if (m_lldbResult.GetErrorSize() > 0) { - const CMICmnMIValueConst miValueConst(m_lldbResult.GetError()); - const CMICmnMIValueResult miValueResult("message", miValueConst); - const CMICmnMIResultRecord miRecordResult( - m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error, - miValueResult); - m_miResultRecord = miRecordResult; - } else { - const CMICmnMIResultRecord miRecordResult( - m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Running); - m_miResultRecord = miRecordResult; - } - + const CMICmnMIResultRecord miRecordResult( + m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Running); + m_miResultRecord = miRecordResult; return MIstatus::success; } diff --git a/lldb/tools/lldb-mi/MICmdCmdExec.h b/lldb/tools/lldb-mi/MICmdCmdExec.h index 46e7783c91ef..75e511ed29be 100644 --- a/lldb/tools/lldb-mi/MICmdCmdExec.h +++ b/lldb/tools/lldb-mi/MICmdCmdExec.h @@ -93,8 +93,6 @@ public: /* dtor */ ~CMICmdCmdExecContinue() override; // Attributes: -private: - lldb::SBCommandReturnObject m_lldbResult; }; //++ -- 2.34.1