Author: apolyakov Date: Thu Jun 7 12:09:01 2018 New Revision: 334215 URL: http://llvm.org/viewvc/llvm-project?rev=334215&view=rev Log: [lldb-mi] Re-implement MI -exec-next command.
Summary: Now -exec-next command uses SB API for stepping over. Reviewers: aprantl, clayborg, stella.stamenova, labath Reviewed By: aprantl, clayborg, labath Subscribers: labath, ki.stfu, lldb-commits Differential Revision: https://reviews.llvm.org/D47797 Added: lldb/trunk/lit/tools/lldb-mi/exec/exec-next.test lldb/trunk/lit/tools/lldb-mi/exec/inputs/ lldb/trunk/lit/tools/lldb-mi/exec/inputs/main.c Modified: lldb/trunk/tools/lldb-mi/MICmdCmdExec.cpp Added: lldb/trunk/lit/tools/lldb-mi/exec/exec-next.test URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/lit/tools/lldb-mi/exec/exec-next.test?rev=334215&view=auto ============================================================================== --- lldb/trunk/lit/tools/lldb-mi/exec/exec-next.test (added) +++ lldb/trunk/lit/tools/lldb-mi/exec/exec-next.test Thu Jun 7 12:09:01 2018 @@ -0,0 +1,30 @@ +# XFAIL: windows +# -> llvm.org/pr24452 +# +# RUN: %cc -o %t %p/inputs/main.c -g +# RUN: %lldbmi %t < %s | FileCheck %s + +# Test lldb-mi -exec-next 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-next --thread 0 +# Check that exec-next can process the case of invalid thread ID. +# CHECK: ^error,msg="Command 'exec-next'. Thread ID invalid" + +-exec-next --thread 1 +# CHECK: ^running +# CHECK: *stopped,reason="end-stepping-range" + +-exec-next +# Check that exec-next can step over in a selected thread. +# CHECK: ^running +# CHECK: *stopped,reason="end-stepping-range" Added: lldb/trunk/lit/tools/lldb-mi/exec/inputs/main.c URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/lit/tools/lldb-mi/exec/inputs/main.c?rev=334215&view=auto ============================================================================== --- lldb/trunk/lit/tools/lldb-mi/exec/inputs/main.c (added) +++ lldb/trunk/lit/tools/lldb-mi/exec/inputs/main.c Thu Jun 7 12:09:01 2018 @@ -0,0 +1,4 @@ +int main(void) { + int x = 0; + return x; +} Modified: lldb/trunk/tools/lldb-mi/MICmdCmdExec.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdExec.cpp?rev=334215&r1=334214&r2=334215&view=diff ============================================================================== --- lldb/trunk/tools/lldb-mi/MICmdCmdExec.cpp (original) +++ lldb/trunk/tools/lldb-mi/MICmdCmdExec.cpp Thu Jun 7 12:09:01 2018 @@ -22,6 +22,7 @@ #include "lldb/API/SBCommandInterpreter.h" #include "lldb/API/SBProcess.h" #include "lldb/API/SBStream.h" +#include "lldb/API/SBThread.h" #include "lldb/lldb-enumerations.h" // In-house headers: @@ -378,12 +379,17 @@ bool CMICmdCmdExecNext::Execute() { CMICmnLLDBDebugSessionInfo &rSessionInfo( CMICmnLLDBDebugSessionInfo::Instance()); - lldb::SBDebugger &rDebugger = rSessionInfo.GetDebugger(); - CMIUtilString strCmd("thread step-over"); - if (nThreadId != UINT64_MAX) - strCmd += CMIUtilString::Format(" %llu", nThreadId); - rDebugger.GetCommandInterpreter().HandleCommand(strCmd.c_str(), m_lldbResult, - false); + + if (nThreadId != UINT64_MAX) { + lldb::SBThread sbThread = rSessionInfo.GetProcess().GetThreadByIndexID(nThreadId); + if (!sbThread.IsValid()) { + SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_THREAD_INVALID), + m_cmdData.strMiCmd.c_str(), + m_constStrArgThread.c_str())); + return MIstatus::failure; + } + sbThread.StepOver(); + } else rSessionInfo.GetProcess().GetSelectedThread().StepOver(); return MIstatus::success; } _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits