[Lldb-commits] [lldb] r334364 - [lldb-mi] Re-implement MI -exec-step command.
Alexander Polyakov via lldb-commits
lldb-commits at lists.llvm.org
Sun Jun 10 07:58:30 PDT 2018
Author: apolyakov
Date: Sun Jun 10 07:58:29 2018
New Revision: 334364
URL: http://llvm.org/viewvc/llvm-project?rev=334364&view=rev
Log:
[lldb-mi] Re-implement MI -exec-step command.
Summary: Now -exec-step uses SB API instead of HandleCommand hack.
Reviewers: aprantl, clayborg, labath, stella.stamenova
Reviewed By: aprantl
Subscribers: ki.stfu, lldb-commits
Differential Revision: https://reviews.llvm.org/D47838
Added:
lldb/trunk/lit/tools/lldb-mi/exec/exec-step.test
Modified:
lldb/trunk/packages/Python/lldbsuite/test/tools/lldb-mi/control/TestMiExec.py
lldb/trunk/tools/lldb-mi/MICmdCmdExec.cpp
lldb/trunk/tools/lldb-mi/MICmdCmdExec.h
Added: lldb/trunk/lit/tools/lldb-mi/exec/exec-step.test
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/lit/tools/lldb-mi/exec/exec-step.test?rev=334364&view=auto
==============================================================================
--- lldb/trunk/lit/tools/lldb-mi/exec/exec-step.test (added)
+++ lldb/trunk/lit/tools/lldb-mi/exec/exec-step.test Sun Jun 10 07:58:29 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-step 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-step --thread 0
+# Check that exec-step can process the case of invalid thread ID.
+# CHECK: ^error,msg="Command 'exec-step'. Thread ID invalid"
+
+-exec-step --thread 1
+# CHECK: ^running
+# CHECK: *stopped,reason="end-stepping-range"
+
+-exec-step
+# Check that exec-step can step-in in a selected thread.
+# CHECK: ^running
+# CHECK: *stopped,reason="end-stepping-range"
Modified: lldb/trunk/packages/Python/lldbsuite/test/tools/lldb-mi/control/TestMiExec.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/tools/lldb-mi/control/TestMiExec.py?rev=334364&r1=334363&r2=334364&view=diff
==============================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/tools/lldb-mi/control/TestMiExec.py (original)
+++ lldb/trunk/packages/Python/lldbsuite/test/tools/lldb-mi/control/TestMiExec.py Sun Jun 10 07:58:29 2018
@@ -330,9 +330,9 @@ class MiExecTestCase(lldbmi_testcase.MiT
# Test that an invalid --thread is handled
self.runCmd("-exec-step --thread 0")
- self.expect("\^error,message=\"error: Thread index 0 is out of range")
+ self.expect("\^error,msg=\"Command 'exec-step'. Thread ID invalid")
self.runCmd("-exec-step --thread 10")
- self.expect("\^error,message=\"error: Thread index 10 is out of range")
+ self.expect("\^error,msg=\"Command 'exec-step'. Thread ID invalid")
# Test that an invalid --frame is handled
# FIXME: no error is returned
Modified: lldb/trunk/tools/lldb-mi/MICmdCmdExec.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdExec.cpp?rev=334364&r1=334363&r2=334364&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdExec.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdExec.cpp Sun Jun 10 07:58:29 2018
@@ -487,14 +487,26 @@ bool CMICmdCmdExecStep::Execute() {
CMICmnLLDBDebugSessionInfo &rSessionInfo(
CMICmnLLDBDebugSessionInfo::Instance());
- lldb::SBDebugger &rDebugger = rSessionInfo.GetDebugger();
- CMIUtilString strCmd("thread step-in");
- if (nThreadId != UINT64_MAX)
- strCmd += CMIUtilString::Format(" %llu", nThreadId);
- rDebugger.GetCommandInterpreter().HandleCommand(strCmd.c_str(), m_lldbResult,
- false);
- return MIstatus::success;
+ lldb::SBError error;
+ 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.StepInto(nullptr, LLDB_INVALID_LINE_NUMBER, error);
+ } else rSessionInfo.GetProcess().GetSelectedThread().StepInto(
+ nullptr, LLDB_INVALID_LINE_NUMBER, error);
+
+ if (error.Success())
+ return MIstatus::success;
+
+ SetError(error.GetCString());
+ return MIstatus::failure;
}
//++
@@ -509,21 +521,8 @@ bool CMICmdCmdExecStep::Execute() {
// Throws: None.
//--
bool CMICmdCmdExecStep::Acknowledge() {
- if (m_lldbResult.GetErrorSize() > 0) {
- const char *pLldbErr = m_lldbResult.GetError();
- MIunused(pLldbErr);
- 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;
- }
-
+ m_miResultRecord = CMICmnMIResultRecord(
+ m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Running);
return MIstatus::success;
}
Modified: lldb/trunk/tools/lldb-mi/MICmdCmdExec.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdExec.h?rev=334364&r1=334363&r2=334364&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdExec.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdExec.h Sun Jun 10 07:58:29 2018
@@ -152,7 +152,6 @@ public:
// Attributes:
private:
- lldb::SBCommandReturnObject m_lldbResult;
const CMIUtilString m_constStrArgNumber; // Not specified in MI spec but
// Eclipse gives this option
};
More information about the lldb-commits
mailing list