Index: lit/tools/lldb-mi/exec/exec-continue.test =================================================================== --- /dev/null +++ lit/tools/lldb-mi/exec/exec-continue.test @@ -0,0 +1,17 @@ +# RUN: %cc %p/inputs/main.c -g +# RUN: %lldbmi < %s | FileCheck %s + +# Test that lldb-mi can continue executing a program after stop. + +-file-exec-and-symbols a.out +# CHECK: ^done + +-break-insert main +# CHECK: ^done,bkpt={number="1" + +-exec-run +# CHECK: ^running +# CHECK: *stopped,reason="breakpoint-hit" + +-exec-continue +# CHECK: ^running Index: lit/tools/lldb-mi/exec/inputs/main.c =================================================================== --- /dev/null +++ lit/tools/lldb-mi/exec/inputs/main.c @@ -0,0 +1,4 @@ +int main(void) { + int x = 0; + return x; +} Index: lit/tools/lldb-mi/exec/lit.local.cfg =================================================================== --- /dev/null +++ lit/tools/lldb-mi/exec/lit.local.cfg @@ -0,0 +1 @@ +config.suffixes = ['.test'] Index: tools/lldb-mi/MICmdCmdExec.cpp =================================================================== --- tools/lldb-mi/MICmdCmdExec.cpp +++ tools/lldb-mi/MICmdCmdExec.cpp @@ -219,15 +219,10 @@ // 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); + lldb::SBError sb_error = + CMICmnLLDBDebugSessionInfo::Instance().GetProcess().Continue(); - if (m_lldbResult.GetErrorSize() == 0) { + if (sb_error.Success()) { // CODETAG_DEBUG_SESSION_RUNNING_PROG_RECEIVED_SIGINT_PAUSE_PROGRAM if (!CMIDriver::Instance().SetDriverStateRunningDebugging()) { const CMIUtilString &rErrMsg(CMIDriver::Instance().GetErrorDescription()); @@ -236,16 +231,8 @@ 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); - } - } + } else + m_lldbResult.SetError(sb_error.GetCString()); return MIstatus::success; }