Skip to content

Commit

Permalink
[lldb-mi] Re-implement MI -exec-next command.
Browse files Browse the repository at this point in the history
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

llvm-svn: 334215
  • Loading branch information
apolyakov committed Jun 7, 2018
1 parent 20fa3d2 commit 2b08ca7
Showing 3 changed files with 46 additions and 6 deletions.
30 changes: 30 additions & 0 deletions lldb/lit/tools/lldb-mi/exec/exec-next.test
Original file line number Diff line number Diff line change
@@ -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"
4 changes: 4 additions & 0 deletions lldb/lit/tools/lldb-mi/exec/inputs/main.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
int main(void) {
int x = 0;
return x;
}
18 changes: 12 additions & 6 deletions lldb/tools/lldb-mi/MICmdCmdExec.cpp
Original file line number Diff line number Diff line change
@@ -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;
}

0 comments on commit 2b08ca7

Please sign in to comment.