[Lldb-commits] [lldb] r280751 - *** This commit represents a complete reformatting of the LLDB source code
Kate Stone via lldb-commits
lldb-commits at lists.llvm.org
Tue Sep 6 13:58:36 PDT 2016
Modified: lldb/trunk/tools/lldb-mi/MICmdCmdMiscellanous.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdMiscellanous.cpp?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdMiscellanous.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdMiscellanous.cpp Tue Sep 6 15:57:50 2016
@@ -17,71 +17,73 @@
#include "lldb/API/SBThread.h"
// In-house headers:
-#include "MICmdCmdMiscellanous.h"
-#include "MICmnMIResultRecord.h"
-#include "MICmnMIValueConst.h"
-#include "MICmnMIOutOfBandRecord.h"
-#include "MICmnLLDBDebugger.h"
-#include "MICmnLLDBDebugSessionInfo.h"
-#include "MIDriverBase.h"
#include "MICmdArgValFile.h"
+#include "MICmdArgValListOfN.h"
#include "MICmdArgValNumber.h"
-#include "MICmdArgValString.h"
-#include "MICmdArgValThreadGrp.h"
#include "MICmdArgValOptionLong.h"
#include "MICmdArgValOptionShort.h"
-#include "MICmdArgValListOfN.h"
-#include "MICmnStreamStdout.h"
+#include "MICmdArgValString.h"
+#include "MICmdArgValThreadGrp.h"
+#include "MICmdCmdMiscellanous.h"
+#include "MICmnLLDBDebugSessionInfo.h"
+#include "MICmnLLDBDebugger.h"
+#include "MICmnMIOutOfBandRecord.h"
+#include "MICmnMIResultRecord.h"
+#include "MICmnMIValueConst.h"
#include "MICmnStreamStderr.h"
+#include "MICmnStreamStdout.h"
+#include "MIDriverBase.h"
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdGdbExit constructor.
// Type: Method.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmdCmdGdbExit::CMICmdCmdGdbExit()
-{
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "gdb-exit";
+CMICmdCmdGdbExit::CMICmdCmdGdbExit() {
+ // Command factory matches this name with that received from the stdin stream
+ m_strMiCmd = "gdb-exit";
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdGdbExit::CreateSelf;
+ // Required by the CMICmdFactory when registering *this command
+ m_pSelfCreatorFn = &CMICmdCmdGdbExit::CreateSelf;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdGdbExit destructor.
// Type: Overrideable.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmdCmdGdbExit::~CMICmdCmdGdbExit()
-{
-}
+CMICmdCmdGdbExit::~CMICmdCmdGdbExit() {}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command does work in this function.
-// The command is likely to communicate with the LLDB SBDebugger in here.
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command does work in this
+// function.
+// The command is likely to communicate with the LLDB SBDebugger in
+// here.
// Type: Overridden.
// Args: None.
// Return: MIstatus::success - Functional succeeded.
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdGdbExit::Execute()
-{
- CMICmnLLDBDebugger::Instance().GetDriver().SetExitApplicationFlag(true);
- const lldb::SBError sbErr = m_rLLDBDebugSessionInfo.GetProcess().Destroy();
- // Do not check for sbErr.Fail() here, m_lldbProcess is likely !IsValid()
-
- return MIstatus::success;
+bool CMICmdCmdGdbExit::Execute() {
+ CMICmnLLDBDebugger::Instance().GetDriver().SetExitApplicationFlag(true);
+ const lldb::SBError sbErr = m_rLLDBDebugSessionInfo.GetProcess().Destroy();
+ // Do not check for sbErr.Fail() here, m_lldbProcess is likely !IsValid()
+
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command prepares a MI Record Result
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command prepares a MI Record
+// Result
// for the work carried out in the Execute().
// Type: Overridden.
// Args: None.
@@ -89,42 +91,42 @@ CMICmdCmdGdbExit::Execute()
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdGdbExit::Acknowledge()
-{
- const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Exit);
- m_miResultRecord = miRecordResult;
-
- // Prod the client i.e. Eclipse with out-of-band results to help it 'continue' because it is using LLDB debugger
- // Give the client '=thread-group-exited,id="i1"'
- m_bHasResultRecordExtra = true;
- const CMICmnMIValueConst miValueConst2("i1");
- const CMICmnMIValueResult miValueResult2("id", miValueConst2);
- const CMICmnMIOutOfBandRecord miOutOfBand(CMICmnMIOutOfBandRecord::eOutOfBand_ThreadGroupExited, miValueResult2);
- m_miResultRecordExtra = miOutOfBand.GetString();
-
- return MIstatus::success;
-}
-
-//++ ------------------------------------------------------------------------------------
-// Details: Required by the CMICmdFactory when registering *this command. The factory
+bool CMICmdCmdGdbExit::Acknowledge() {
+ const CMICmnMIResultRecord miRecordResult(
+ m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Exit);
+ m_miResultRecord = miRecordResult;
+
+ // Prod the client i.e. Eclipse with out-of-band results to help it 'continue'
+ // because it is using LLDB debugger
+ // Give the client '=thread-group-exited,id="i1"'
+ m_bHasResultRecordExtra = true;
+ const CMICmnMIValueConst miValueConst2("i1");
+ const CMICmnMIValueResult miValueResult2("id", miValueConst2);
+ const CMICmnMIOutOfBandRecord miOutOfBand(
+ CMICmnMIOutOfBandRecord::eOutOfBand_ThreadGroupExited, miValueResult2);
+ m_miResultRecordExtra = miOutOfBand.GetString();
+
+ return MIstatus::success;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: Required by the CMICmdFactory when registering *this command. The
+// factory
// calls this function to create an instance of *this command.
// Type: Static method.
// Args: None.
// Return: CMICmdBase * - Pointer to a new command.
// Throws: None.
//--
-CMICmdBase *
-CMICmdCmdGdbExit::CreateSelf()
-{
- return new CMICmdCmdGdbExit();
-}
+CMICmdBase *CMICmdCmdGdbExit::CreateSelf() { return new CMICmdCmdGdbExit(); }
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdListThreadGroups constructor.
// Type: Method.
// Args: None.
@@ -132,35 +134,33 @@ CMICmdCmdGdbExit::CreateSelf()
// Throws: None.
//--
CMICmdCmdListThreadGroups::CMICmdCmdListThreadGroups()
- : m_bIsI1(false)
- , m_bHaveArgOption(false)
- , m_bHaveArgRecurse(false)
- , m_constStrArgNamedAvailable("available")
- , m_constStrArgNamedRecurse("recurse")
- , m_constStrArgNamedGroup("group")
- , m_constStrArgNamedThreadGroup("i1")
-{
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "list-thread-groups";
+ : m_bIsI1(false), m_bHaveArgOption(false), m_bHaveArgRecurse(false),
+ m_constStrArgNamedAvailable("available"),
+ m_constStrArgNamedRecurse("recurse"), m_constStrArgNamedGroup("group"),
+ m_constStrArgNamedThreadGroup("i1") {
+ // Command factory matches this name with that received from the stdin stream
+ m_strMiCmd = "list-thread-groups";
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdListThreadGroups::CreateSelf;
+ // Required by the CMICmdFactory when registering *this command
+ m_pSelfCreatorFn = &CMICmdCmdListThreadGroups::CreateSelf;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdListThreadGroups destructor.
// Type: Overrideable.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmdCmdListThreadGroups::~CMICmdCmdListThreadGroups()
-{
- m_vecMIValueTuple.clear();
+CMICmdCmdListThreadGroups::~CMICmdCmdListThreadGroups() {
+ m_vecMIValueTuple.clear();
}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The parses the command line options
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The parses the command line
+// options
// arguments to extract values for each of those arguments.
// Type: Overridden.
// Args: None.
@@ -168,22 +168,30 @@ CMICmdCmdListThreadGroups::~CMICmdCmdLis
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdListThreadGroups::ParseArgs()
-{
- m_setCmdArgs.Add(new CMICmdArgValOptionLong(m_constStrArgNamedAvailable, false, true));
- m_setCmdArgs.Add(
- new CMICmdArgValOptionLong(m_constStrArgNamedRecurse, false, true, CMICmdArgValListBase::eArgValType_Number, 1));
- m_setCmdArgs.Add(new CMICmdArgValListOfN(m_constStrArgNamedGroup, false, true, CMICmdArgValListBase::eArgValType_Number));
- m_setCmdArgs.Add(new CMICmdArgValThreadGrp(m_constStrArgNamedThreadGroup, false, true));
- return ParseValidateCmdOptions();
-}
-
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command does work in this function.
-// The command is likely to communicate with the LLDB SBDebugger in here.
-// Synopsis: -list-thread-groups [ --available ] [ --recurse 1 ] [ group ... ]
-// This command does not follow the MI documentation exactly. Has an extra
+bool CMICmdCmdListThreadGroups::ParseArgs() {
+ m_setCmdArgs.Add(
+ new CMICmdArgValOptionLong(m_constStrArgNamedAvailable, false, true));
+ m_setCmdArgs.Add(
+ new CMICmdArgValOptionLong(m_constStrArgNamedRecurse, false, true,
+ CMICmdArgValListBase::eArgValType_Number, 1));
+ m_setCmdArgs.Add(
+ new CMICmdArgValListOfN(m_constStrArgNamedGroup, false, true,
+ CMICmdArgValListBase::eArgValType_Number));
+ m_setCmdArgs.Add(
+ new CMICmdArgValThreadGrp(m_constStrArgNamedThreadGroup, false, true));
+ return ParseValidateCmdOptions();
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command does work in this
+// function.
+// The command is likely to communicate with the LLDB SBDebugger in
+// here.
+// Synopsis: -list-thread-groups [ --available ] [ --recurse 1 ] [
+// group ... ]
+// This command does not follow the MI documentation exactly. Has an
+// extra
// argument "i1" to handle.
// Ref:
// http://sourceware.org/gdb/onlinedocs/gdb/GDB_002fMI-Miscellaneous-Commands.html#GDB_002fMI-Miscellaneous-Commands
@@ -193,62 +201,62 @@ CMICmdCmdListThreadGroups::ParseArgs()
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdListThreadGroups::Execute()
-{
- if (m_setCmdArgs.IsArgContextEmpty())
- // No options so "top level thread groups"
- return MIstatus::success;
-
- CMICMDBASE_GETOPTION(pArgAvailable, OptionLong, m_constStrArgNamedAvailable);
- CMICMDBASE_GETOPTION(pArgRecurse, OptionLong, m_constStrArgNamedRecurse);
- CMICMDBASE_GETOPTION(pArgThreadGroup, ThreadGrp, m_constStrArgNamedThreadGroup);
-
- // Got some options so "threads"
- if (pArgAvailable->GetFound())
- {
- if (pArgRecurse->GetFound())
- {
- m_bHaveArgRecurse = true;
- return MIstatus::success;
- }
+bool CMICmdCmdListThreadGroups::Execute() {
+ if (m_setCmdArgs.IsArgContextEmpty())
+ // No options so "top level thread groups"
+ return MIstatus::success;
- m_bHaveArgOption = true;
- return MIstatus::success;
+ CMICMDBASE_GETOPTION(pArgAvailable, OptionLong, m_constStrArgNamedAvailable);
+ CMICMDBASE_GETOPTION(pArgRecurse, OptionLong, m_constStrArgNamedRecurse);
+ CMICMDBASE_GETOPTION(pArgThreadGroup, ThreadGrp,
+ m_constStrArgNamedThreadGroup);
+
+ // Got some options so "threads"
+ if (pArgAvailable->GetFound()) {
+ if (pArgRecurse->GetFound()) {
+ m_bHaveArgRecurse = true;
+ return MIstatus::success;
}
- // "i1" as first argument (pos 0 of possible arg)
- if (!pArgThreadGroup->GetFound())
- return MIstatus::success;
- m_bIsI1 = true;
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(CMICmnLLDBDebugSessionInfo::Instance());
- lldb::SBProcess sbProcess = rSessionInfo.GetProcess();
-
- // Note do not check for sbProcess is IsValid(), continue
-
- m_vecMIValueTuple.clear();
- const MIuint nThreads = sbProcess.GetNumThreads();
- for (MIuint i = 0; i < nThreads; i++)
- {
- // GetThreadAtIndex() uses a base 0 index
- // GetThreadByIndexID() uses a base 1 index
- lldb::SBThread thread = sbProcess.GetThreadAtIndex(i);
-
- if (thread.IsValid())
- {
- CMICmnMIValueTuple miTuple;
- if (!rSessionInfo.MIResponseFormThreadInfo(m_cmdData, thread, CMICmnLLDBDebugSessionInfo::eThreadInfoFormat_NoFrames, miTuple))
- return MIstatus::failure;
- m_vecMIValueTuple.push_back(miTuple);
- }
+ m_bHaveArgOption = true;
+ return MIstatus::success;
+ }
+ // "i1" as first argument (pos 0 of possible arg)
+ if (!pArgThreadGroup->GetFound())
+ return MIstatus::success;
+ m_bIsI1 = true;
+
+ CMICmnLLDBDebugSessionInfo &rSessionInfo(
+ CMICmnLLDBDebugSessionInfo::Instance());
+ lldb::SBProcess sbProcess = rSessionInfo.GetProcess();
+
+ // Note do not check for sbProcess is IsValid(), continue
+
+ m_vecMIValueTuple.clear();
+ const MIuint nThreads = sbProcess.GetNumThreads();
+ for (MIuint i = 0; i < nThreads; i++) {
+ // GetThreadAtIndex() uses a base 0 index
+ // GetThreadByIndexID() uses a base 1 index
+ lldb::SBThread thread = sbProcess.GetThreadAtIndex(i);
+
+ if (thread.IsValid()) {
+ CMICmnMIValueTuple miTuple;
+ if (!rSessionInfo.MIResponseFormThreadInfo(
+ m_cmdData, thread,
+ CMICmnLLDBDebugSessionInfo::eThreadInfoFormat_NoFrames, miTuple))
+ return MIstatus::failure;
+
+ m_vecMIValueTuple.push_back(miTuple);
}
+ }
- return MIstatus::success;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command prepares a MI Record Result
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command prepares a MI Record
+// Result
// for the work carried out in the Execute().
// Type: Overridden.
// Args: None.
@@ -256,140 +264,147 @@ CMICmdCmdListThreadGroups::Execute()
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdListThreadGroups::Acknowledge()
-{
- if (m_bHaveArgOption)
- {
- if (m_bHaveArgRecurse)
- {
- const CMICmnMIValueConst miValueConst(MIRSRC(IDS_WORD_NOT_IMPLEMENTED_BRKTS));
- const CMICmnMIValueResult miValueResult("msg", miValueConst);
- const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error, miValueResult);
- m_miResultRecord = miRecordResult;
-
- return MIstatus::success;
- }
-
- const CMICmnMIValueConst miValueConst1("i1");
- const CMICmnMIValueResult miValueResult1("id", miValueConst1);
- CMICmnMIValueTuple miTuple(miValueResult1);
-
- const CMICmnMIValueConst miValueConst2("process");
- const CMICmnMIValueResult miValueResult2("type", miValueConst2);
- miTuple.Add(miValueResult2);
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(CMICmnLLDBDebugSessionInfo::Instance());
- if (rSessionInfo.GetProcess().IsValid())
- {
- const lldb::pid_t pid = rSessionInfo.GetProcess().GetProcessID();
- const CMIUtilString strPid(CMIUtilString::Format("%lld", pid));
- const CMICmnMIValueConst miValueConst3(strPid);
- const CMICmnMIValueResult miValueResult3("pid", miValueConst3);
- miTuple.Add(miValueResult3);
- }
-
- const CMICmnMIValueConst miValueConst4(MIRSRC(IDS_WORD_NOT_IMPLEMENTED_BRKTS));
- const CMICmnMIValueResult miValueResult4("num_children", miValueConst4);
- miTuple.Add(miValueResult4);
-
- const CMICmnMIValueConst miValueConst5(MIRSRC(IDS_WORD_NOT_IMPLEMENTED_BRKTS));
- const CMICmnMIValueResult miValueResult5("cores", miValueConst5);
- miTuple.Add(miValueResult5);
-
- const CMICmnMIValueList miValueList(miTuple);
- const CMICmnMIValueResult miValueResult6("groups", miValueList);
- const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, miValueResult6);
- m_miResultRecord = miRecordResult;
+bool CMICmdCmdListThreadGroups::Acknowledge() {
+ if (m_bHaveArgOption) {
+ if (m_bHaveArgRecurse) {
+ const CMICmnMIValueConst miValueConst(
+ MIRSRC(IDS_WORD_NOT_IMPLEMENTED_BRKTS));
+ const CMICmnMIValueResult miValueResult("msg", miValueConst);
+ const CMICmnMIResultRecord miRecordResult(
+ m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error,
+ miValueResult);
+ m_miResultRecord = miRecordResult;
- return MIstatus::success;
+ return MIstatus::success;
}
- if (!m_bIsI1)
- {
- const CMICmnMIValueConst miValueConst1("i1");
- const CMICmnMIValueResult miValueResult1("id", miValueConst1);
- CMICmnMIValueTuple miTuple(miValueResult1);
-
- const CMICmnMIValueConst miValueConst2("process");
- const CMICmnMIValueResult miValueResult2("type", miValueConst2);
- miTuple.Add(miValueResult2);
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(CMICmnLLDBDebugSessionInfo::Instance());
- if (rSessionInfo.GetProcess().IsValid())
- {
- const lldb::pid_t pid = rSessionInfo.GetProcess().GetProcessID();
- const CMIUtilString strPid(CMIUtilString::Format("%lld", pid));
- const CMICmnMIValueConst miValueConst3(strPid);
- const CMICmnMIValueResult miValueResult3("pid", miValueConst3);
- miTuple.Add(miValueResult3);
- }
-
- if (rSessionInfo.GetTarget().IsValid())
- {
- lldb::SBTarget sbTrgt = rSessionInfo.GetTarget();
- const char *pDir = sbTrgt.GetExecutable().GetDirectory();
- const char *pFileName = sbTrgt.GetExecutable().GetFilename();
- const CMIUtilString strFile(CMIUtilString::Format("%s/%s", pDir, pFileName));
- const CMICmnMIValueConst miValueConst4(strFile);
- const CMICmnMIValueResult miValueResult4("executable", miValueConst4);
- miTuple.Add(miValueResult4);
- }
-
- const CMICmnMIValueList miValueList(miTuple);
- const CMICmnMIValueResult miValueResult5("groups", miValueList);
- const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, miValueResult5);
- m_miResultRecord = miRecordResult;
- return MIstatus::success;
+ const CMICmnMIValueConst miValueConst1("i1");
+ const CMICmnMIValueResult miValueResult1("id", miValueConst1);
+ CMICmnMIValueTuple miTuple(miValueResult1);
+
+ const CMICmnMIValueConst miValueConst2("process");
+ const CMICmnMIValueResult miValueResult2("type", miValueConst2);
+ miTuple.Add(miValueResult2);
+
+ CMICmnLLDBDebugSessionInfo &rSessionInfo(
+ CMICmnLLDBDebugSessionInfo::Instance());
+ if (rSessionInfo.GetProcess().IsValid()) {
+ const lldb::pid_t pid = rSessionInfo.GetProcess().GetProcessID();
+ const CMIUtilString strPid(CMIUtilString::Format("%lld", pid));
+ const CMICmnMIValueConst miValueConst3(strPid);
+ const CMICmnMIValueResult miValueResult3("pid", miValueConst3);
+ miTuple.Add(miValueResult3);
}
- // Build up a list of thread information from tuples
- VecMIValueTuple_t::const_iterator it = m_vecMIValueTuple.begin();
- if (it == m_vecMIValueTuple.end())
- {
- const CMICmnMIValueConst miValueConst("[]");
- const CMICmnMIValueResult miValueResult("threads", miValueConst);
- const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, miValueResult);
- m_miResultRecord = miRecordResult;
- return MIstatus::success;
+ const CMICmnMIValueConst miValueConst4(
+ MIRSRC(IDS_WORD_NOT_IMPLEMENTED_BRKTS));
+ const CMICmnMIValueResult miValueResult4("num_children", miValueConst4);
+ miTuple.Add(miValueResult4);
+
+ const CMICmnMIValueConst miValueConst5(
+ MIRSRC(IDS_WORD_NOT_IMPLEMENTED_BRKTS));
+ const CMICmnMIValueResult miValueResult5("cores", miValueConst5);
+ miTuple.Add(miValueResult5);
+
+ const CMICmnMIValueList miValueList(miTuple);
+ const CMICmnMIValueResult miValueResult6("groups", miValueList);
+ const CMICmnMIResultRecord miRecordResult(
+ m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
+ miValueResult6);
+ m_miResultRecord = miRecordResult;
+
+ return MIstatus::success;
+ }
+
+ if (!m_bIsI1) {
+ const CMICmnMIValueConst miValueConst1("i1");
+ const CMICmnMIValueResult miValueResult1("id", miValueConst1);
+ CMICmnMIValueTuple miTuple(miValueResult1);
+
+ const CMICmnMIValueConst miValueConst2("process");
+ const CMICmnMIValueResult miValueResult2("type", miValueConst2);
+ miTuple.Add(miValueResult2);
+
+ CMICmnLLDBDebugSessionInfo &rSessionInfo(
+ CMICmnLLDBDebugSessionInfo::Instance());
+ if (rSessionInfo.GetProcess().IsValid()) {
+ const lldb::pid_t pid = rSessionInfo.GetProcess().GetProcessID();
+ const CMIUtilString strPid(CMIUtilString::Format("%lld", pid));
+ const CMICmnMIValueConst miValueConst3(strPid);
+ const CMICmnMIValueResult miValueResult3("pid", miValueConst3);
+ miTuple.Add(miValueResult3);
}
- CMICmnMIValueList miValueList(*it);
- ++it;
- while (it != m_vecMIValueTuple.end())
- {
- const CMICmnMIValueTuple &rTuple(*it);
- miValueList.Add(rTuple);
- // Next
- ++it;
+ if (rSessionInfo.GetTarget().IsValid()) {
+ lldb::SBTarget sbTrgt = rSessionInfo.GetTarget();
+ const char *pDir = sbTrgt.GetExecutable().GetDirectory();
+ const char *pFileName = sbTrgt.GetExecutable().GetFilename();
+ const CMIUtilString strFile(
+ CMIUtilString::Format("%s/%s", pDir, pFileName));
+ const CMICmnMIValueConst miValueConst4(strFile);
+ const CMICmnMIValueResult miValueResult4("executable", miValueConst4);
+ miTuple.Add(miValueResult4);
}
- const CMICmnMIValueResult miValueResult("threads", miValueList);
- const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, miValueResult);
+ const CMICmnMIValueList miValueList(miTuple);
+ const CMICmnMIValueResult miValueResult5("groups", miValueList);
+ const CMICmnMIResultRecord miRecordResult(
+ m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
+ miValueResult5);
m_miResultRecord = miRecordResult;
+ return MIstatus::success;
+ }
+ // Build up a list of thread information from tuples
+ VecMIValueTuple_t::const_iterator it = m_vecMIValueTuple.begin();
+ if (it == m_vecMIValueTuple.end()) {
+ const CMICmnMIValueConst miValueConst("[]");
+ const CMICmnMIValueResult miValueResult("threads", miValueConst);
+ const CMICmnMIResultRecord miRecordResult(
+ m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
+ miValueResult);
+ m_miResultRecord = miRecordResult;
return MIstatus::success;
+ }
+ CMICmnMIValueList miValueList(*it);
+ ++it;
+ while (it != m_vecMIValueTuple.end()) {
+ const CMICmnMIValueTuple &rTuple(*it);
+ miValueList.Add(rTuple);
+
+ // Next
+ ++it;
+ }
+
+ const CMICmnMIValueResult miValueResult("threads", miValueList);
+ const CMICmnMIResultRecord miRecordResult(
+ m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
+ miValueResult);
+ m_miResultRecord = miRecordResult;
+
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
-// Details: Required by the CMICmdFactory when registering *this command. The factory
+//++
+//------------------------------------------------------------------------------------
+// Details: Required by the CMICmdFactory when registering *this command. The
+// factory
// calls this function to create an instance of *this command.
// Type: Static method.
// Args: None.
// Return: CMICmdBase * - Pointer to a new command.
// Throws: None.
//--
-CMICmdBase *
-CMICmdCmdListThreadGroups::CreateSelf()
-{
- return new CMICmdCmdListThreadGroups();
+CMICmdBase *CMICmdCmdListThreadGroups::CreateSelf() {
+ return new CMICmdCmdListThreadGroups();
}
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdInterpreterExec constructor.
// Type: Method.
// Args: None.
@@ -397,29 +412,29 @@ CMICmdCmdListThreadGroups::CreateSelf()
// Throws: None.
//--
CMICmdCmdInterpreterExec::CMICmdCmdInterpreterExec()
- : m_constStrArgNamedInterpreter("interpreter")
- , m_constStrArgNamedCommand("command")
-{
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "interpreter-exec";
+ : m_constStrArgNamedInterpreter("interpreter"),
+ m_constStrArgNamedCommand("command") {
+ // Command factory matches this name with that received from the stdin stream
+ m_strMiCmd = "interpreter-exec";
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdInterpreterExec::CreateSelf;
+ // Required by the CMICmdFactory when registering *this command
+ m_pSelfCreatorFn = &CMICmdCmdInterpreterExec::CreateSelf;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdInterpreterExec destructor.
// Type: Overrideable.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmdCmdInterpreterExec::~CMICmdCmdInterpreterExec()
-{
-}
+CMICmdCmdInterpreterExec::~CMICmdCmdInterpreterExec() {}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The parses the command line options
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The parses the command line
+// options
// arguments to extract values for each of those arguments.
// Type: Overridden.
// Args: None.
@@ -427,45 +442,51 @@ CMICmdCmdInterpreterExec::~CMICmdCmdInte
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdInterpreterExec::ParseArgs()
-{
- m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgNamedInterpreter, true, true));
- m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgNamedCommand, true, true, true));
- return ParseValidateCmdOptions();
+bool CMICmdCmdInterpreterExec::ParseArgs() {
+ m_setCmdArgs.Add(
+ new CMICmdArgValString(m_constStrArgNamedInterpreter, true, true));
+ m_setCmdArgs.Add(
+ new CMICmdArgValString(m_constStrArgNamedCommand, true, true, true));
+ return ParseValidateCmdOptions();
}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command does work in this function.
-// The command is likely to communicate with the LLDB SBDebugger in here.
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command does work in this
+// function.
+// The command is likely to communicate with the LLDB SBDebugger in
+// here.
// Type: Overridden.
// Args: None.
// Return: MIstatus::success - Functional succeeded.
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdInterpreterExec::Execute()
-{
- CMICMDBASE_GETOPTION(pArgInterpreter, String, m_constStrArgNamedInterpreter);
- CMICMDBASE_GETOPTION(pArgCommand, String, m_constStrArgNamedCommand);
-
- // Handle the interpreter parameter by do nothing on purpose (set to 'handled' in
- // the arg definition above)
- const CMIUtilString &rStrInterpreter(pArgInterpreter->GetValue());
- MIunused(rStrInterpreter);
-
- const CMIUtilString &rStrCommand(pArgCommand->GetValue());
- CMICmnLLDBDebugSessionInfo &rSessionInfo(CMICmnLLDBDebugSessionInfo::Instance());
- const lldb::ReturnStatus rtn =
- rSessionInfo.GetDebugger().GetCommandInterpreter().HandleCommand(rStrCommand.c_str(), m_lldbResult, true);
- MIunused(rtn);
-
- return MIstatus::success;
-}
-
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command prepares a MI Record Result
+bool CMICmdCmdInterpreterExec::Execute() {
+ CMICMDBASE_GETOPTION(pArgInterpreter, String, m_constStrArgNamedInterpreter);
+ CMICMDBASE_GETOPTION(pArgCommand, String, m_constStrArgNamedCommand);
+
+ // Handle the interpreter parameter by do nothing on purpose (set to 'handled'
+ // in
+ // the arg definition above)
+ const CMIUtilString &rStrInterpreter(pArgInterpreter->GetValue());
+ MIunused(rStrInterpreter);
+
+ const CMIUtilString &rStrCommand(pArgCommand->GetValue());
+ CMICmnLLDBDebugSessionInfo &rSessionInfo(
+ CMICmnLLDBDebugSessionInfo::Instance());
+ const lldb::ReturnStatus rtn =
+ rSessionInfo.GetDebugger().GetCommandInterpreter().HandleCommand(
+ rStrCommand.c_str(), m_lldbResult, true);
+ MIunused(rtn);
+
+ return MIstatus::success;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command prepares a MI Record
+// Result
// for the work carried out in the Execute().
// Type: Overridden.
// Args: None.
@@ -473,92 +494,91 @@ CMICmdCmdInterpreterExec::Execute()
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdInterpreterExec::Acknowledge()
-{
- if (m_lldbResult.GetOutputSize() > 0)
- {
- CMIUtilString strMsg(m_lldbResult.GetOutput());
- strMsg = strMsg.StripCREndOfLine();
- CMICmnStreamStdout::TextToStdout(strMsg);
- }
- if (m_lldbResult.GetErrorSize() > 0)
- {
- CMIUtilString strMsg(m_lldbResult.GetError());
- strMsg = strMsg.StripCREndOfLine();
- CMICmnStreamStderr::LLDBMsgToConsole(strMsg);
- }
-
- const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done);
- m_miResultRecord = miRecordResult;
-
- return MIstatus::success;
-}
-
-//++ ------------------------------------------------------------------------------------
-// Details: Required by the CMICmdFactory when registering *this command. The factory
+bool CMICmdCmdInterpreterExec::Acknowledge() {
+ if (m_lldbResult.GetOutputSize() > 0) {
+ CMIUtilString strMsg(m_lldbResult.GetOutput());
+ strMsg = strMsg.StripCREndOfLine();
+ CMICmnStreamStdout::TextToStdout(strMsg);
+ }
+ if (m_lldbResult.GetErrorSize() > 0) {
+ CMIUtilString strMsg(m_lldbResult.GetError());
+ strMsg = strMsg.StripCREndOfLine();
+ CMICmnStreamStderr::LLDBMsgToConsole(strMsg);
+ }
+
+ const CMICmnMIResultRecord miRecordResult(
+ m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done);
+ m_miResultRecord = miRecordResult;
+
+ return MIstatus::success;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: Required by the CMICmdFactory when registering *this command. The
+// factory
// calls this function to create an instance of *this command.
// Type: Static method.
// Args: None.
// Return: CMICmdBase * - Pointer to a new command.
// Throws: None.
//--
-CMICmdBase *
-CMICmdCmdInterpreterExec::CreateSelf()
-{
- return new CMICmdCmdInterpreterExec();
+CMICmdBase *CMICmdCmdInterpreterExec::CreateSelf() {
+ return new CMICmdCmdInterpreterExec();
}
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdInferiorTtySet constructor.
// Type: Method.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmdCmdInferiorTtySet::CMICmdCmdInferiorTtySet()
-{
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "inferior-tty-set";
+CMICmdCmdInferiorTtySet::CMICmdCmdInferiorTtySet() {
+ // Command factory matches this name with that received from the stdin stream
+ m_strMiCmd = "inferior-tty-set";
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdInferiorTtySet::CreateSelf;
+ // Required by the CMICmdFactory when registering *this command
+ m_pSelfCreatorFn = &CMICmdCmdInferiorTtySet::CreateSelf;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdInferiorTtySet destructor.
// Type: Overrideable.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmdCmdInferiorTtySet::~CMICmdCmdInferiorTtySet()
-{
-}
+CMICmdCmdInferiorTtySet::~CMICmdCmdInferiorTtySet() {}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command does work in this function.
-// The command is likely to communicate with the LLDB SBDebugger in here.
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command does work in this
+// function.
+// The command is likely to communicate with the LLDB SBDebugger in
+// here.
// Type: Overridden.
// Args: None.
// Return: MIstatus::success - Functional succeeded.
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdInferiorTtySet::Execute()
-{
- // Do nothing
+bool CMICmdCmdInferiorTtySet::Execute() {
+ // Do nothing
- return MIstatus::success;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command prepares a MI Record Result
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command prepares a MI Record
+// Result
// for the work carried out in the Execute().
// Type: Overridden.
// Args: None.
@@ -566,25 +586,24 @@ CMICmdCmdInferiorTtySet::Execute()
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdInferiorTtySet::Acknowledge()
-{
- const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error);
- m_miResultRecord = miRecordResult;
-
- return MIstatus::success;
+bool CMICmdCmdInferiorTtySet::Acknowledge() {
+ const CMICmnMIResultRecord miRecordResult(
+ m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error);
+ m_miResultRecord = miRecordResult;
+
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
-// Details: Required by the CMICmdFactory when registering *this command. The factory
+//++
+//------------------------------------------------------------------------------------
+// Details: Required by the CMICmdFactory when registering *this command. The
+// factory
// calls this function to create an instance of *this command.
// Type: Static method.
// Args: None.
// Return: CMICmdBase * - Pointer to a new command.
// Throws: None.
//--
-CMICmdBase *
-CMICmdCmdInferiorTtySet::CreateSelf()
-{
- return new CMICmdCmdInferiorTtySet();
+CMICmdBase *CMICmdCmdInferiorTtySet::CreateSelf() {
+ return new CMICmdCmdInferiorTtySet();
}
Modified: lldb/trunk/tools/lldb-mi/MICmdCmdMiscellanous.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdMiscellanous.h?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdMiscellanous.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdMiscellanous.h Tue Sep 6 15:57:50 2016
@@ -12,13 +12,16 @@
// CMICmdCmdInterpreterExec interface.
// CMICmdCmdInferiorTtySet interface.
//
-// To implement new MI commands derive a new command class from the command base
-// class. To enable the new command for interpretation add the new command class
+// To implement new MI commands derive a new command class from the
+// command base
+// class. To enable the new command for interpretation add the new
+// command class
// to the command factory. The files of relevance are:
// MICmdCommands.cpp
// MICmdBase.h / .cpp
// MICmdCmd.h / .cpp
-// For an introduction to adding a new command see CMICmdCmdSupportInfoMiCmdQuery
+// For an introduction to adding a new command see
+// CMICmdCmdSupportInfoMiCmdQuery
// command class as an example.
#pragma once
@@ -28,126 +31,127 @@
// In-house headers:
#include "MICmdBase.h"
-#include "MICmnMIValueTuple.h"
#include "MICmnMIValueList.h"
+#include "MICmnMIValueTuple.h"
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI command class. MI commands derived from the command base class.
// *this class implements MI command "gdb-exit".
//--
-class CMICmdCmdGdbExit : public CMICmdBase
-{
- // Statics:
- public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
- public:
- /* ctor */ CMICmdCmdGdbExit();
-
- // Overridden:
- public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdGdbExit() override;
+class CMICmdCmdGdbExit : public CMICmdBase {
+ // Statics:
+public:
+ // Required by the CMICmdFactory when registering *this command
+ static CMICmdBase *CreateSelf();
+
+ // Methods:
+public:
+ /* ctor */ CMICmdCmdGdbExit();
+
+ // Overridden:
+public:
+ // From CMICmdInvoker::ICmd
+ bool Execute() override;
+ bool Acknowledge() override;
+ // From CMICmnBase
+ /* dtor */ ~CMICmdCmdGdbExit() override;
};
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI command class. MI commands derived from the command base class.
// *this class implements MI command "list-thread-groups".
// This command does not follow the MI documentation exactly.
// http://sourceware.org/gdb/onlinedocs/gdb/GDB_002fMI-Miscellaneous-Commands.html#GDB_002fMI-Miscellaneous-Commands
//--
-class CMICmdCmdListThreadGroups : public CMICmdBase
-{
- // Statics:
- public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
- public:
- /* ctor */ CMICmdCmdListThreadGroups();
-
- // Overridden:
- public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdListThreadGroups() override;
-
- // Typedefs:
- private:
- typedef std::vector<CMICmnMIValueTuple> VecMIValueTuple_t;
-
- // Attributes:
- private:
- bool m_bIsI1; // True = Yes command argument equal "i1", false = no match
- bool m_bHaveArgOption; // True = Yes "--available" present, false = not found
- bool m_bHaveArgRecurse; // True = Yes command argument "--recurse", false = no found
- VecMIValueTuple_t m_vecMIValueTuple;
- const CMIUtilString m_constStrArgNamedAvailable;
- const CMIUtilString m_constStrArgNamedRecurse;
- const CMIUtilString m_constStrArgNamedGroup;
- const CMIUtilString m_constStrArgNamedThreadGroup;
+class CMICmdCmdListThreadGroups : public CMICmdBase {
+ // Statics:
+public:
+ // Required by the CMICmdFactory when registering *this command
+ static CMICmdBase *CreateSelf();
+
+ // Methods:
+public:
+ /* ctor */ CMICmdCmdListThreadGroups();
+
+ // Overridden:
+public:
+ // From CMICmdInvoker::ICmd
+ bool Execute() override;
+ bool Acknowledge() override;
+ bool ParseArgs() override;
+ // From CMICmnBase
+ /* dtor */ ~CMICmdCmdListThreadGroups() override;
+
+ // Typedefs:
+private:
+ typedef std::vector<CMICmnMIValueTuple> VecMIValueTuple_t;
+
+ // Attributes:
+private:
+ bool m_bIsI1; // True = Yes command argument equal "i1", false = no match
+ bool m_bHaveArgOption; // True = Yes "--available" present, false = not found
+ bool m_bHaveArgRecurse; // True = Yes command argument "--recurse", false = no
+ // found
+ VecMIValueTuple_t m_vecMIValueTuple;
+ const CMIUtilString m_constStrArgNamedAvailable;
+ const CMIUtilString m_constStrArgNamedRecurse;
+ const CMIUtilString m_constStrArgNamedGroup;
+ const CMIUtilString m_constStrArgNamedThreadGroup;
};
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI command class. MI commands derived from the command base class.
// *this class implements MI command "interpreter-exec".
//--
-class CMICmdCmdInterpreterExec : public CMICmdBase
-{
- // Statics:
- public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
- public:
- /* ctor */ CMICmdCmdInterpreterExec();
-
- // Overridden:
- public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdInterpreterExec() override;
-
- // Attributes:
- private:
- const CMIUtilString m_constStrArgNamedInterpreter;
- const CMIUtilString m_constStrArgNamedCommand;
- lldb::SBCommandReturnObject m_lldbResult;
+class CMICmdCmdInterpreterExec : public CMICmdBase {
+ // Statics:
+public:
+ // Required by the CMICmdFactory when registering *this command
+ static CMICmdBase *CreateSelf();
+
+ // Methods:
+public:
+ /* ctor */ CMICmdCmdInterpreterExec();
+
+ // Overridden:
+public:
+ // From CMICmdInvoker::ICmd
+ bool Execute() override;
+ bool Acknowledge() override;
+ bool ParseArgs() override;
+ // From CMICmnBase
+ /* dtor */ ~CMICmdCmdInterpreterExec() override;
+
+ // Attributes:
+private:
+ const CMIUtilString m_constStrArgNamedInterpreter;
+ const CMIUtilString m_constStrArgNamedCommand;
+ lldb::SBCommandReturnObject m_lldbResult;
};
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI command class. MI commands derived from the command base class.
// *this class implements MI command "inferior-tty-set".
//--
-class CMICmdCmdInferiorTtySet : public CMICmdBase
-{
- // Statics:
- public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
- public:
- /* ctor */ CMICmdCmdInferiorTtySet();
-
- // Overridden:
- public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdInferiorTtySet() override;
+class CMICmdCmdInferiorTtySet : public CMICmdBase {
+ // Statics:
+public:
+ // Required by the CMICmdFactory when registering *this command
+ static CMICmdBase *CreateSelf();
+
+ // Methods:
+public:
+ /* ctor */ CMICmdCmdInferiorTtySet();
+
+ // Overridden:
+public:
+ // From CMICmdInvoker::ICmd
+ bool Execute() override;
+ bool Acknowledge() override;
+ // From CMICmnBase
+ /* dtor */ ~CMICmdCmdInferiorTtySet() override;
};
Modified: lldb/trunk/tools/lldb-mi/MICmdCmdStack.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdStack.cpp?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdStack.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdStack.cpp Tue Sep 6 15:57:50 2016
@@ -18,21 +18,22 @@
#include "lldb/API/SBThread.h"
// In-house headers:
-#include "MICmdCmdStack.h"
-#include "MICmnMIResultRecord.h"
-#include "MICmnMIValueConst.h"
-#include "MICmnMIOutOfBandRecord.h"
-#include "MICmnLLDBDebugger.h"
-#include "MICmnLLDBDebugSessionInfo.h"
+#include "MICmdArgValListOfN.h"
#include "MICmdArgValNumber.h"
-#include "MICmdArgValString.h"
-#include "MICmdArgValThreadGrp.h"
#include "MICmdArgValOptionLong.h"
#include "MICmdArgValOptionShort.h"
#include "MICmdArgValPrintValues.h"
-#include "MICmdArgValListOfN.h"
+#include "MICmdArgValString.h"
+#include "MICmdArgValThreadGrp.h"
+#include "MICmdCmdStack.h"
+#include "MICmnLLDBDebugSessionInfo.h"
+#include "MICmnLLDBDebugger.h"
+#include "MICmnMIOutOfBandRecord.h"
+#include "MICmnMIResultRecord.h"
+#include "MICmnMIValueConst.h"
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdStackInfoDepth constructor.
// Type: Method.
// Args: None.
@@ -40,29 +41,28 @@
// Throws: None.
//--
CMICmdCmdStackInfoDepth::CMICmdCmdStackInfoDepth()
- : m_nThreadFrames(0)
- , m_constStrArgMaxDepth("max-depth")
-{
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "stack-info-depth";
+ : m_nThreadFrames(0), m_constStrArgMaxDepth("max-depth") {
+ // Command factory matches this name with that received from the stdin stream
+ m_strMiCmd = "stack-info-depth";
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdStackInfoDepth::CreateSelf;
+ // Required by the CMICmdFactory when registering *this command
+ m_pSelfCreatorFn = &CMICmdCmdStackInfoDepth::CreateSelf;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdStackInfoDepth destructor.
// Type: Overrideable.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmdCmdStackInfoDepth::~CMICmdCmdStackInfoDepth()
-{
-}
+CMICmdCmdStackInfoDepth::~CMICmdCmdStackInfoDepth() {}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The parses the command line options
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The parses the command line
+// options
// arguments to extract values for each of those arguments.
// Type: Overridden.
// Args: None.
@@ -70,46 +70,52 @@ CMICmdCmdStackInfoDepth::~CMICmdCmdStack
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdStackInfoDepth::ParseArgs()
-{
- m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgMaxDepth, false, false));
- return ParseValidateCmdOptions();
+bool CMICmdCmdStackInfoDepth::ParseArgs() {
+ m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgMaxDepth, false, false));
+ return ParseValidateCmdOptions();
}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command does work in this function.
-// The command is likely to communicate with the LLDB SBDebugger in here.
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command does work in this
+// function.
+// The command is likely to communicate with the LLDB SBDebugger in
+// here.
// Type: Overridden.
// Args: None.
// Return: MIstatus::success - Functional succeeded.
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdStackInfoDepth::Execute()
-{
- CMICMDBASE_GETOPTION(pArgThread, OptionLong, m_constStrArgThread);
- CMICMDBASE_GETOPTION(pArgMaxDepth, Number, m_constStrArgMaxDepth);
-
- // Retrieve the --thread option's thread ID (only 1)
- MIuint64 nThreadId = UINT64_MAX;
- if (pArgThread->GetFound() && !pArgThread->GetExpectedOption<CMICmdArgValNumber, MIuint64>(nThreadId))
- {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_OPTION_NOT_FOUND), m_cmdData.strMiCmd.c_str(), m_constStrArgThread.c_str()));
- return MIstatus::failure;
- }
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(CMICmnLLDBDebugSessionInfo::Instance());
- lldb::SBProcess sbProcess = rSessionInfo.GetProcess();
- lldb::SBThread thread = (nThreadId != UINT64_MAX) ? sbProcess.GetThreadByIndexID(nThreadId) : sbProcess.GetSelectedThread();
- m_nThreadFrames = thread.GetNumFrames();
-
- return MIstatus::success;
-}
-
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command prepares a MI Record Result
+bool CMICmdCmdStackInfoDepth::Execute() {
+ CMICMDBASE_GETOPTION(pArgThread, OptionLong, m_constStrArgThread);
+ CMICMDBASE_GETOPTION(pArgMaxDepth, Number, m_constStrArgMaxDepth);
+
+ // Retrieve the --thread option's thread ID (only 1)
+ MIuint64 nThreadId = UINT64_MAX;
+ if (pArgThread->GetFound() &&
+ !pArgThread->GetExpectedOption<CMICmdArgValNumber, MIuint64>(nThreadId)) {
+ SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_OPTION_NOT_FOUND),
+ m_cmdData.strMiCmd.c_str(),
+ m_constStrArgThread.c_str()));
+ return MIstatus::failure;
+ }
+
+ CMICmnLLDBDebugSessionInfo &rSessionInfo(
+ CMICmnLLDBDebugSessionInfo::Instance());
+ lldb::SBProcess sbProcess = rSessionInfo.GetProcess();
+ lldb::SBThread thread = (nThreadId != UINT64_MAX)
+ ? sbProcess.GetThreadByIndexID(nThreadId)
+ : sbProcess.GetSelectedThread();
+ m_nThreadFrames = thread.GetNumFrames();
+
+ return MIstatus::success;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command prepares a MI Record
+// Result
// for the work carried out in the Execute().
// Type: Overridden.
// Args: None.
@@ -117,65 +123,66 @@ CMICmdCmdStackInfoDepth::Execute()
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdStackInfoDepth::Acknowledge()
-{
- const CMIUtilString strDepth(CMIUtilString::Format("%d", m_nThreadFrames));
- const CMICmnMIValueConst miValueConst(strDepth);
- const CMICmnMIValueResult miValueResult("depth", miValueConst);
- const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, miValueResult);
- m_miResultRecord = miRecordResult;
-
- return MIstatus::success;
-}
-
-//++ ------------------------------------------------------------------------------------
-// Details: Required by the CMICmdFactory when registering *this command. The factory
+bool CMICmdCmdStackInfoDepth::Acknowledge() {
+ const CMIUtilString strDepth(CMIUtilString::Format("%d", m_nThreadFrames));
+ const CMICmnMIValueConst miValueConst(strDepth);
+ const CMICmnMIValueResult miValueResult("depth", miValueConst);
+ const CMICmnMIResultRecord miRecordResult(
+ m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
+ miValueResult);
+ m_miResultRecord = miRecordResult;
+
+ return MIstatus::success;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: Required by the CMICmdFactory when registering *this command. The
+// factory
// calls this function to create an instance of *this command.
// Type: Static method.
// Args: None.
// Return: CMICmdBase * - Pointer to a new command.
// Throws: None.
//--
-CMICmdBase *
-CMICmdCmdStackInfoDepth::CreateSelf()
-{
- return new CMICmdCmdStackInfoDepth();
+CMICmdBase *CMICmdCmdStackInfoDepth::CreateSelf() {
+ return new CMICmdCmdStackInfoDepth();
}
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdStackInfoFrame constructor.
// Type: Method.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmdCmdStackInfoFrame::CMICmdCmdStackInfoFrame()
-{
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "stack-info-frame";
+CMICmdCmdStackInfoFrame::CMICmdCmdStackInfoFrame() {
+ // Command factory matches this name with that received from the stdin stream
+ m_strMiCmd = "stack-info-frame";
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdStackInfoFrame::CreateSelf;
+ // Required by the CMICmdFactory when registering *this command
+ m_pSelfCreatorFn = &CMICmdCmdStackInfoFrame::CreateSelf;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdStackInfoFrame destructor.
// Type: Overrideable.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmdCmdStackInfoFrame::~CMICmdCmdStackInfoFrame()
-{
-}
+CMICmdCmdStackInfoFrame::~CMICmdCmdStackInfoFrame() {}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The parses the command line options
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The parses the command line
+// options
// arguments to extract values for each of those arguments.
// Type: Overridden.
// Args: None.
@@ -183,42 +190,45 @@ CMICmdCmdStackInfoFrame::~CMICmdCmdStack
// MIstatus::failure - Function failed.
// Throws: None.
//--
-bool
-CMICmdCmdStackInfoFrame::ParseArgs()
-{
- return ParseValidateCmdOptions();
-}
+bool CMICmdCmdStackInfoFrame::ParseArgs() { return ParseValidateCmdOptions(); }
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command does work in this function.
-// The command is likely to communicate with the LLDB SBDebugger in here.
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command does work in this
+// function.
+// The command is likely to communicate with the LLDB SBDebugger in
+// here.
// Type: Overridden.
// Args: None.
// Return: MIstatus::success - Function succeeded.
// MIstatus::failure - Function failed.
// Throws: None.
//--
-bool
-CMICmdCmdStackInfoFrame::Execute()
-{
- CMICmnLLDBDebugSessionInfo &rSessionInfo(CMICmnLLDBDebugSessionInfo::Instance());
- lldb::SBProcess sbProcess = rSessionInfo.GetProcess();
- if (!sbProcess.IsValid())
- {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_INVALID_PROCESS), m_cmdData.strMiCmd.c_str()));
- return MIstatus::failure;
- }
-
- lldb::SBThread sbThread = sbProcess.GetSelectedThread();
- MIuint nFrameId = sbThread.GetSelectedFrame().GetFrameID();
- if (!rSessionInfo.MIResponseFormFrameInfo(sbThread, nFrameId, CMICmnLLDBDebugSessionInfo::eFrameInfoFormat_NoArguments, m_miValueTuple))
- return MIstatus::failure;
-
- return MIstatus::success;
-}
-
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command prepares a MI Record Result
+bool CMICmdCmdStackInfoFrame::Execute() {
+ CMICmnLLDBDebugSessionInfo &rSessionInfo(
+ CMICmnLLDBDebugSessionInfo::Instance());
+ lldb::SBProcess sbProcess = rSessionInfo.GetProcess();
+ if (!sbProcess.IsValid()) {
+ SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_INVALID_PROCESS),
+ m_cmdData.strMiCmd.c_str()));
+ return MIstatus::failure;
+ }
+
+ lldb::SBThread sbThread = sbProcess.GetSelectedThread();
+ MIuint nFrameId = sbThread.GetSelectedFrame().GetFrameID();
+ if (!rSessionInfo.MIResponseFormFrameInfo(
+ sbThread, nFrameId,
+ CMICmnLLDBDebugSessionInfo::eFrameInfoFormat_NoArguments,
+ m_miValueTuple))
+ return MIstatus::failure;
+
+ return MIstatus::success;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command prepares a MI Record
+// Result
// for the work carried out in the Execute().
// Type: Overridden.
// Args: None.
@@ -226,35 +236,36 @@ CMICmdCmdStackInfoFrame::Execute()
// MIstatus::failure - Function failed.
// Throws: None.
//--
-bool
-CMICmdCmdStackInfoFrame::Acknowledge()
-{
- const CMICmnMIValueResult miValueResult("frame", m_miValueTuple);
- const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, miValueResult);
- m_miResultRecord = miRecordResult;
-
- return MIstatus::success;
+bool CMICmdCmdStackInfoFrame::Acknowledge() {
+ const CMICmnMIValueResult miValueResult("frame", m_miValueTuple);
+ const CMICmnMIResultRecord miRecordResult(
+ m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
+ miValueResult);
+ m_miResultRecord = miRecordResult;
+
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
-// Details: Required by the CMICmdFactory when registering *this command. The factory
+//++
+//------------------------------------------------------------------------------------
+// Details: Required by the CMICmdFactory when registering *this command. The
+// factory
// calls this function to create an instance of *this command.
// Type: Static method.
// Args: None.
// Return: CMICmdBase * - Pointer to a new command.
// Throws: None.
//--
-CMICmdBase *
-CMICmdCmdStackInfoFrame::CreateSelf()
-{
- return new CMICmdCmdStackInfoFrame();
+CMICmdBase *CMICmdCmdStackInfoFrame::CreateSelf() {
+ return new CMICmdCmdStackInfoFrame();
}
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdStackListFrames constructor.
// Type: Method.
// Args: None.
@@ -262,31 +273,31 @@ CMICmdCmdStackInfoFrame::CreateSelf()
// Throws: None.
//--
CMICmdCmdStackListFrames::CMICmdCmdStackListFrames()
- : m_nThreadFrames(0)
- , m_constStrArgFrameLow("low-frame")
- , m_constStrArgFrameHigh("high-frame")
-{
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "stack-list-frames";
+ : m_nThreadFrames(0), m_constStrArgFrameLow("low-frame"),
+ m_constStrArgFrameHigh("high-frame") {
+ // Command factory matches this name with that received from the stdin stream
+ m_strMiCmd = "stack-list-frames";
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdStackListFrames::CreateSelf;
+ // Required by the CMICmdFactory when registering *this command
+ m_pSelfCreatorFn = &CMICmdCmdStackListFrames::CreateSelf;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdStackListFrames destructor.
// Type: Overrideable.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmdCmdStackListFrames::~CMICmdCmdStackListFrames()
-{
- m_vecMIValueResult.clear();
+CMICmdCmdStackListFrames::~CMICmdCmdStackListFrames() {
+ m_vecMIValueResult.clear();
}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The parses the command line options
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The parses the command line
+// options
// arguments to extract values for each of those arguments.
// Type: Overridden.
// Args: None.
@@ -294,75 +305,85 @@ CMICmdCmdStackListFrames::~CMICmdCmdStac
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdStackListFrames::ParseArgs()
-{
- m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgFrameLow, false, true));
- m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgFrameHigh, false, true));
- return ParseValidateCmdOptions();
+bool CMICmdCmdStackListFrames::ParseArgs() {
+ m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgFrameLow, false, true));
+ m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgFrameHigh, false, true));
+ return ParseValidateCmdOptions();
}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command does work in this function.
-// The command is likely to communicate with the LLDB SBDebugger in here.
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command does work in this
+// function.
+// The command is likely to communicate with the LLDB SBDebugger in
+// here.
// Type: Overridden.
// Args: None.
// Return: MIstatus::success - Functional succeeded.
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdStackListFrames::Execute()
-{
- CMICMDBASE_GETOPTION(pArgThread, OptionLong, m_constStrArgThread);
- CMICMDBASE_GETOPTION(pArgFrameLow, Number, m_constStrArgFrameLow);
- CMICMDBASE_GETOPTION(pArgFrameHigh, Number, m_constStrArgFrameHigh);
-
- // Retrieve the --thread option's thread ID (only 1)
- MIuint64 nThreadId = UINT64_MAX;
- if (pArgThread->GetFound() && !pArgThread->GetExpectedOption<CMICmdArgValNumber, MIuint64>(nThreadId))
- {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_OPTION_NOT_FOUND), m_cmdData.strMiCmd.c_str(), m_constStrArgThread.c_str()));
- return MIstatus::failure;
- }
-
- // Frame low and high options are not mandatory
- MIuint nFrameHigh = pArgFrameHigh->GetFound() ? pArgFrameHigh->GetValue() : UINT32_MAX;
- const MIuint nFrameLow = pArgFrameLow->GetFound() ? pArgFrameLow->GetValue() : 0;
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(CMICmnLLDBDebugSessionInfo::Instance());
- lldb::SBProcess sbProcess = rSessionInfo.GetProcess();
- lldb::SBThread thread = (nThreadId != UINT64_MAX) ? sbProcess.GetThreadByIndexID(nThreadId) : sbProcess.GetSelectedThread();
- MIuint nThreadFrames = thread.GetNumFrames();
-
- // Adjust nThreadFrames for the nFrameHigh argument as we use nFrameHigh+1 in the min calc as the arg
- // is not an index, but a frame id value.
- if (nFrameHigh < UINT32_MAX)
- {
- nFrameHigh++;
- nThreadFrames = (nFrameHigh < nThreadFrames) ? nFrameHigh : nThreadFrames;
- }
-
- m_nThreadFrames = nThreadFrames;
- if (nThreadFrames == 0)
- return MIstatus::success;
-
- m_vecMIValueResult.clear();
- for (MIuint nLevel = nFrameLow; nLevel < nThreadFrames; nLevel++)
- {
- CMICmnMIValueTuple miValueTuple;
- if (!rSessionInfo.MIResponseFormFrameInfo(thread, nLevel, CMICmnLLDBDebugSessionInfo::eFrameInfoFormat_NoArguments, miValueTuple))
- return MIstatus::failure;
-
- const CMICmnMIValueResult miValueResult8("frame", miValueTuple);
- m_vecMIValueResult.push_back(miValueResult8);
- }
+bool CMICmdCmdStackListFrames::Execute() {
+ CMICMDBASE_GETOPTION(pArgThread, OptionLong, m_constStrArgThread);
+ CMICMDBASE_GETOPTION(pArgFrameLow, Number, m_constStrArgFrameLow);
+ CMICMDBASE_GETOPTION(pArgFrameHigh, Number, m_constStrArgFrameHigh);
+
+ // Retrieve the --thread option's thread ID (only 1)
+ MIuint64 nThreadId = UINT64_MAX;
+ if (pArgThread->GetFound() &&
+ !pArgThread->GetExpectedOption<CMICmdArgValNumber, MIuint64>(nThreadId)) {
+ SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_OPTION_NOT_FOUND),
+ m_cmdData.strMiCmd.c_str(),
+ m_constStrArgThread.c_str()));
+ return MIstatus::failure;
+ }
+
+ // Frame low and high options are not mandatory
+ MIuint nFrameHigh =
+ pArgFrameHigh->GetFound() ? pArgFrameHigh->GetValue() : UINT32_MAX;
+ const MIuint nFrameLow =
+ pArgFrameLow->GetFound() ? pArgFrameLow->GetValue() : 0;
+
+ CMICmnLLDBDebugSessionInfo &rSessionInfo(
+ CMICmnLLDBDebugSessionInfo::Instance());
+ lldb::SBProcess sbProcess = rSessionInfo.GetProcess();
+ lldb::SBThread thread = (nThreadId != UINT64_MAX)
+ ? sbProcess.GetThreadByIndexID(nThreadId)
+ : sbProcess.GetSelectedThread();
+ MIuint nThreadFrames = thread.GetNumFrames();
+
+ // Adjust nThreadFrames for the nFrameHigh argument as we use nFrameHigh+1 in
+ // the min calc as the arg
+ // is not an index, but a frame id value.
+ if (nFrameHigh < UINT32_MAX) {
+ nFrameHigh++;
+ nThreadFrames = (nFrameHigh < nThreadFrames) ? nFrameHigh : nThreadFrames;
+ }
+ m_nThreadFrames = nThreadFrames;
+ if (nThreadFrames == 0)
return MIstatus::success;
-}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command prepares a MI Record Result
+ m_vecMIValueResult.clear();
+ for (MIuint nLevel = nFrameLow; nLevel < nThreadFrames; nLevel++) {
+ CMICmnMIValueTuple miValueTuple;
+ if (!rSessionInfo.MIResponseFormFrameInfo(
+ thread, nLevel,
+ CMICmnLLDBDebugSessionInfo::eFrameInfoFormat_NoArguments,
+ miValueTuple))
+ return MIstatus::failure;
+
+ const CMICmnMIValueResult miValueResult8("frame", miValueTuple);
+ m_vecMIValueResult.push_back(miValueResult8);
+ }
+
+ return MIstatus::success;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command prepares a MI Record
+// Result
// for the work carried out in the Execute().
// Type: Overridden.
// Args: None.
@@ -370,69 +391,71 @@ CMICmdCmdStackListFrames::Execute()
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdStackListFrames::Acknowledge()
-{
- if (m_nThreadFrames == 0)
- {
- // MI print "3^done,stack=[{}]"
- const CMICmnMIValueTuple miValueTuple;
- const CMICmnMIValueList miValueList(miValueTuple);
- const CMICmnMIValueResult miValueResult("stack", miValueList);
- const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, miValueResult);
- m_miResultRecord = miRecordResult;
-
- return MIstatus::success;
- }
+bool CMICmdCmdStackListFrames::Acknowledge() {
+ if (m_nThreadFrames == 0) {
+ // MI print "3^done,stack=[{}]"
+ const CMICmnMIValueTuple miValueTuple;
+ const CMICmnMIValueList miValueList(miValueTuple);
+ const CMICmnMIValueResult miValueResult("stack", miValueList);
+ const CMICmnMIResultRecord miRecordResult(
+ m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
+ miValueResult);
+ m_miResultRecord = miRecordResult;
- // Build up a list of thread information from tuples
- VecMIValueResult_t::const_iterator it = m_vecMIValueResult.begin();
- if (it == m_vecMIValueResult.end())
- {
- // MI print "3^done,stack=[{}]"
- const CMICmnMIValueTuple miValueTuple;
- const CMICmnMIValueList miValueList(miValueTuple);
- const CMICmnMIValueResult miValueResult("stack", miValueList);
- const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, miValueResult);
- m_miResultRecord = miRecordResult;
- return MIstatus::success;
- }
- CMICmnMIValueList miValueList(*it);
- ++it;
- while (it != m_vecMIValueResult.end())
- {
- const CMICmnMIValueResult &rTuple(*it);
- miValueList.Add(rTuple);
+ return MIstatus::success;
+ }
- // Next
- ++it;
- }
+ // Build up a list of thread information from tuples
+ VecMIValueResult_t::const_iterator it = m_vecMIValueResult.begin();
+ if (it == m_vecMIValueResult.end()) {
+ // MI print "3^done,stack=[{}]"
+ const CMICmnMIValueTuple miValueTuple;
+ const CMICmnMIValueList miValueList(miValueTuple);
const CMICmnMIValueResult miValueResult("stack", miValueList);
- const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, miValueResult);
+ const CMICmnMIResultRecord miRecordResult(
+ m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
+ miValueResult);
m_miResultRecord = miRecordResult;
-
return MIstatus::success;
+ }
+ CMICmnMIValueList miValueList(*it);
+ ++it;
+ while (it != m_vecMIValueResult.end()) {
+ const CMICmnMIValueResult &rTuple(*it);
+ miValueList.Add(rTuple);
+
+ // Next
+ ++it;
+ }
+ const CMICmnMIValueResult miValueResult("stack", miValueList);
+ const CMICmnMIResultRecord miRecordResult(
+ m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
+ miValueResult);
+ m_miResultRecord = miRecordResult;
+
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
-// Details: Required by the CMICmdFactory when registering *this command. The factory
+//++
+//------------------------------------------------------------------------------------
+// Details: Required by the CMICmdFactory when registering *this command. The
+// factory
// calls this function to create an instance of *this command.
// Type: Static method.
// Args: None.
// Return: CMICmdBase * - Pointer to a new command.
// Throws: None.
//--
-CMICmdBase *
-CMICmdCmdStackListFrames::CreateSelf()
-{
- return new CMICmdCmdStackListFrames();
+CMICmdBase *CMICmdCmdStackListFrames::CreateSelf() {
+ return new CMICmdCmdStackListFrames();
}
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdStackListArguments constructor.
// Type: Method.
// Args: None.
@@ -440,32 +463,30 @@ CMICmdCmdStackListFrames::CreateSelf()
// Throws: None.
//--
CMICmdCmdStackListArguments::CMICmdCmdStackListArguments()
- : m_bThreadInvalid(false)
- , m_miValueList(true)
- , m_constStrArgPrintValues("print-values")
- , m_constStrArgFrameLow("low-frame")
- , m_constStrArgFrameHigh("high-frame")
-{
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "stack-list-arguments";
+ : m_bThreadInvalid(false), m_miValueList(true),
+ m_constStrArgPrintValues("print-values"),
+ m_constStrArgFrameLow("low-frame"), m_constStrArgFrameHigh("high-frame") {
+ // Command factory matches this name with that received from the stdin stream
+ m_strMiCmd = "stack-list-arguments";
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdStackListArguments::CreateSelf;
+ // Required by the CMICmdFactory when registering *this command
+ m_pSelfCreatorFn = &CMICmdCmdStackListArguments::CreateSelf;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdStackListArguments destructor.
// Type: Overrideable.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmdCmdStackListArguments::~CMICmdCmdStackListArguments()
-{
-}
+CMICmdCmdStackListArguments::~CMICmdCmdStackListArguments() {}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The parses the command line options
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The parses the command line
+// options
// arguments to extract values for each of those arguments.
// Type: Overridden.
// Args: None.
@@ -473,103 +494,112 @@ CMICmdCmdStackListArguments::~CMICmdCmdS
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdStackListArguments::ParseArgs()
-{
- m_setCmdArgs.Add(new CMICmdArgValPrintValues(m_constStrArgPrintValues, true, true));
- m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgFrameLow, false, true));
- m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgFrameHigh, false, true));
- return ParseValidateCmdOptions();
+bool CMICmdCmdStackListArguments::ParseArgs() {
+ m_setCmdArgs.Add(
+ new CMICmdArgValPrintValues(m_constStrArgPrintValues, true, true));
+ m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgFrameLow, false, true));
+ m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgFrameHigh, false, true));
+ return ParseValidateCmdOptions();
}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command does work in this function.
-// The command is likely to communicate with the LLDB SBDebugger in here.
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command does work in this
+// function.
+// The command is likely to communicate with the LLDB SBDebugger in
+// here.
// Type: Overridden.
// Args: None.
// Return: MIstatus::success - Functional succeeded.
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdStackListArguments::Execute()
-{
- CMICMDBASE_GETOPTION(pArgThread, OptionLong, m_constStrArgThread);
- CMICMDBASE_GETOPTION(pArgPrintValues, PrintValues, m_constStrArgPrintValues);
- CMICMDBASE_GETOPTION(pArgFrameLow, Number, m_constStrArgFrameLow);
- CMICMDBASE_GETOPTION(pArgFrameHigh, Number, m_constStrArgFrameHigh);
-
- // Retrieve the --thread option's thread ID (only 1)
- MIuint64 nThreadId = UINT64_MAX;
- if (pArgThread->GetFound())
- {
- if (!pArgThread->GetExpectedOption<CMICmdArgValNumber, MIuint64>(nThreadId))
- {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_OPTION_NOT_FOUND), m_cmdData.strMiCmd.c_str(), m_constStrArgThread.c_str()));
- return MIstatus::failure;
- }
- }
-
- const CMICmnLLDBDebugSessionInfo::VariableInfoFormat_e eVarInfoFormat = static_cast<CMICmnLLDBDebugSessionInfo::VariableInfoFormat_e>(pArgPrintValues->GetValue());
-
- MIuint nFrameLow = 0;
- MIuint nFrameHigh = UINT32_MAX;
- if (pArgFrameLow->GetFound() && pArgFrameHigh->GetFound())
- {
- nFrameLow = pArgFrameLow->GetValue();
- nFrameHigh = pArgFrameHigh->GetValue() + 1;
- }
- else if (pArgFrameLow->GetFound() || pArgFrameHigh->GetFound())
- {
- // Only low-frame or high-frame was specified but both are required
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_THREAD_FRAME_RANGE_INVALID), m_cmdData.strMiCmd.c_str()));
- return MIstatus::failure;
- }
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(CMICmnLLDBDebugSessionInfo::Instance());
- lldb::SBProcess sbProcess = rSessionInfo.GetProcess();
- lldb::SBThread thread = (nThreadId != UINT64_MAX) ? sbProcess.GetThreadByIndexID(nThreadId) : sbProcess.GetSelectedThread();
- m_bThreadInvalid = !thread.IsValid();
- if (m_bThreadInvalid)
- return MIstatus::success;
-
- const lldb::StopReason eStopReason = thread.GetStopReason();
- if ((eStopReason == lldb::eStopReasonNone) || (eStopReason == lldb::eStopReasonInvalid))
- {
- m_bThreadInvalid = true;
- return MIstatus::success;
- }
-
- const MIuint nFrames = thread.GetNumFrames();
- if (nFrameLow >= nFrames)
- {
- // The low-frame is larger than the actual number of frames
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_THREAD_FRAME_RANGE_INVALID), m_cmdData.strMiCmd.c_str()));
- return MIstatus::failure;
- }
-
- nFrameHigh = std::min(nFrameHigh, nFrames);
- for (MIuint i = nFrameLow; i < nFrameHigh; i++)
- {
- lldb::SBFrame frame = thread.GetFrameAtIndex(i);
- CMICmnMIValueList miValueList(true);
- const MIuint maskVarTypes = CMICmnLLDBDebugSessionInfo::eVariableType_Arguments;
- if (!rSessionInfo.MIResponseFormVariableInfo(frame, maskVarTypes, eVarInfoFormat, miValueList))
- return MIstatus::failure;
- const CMICmnMIValueConst miValueConst(CMIUtilString::Format("%d", i));
- const CMICmnMIValueResult miValueResult("level", miValueConst);
- CMICmnMIValueTuple miValueTuple(miValueResult);
- const CMICmnMIValueResult miValueResult2("args", miValueList);
- miValueTuple.Add(miValueResult2);
- const CMICmnMIValueResult miValueResult3("frame", miValueTuple);
- m_miValueList.Add(miValueResult3);
- }
+bool CMICmdCmdStackListArguments::Execute() {
+ CMICMDBASE_GETOPTION(pArgThread, OptionLong, m_constStrArgThread);
+ CMICMDBASE_GETOPTION(pArgPrintValues, PrintValues, m_constStrArgPrintValues);
+ CMICMDBASE_GETOPTION(pArgFrameLow, Number, m_constStrArgFrameLow);
+ CMICMDBASE_GETOPTION(pArgFrameHigh, Number, m_constStrArgFrameHigh);
+
+ // Retrieve the --thread option's thread ID (only 1)
+ MIuint64 nThreadId = UINT64_MAX;
+ if (pArgThread->GetFound()) {
+ if (!pArgThread->GetExpectedOption<CMICmdArgValNumber, MIuint64>(
+ nThreadId)) {
+ SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_OPTION_NOT_FOUND),
+ m_cmdData.strMiCmd.c_str(),
+ m_constStrArgThread.c_str()));
+ return MIstatus::failure;
+ }
+ }
+
+ const CMICmnLLDBDebugSessionInfo::VariableInfoFormat_e eVarInfoFormat =
+ static_cast<CMICmnLLDBDebugSessionInfo::VariableInfoFormat_e>(
+ pArgPrintValues->GetValue());
+
+ MIuint nFrameLow = 0;
+ MIuint nFrameHigh = UINT32_MAX;
+ if (pArgFrameLow->GetFound() && pArgFrameHigh->GetFound()) {
+ nFrameLow = pArgFrameLow->GetValue();
+ nFrameHigh = pArgFrameHigh->GetValue() + 1;
+ } else if (pArgFrameLow->GetFound() || pArgFrameHigh->GetFound()) {
+ // Only low-frame or high-frame was specified but both are required
+ SetError(
+ CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_THREAD_FRAME_RANGE_INVALID),
+ m_cmdData.strMiCmd.c_str()));
+ return MIstatus::failure;
+ }
+
+ CMICmnLLDBDebugSessionInfo &rSessionInfo(
+ CMICmnLLDBDebugSessionInfo::Instance());
+ lldb::SBProcess sbProcess = rSessionInfo.GetProcess();
+ lldb::SBThread thread = (nThreadId != UINT64_MAX)
+ ? sbProcess.GetThreadByIndexID(nThreadId)
+ : sbProcess.GetSelectedThread();
+ m_bThreadInvalid = !thread.IsValid();
+ if (m_bThreadInvalid)
+ return MIstatus::success;
+ const lldb::StopReason eStopReason = thread.GetStopReason();
+ if ((eStopReason == lldb::eStopReasonNone) ||
+ (eStopReason == lldb::eStopReasonInvalid)) {
+ m_bThreadInvalid = true;
return MIstatus::success;
-}
+ }
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command prepares a MI Record Result
+ const MIuint nFrames = thread.GetNumFrames();
+ if (nFrameLow >= nFrames) {
+ // The low-frame is larger than the actual number of frames
+ SetError(
+ CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_THREAD_FRAME_RANGE_INVALID),
+ m_cmdData.strMiCmd.c_str()));
+ return MIstatus::failure;
+ }
+
+ nFrameHigh = std::min(nFrameHigh, nFrames);
+ for (MIuint i = nFrameLow; i < nFrameHigh; i++) {
+ lldb::SBFrame frame = thread.GetFrameAtIndex(i);
+ CMICmnMIValueList miValueList(true);
+ const MIuint maskVarTypes =
+ CMICmnLLDBDebugSessionInfo::eVariableType_Arguments;
+ if (!rSessionInfo.MIResponseFormVariableInfo(frame, maskVarTypes,
+ eVarInfoFormat, miValueList))
+ return MIstatus::failure;
+ const CMICmnMIValueConst miValueConst(CMIUtilString::Format("%d", i));
+ const CMICmnMIValueResult miValueResult("level", miValueConst);
+ CMICmnMIValueTuple miValueTuple(miValueResult);
+ const CMICmnMIValueResult miValueResult2("args", miValueList);
+ miValueTuple.Add(miValueResult2);
+ const CMICmnMIValueResult miValueResult3("frame", miValueTuple);
+ m_miValueList.Add(miValueResult3);
+ }
+
+ return MIstatus::success;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command prepares a MI Record
+// Result
// for the work carried out in the Execute().
// Type: Overridden.
// Args: None.
@@ -577,46 +607,49 @@ CMICmdCmdStackListArguments::Execute()
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdStackListArguments::Acknowledge()
-{
- if (m_bThreadInvalid)
- {
- // MI print "%s^done,stack-args=[]"
- const CMICmnMIValueList miValueList(true);
- const CMICmnMIValueResult miValueResult("stack-args", miValueList);
- const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, miValueResult);
- m_miResultRecord = miRecordResult;
- return MIstatus::success;
- }
-
- // MI print "%s^done,stack-args=[frame={level=\"0\",args=[%s]},frame={level=\"1\",args=[%s]}]"
- const CMICmnMIValueResult miValueResult4("stack-args", m_miValueList);
- const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, miValueResult4);
+bool CMICmdCmdStackListArguments::Acknowledge() {
+ if (m_bThreadInvalid) {
+ // MI print "%s^done,stack-args=[]"
+ const CMICmnMIValueList miValueList(true);
+ const CMICmnMIValueResult miValueResult("stack-args", miValueList);
+ const CMICmnMIResultRecord miRecordResult(
+ m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
+ miValueResult);
m_miResultRecord = miRecordResult;
-
return MIstatus::success;
-}
+ }
-//++ ------------------------------------------------------------------------------------
-// Details: Required by the CMICmdFactory when registering *this command. The factory
+ // MI print
+ // "%s^done,stack-args=[frame={level=\"0\",args=[%s]},frame={level=\"1\",args=[%s]}]"
+ const CMICmnMIValueResult miValueResult4("stack-args", m_miValueList);
+ const CMICmnMIResultRecord miRecordResult(
+ m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
+ miValueResult4);
+ m_miResultRecord = miRecordResult;
+
+ return MIstatus::success;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: Required by the CMICmdFactory when registering *this command. The
+// factory
// calls this function to create an instance of *this command.
// Type: Static method.
// Args: None.
// Return: CMICmdBase * - Pointer to a new command.
// Throws: None.
//--
-CMICmdBase *
-CMICmdCmdStackListArguments::CreateSelf()
-{
- return new CMICmdCmdStackListArguments();
+CMICmdBase *CMICmdCmdStackListArguments::CreateSelf() {
+ return new CMICmdCmdStackListArguments();
}
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdStackListLocals constructor.
// Type: Method.
// Args: None.
@@ -624,30 +657,29 @@ CMICmdCmdStackListArguments::CreateSelf(
// Throws: None.
//--
CMICmdCmdStackListLocals::CMICmdCmdStackListLocals()
- : m_bThreadInvalid(false)
- , m_miValueList(true)
- , m_constStrArgPrintValues("print-values")
-{
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "stack-list-locals";
+ : m_bThreadInvalid(false), m_miValueList(true),
+ m_constStrArgPrintValues("print-values") {
+ // Command factory matches this name with that received from the stdin stream
+ m_strMiCmd = "stack-list-locals";
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdStackListLocals::CreateSelf;
+ // Required by the CMICmdFactory when registering *this command
+ m_pSelfCreatorFn = &CMICmdCmdStackListLocals::CreateSelf;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdStackListLocals destructor.
// Type: Overrideable.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmdCmdStackListLocals::~CMICmdCmdStackListLocals()
-{
-}
+CMICmdCmdStackListLocals::~CMICmdCmdStackListLocals() {}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The parses the command line options
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The parses the command line
+// options
// arguments to extract values for each of those arguments.
// Type: Overridden.
// Args: None.
@@ -655,80 +687,90 @@ CMICmdCmdStackListLocals::~CMICmdCmdStac
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdStackListLocals::ParseArgs()
-{
- m_setCmdArgs.Add(new CMICmdArgValPrintValues(m_constStrArgPrintValues, true, true));
- return ParseValidateCmdOptions();
+bool CMICmdCmdStackListLocals::ParseArgs() {
+ m_setCmdArgs.Add(
+ new CMICmdArgValPrintValues(m_constStrArgPrintValues, true, true));
+ return ParseValidateCmdOptions();
}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command does work in this function.
-// The command is likely to communicate with the LLDB SBDebugger in here.
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command does work in this
+// function.
+// The command is likely to communicate with the LLDB SBDebugger in
+// here.
// Type: Overridden.
// Args: None.
// Return: MIstatus::success - Functional succeeded.
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdStackListLocals::Execute()
-{
- CMICMDBASE_GETOPTION(pArgThread, OptionLong, m_constStrArgThread);
- CMICMDBASE_GETOPTION(pArgFrame, OptionLong, m_constStrArgFrame);
- CMICMDBASE_GETOPTION(pArgPrintValues, PrintValues, m_constStrArgPrintValues);
-
- // Retrieve the --thread option's thread ID (only 1)
- MIuint64 nThreadId = UINT64_MAX;
- if (pArgThread->GetFound())
- {
- if (!pArgThread->GetExpectedOption<CMICmdArgValNumber, MIuint64>(nThreadId))
- {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_OPTION_NOT_FOUND), m_cmdData.strMiCmd.c_str(), m_constStrArgThread.c_str()));
- return MIstatus::failure;
- }
- }
-
- MIuint64 nFrame = UINT64_MAX;
- if (pArgFrame->GetFound())
- {
- if (!pArgFrame->GetExpectedOption<CMICmdArgValNumber, MIuint64>(nFrame))
- {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_OPTION_NOT_FOUND), m_cmdData.strMiCmd.c_str(), m_constStrArgFrame.c_str()));
- return MIstatus::failure;
- }
- }
-
- const CMICmnLLDBDebugSessionInfo::VariableInfoFormat_e eVarInfoFormat = static_cast<CMICmnLLDBDebugSessionInfo::VariableInfoFormat_e>(pArgPrintValues->GetValue());
+bool CMICmdCmdStackListLocals::Execute() {
+ CMICMDBASE_GETOPTION(pArgThread, OptionLong, m_constStrArgThread);
+ CMICMDBASE_GETOPTION(pArgFrame, OptionLong, m_constStrArgFrame);
+ CMICMDBASE_GETOPTION(pArgPrintValues, PrintValues, m_constStrArgPrintValues);
+
+ // Retrieve the --thread option's thread ID (only 1)
+ MIuint64 nThreadId = UINT64_MAX;
+ if (pArgThread->GetFound()) {
+ if (!pArgThread->GetExpectedOption<CMICmdArgValNumber, MIuint64>(
+ nThreadId)) {
+ SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_OPTION_NOT_FOUND),
+ m_cmdData.strMiCmd.c_str(),
+ m_constStrArgThread.c_str()));
+ return MIstatus::failure;
+ }
+ }
+
+ MIuint64 nFrame = UINT64_MAX;
+ if (pArgFrame->GetFound()) {
+ if (!pArgFrame->GetExpectedOption<CMICmdArgValNumber, MIuint64>(nFrame)) {
+ SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_OPTION_NOT_FOUND),
+ m_cmdData.strMiCmd.c_str(),
+ m_constStrArgFrame.c_str()));
+ return MIstatus::failure;
+ }
+ }
+
+ const CMICmnLLDBDebugSessionInfo::VariableInfoFormat_e eVarInfoFormat =
+ static_cast<CMICmnLLDBDebugSessionInfo::VariableInfoFormat_e>(
+ pArgPrintValues->GetValue());
+
+ CMICmnLLDBDebugSessionInfo &rSessionInfo(
+ CMICmnLLDBDebugSessionInfo::Instance());
+ lldb::SBProcess sbProcess = rSessionInfo.GetProcess();
+ lldb::SBThread thread = (nThreadId != UINT64_MAX)
+ ? sbProcess.GetThreadByIndexID(nThreadId)
+ : sbProcess.GetSelectedThread();
+ m_bThreadInvalid = !thread.IsValid();
+ if (m_bThreadInvalid)
+ return MIstatus::success;
- CMICmnLLDBDebugSessionInfo &rSessionInfo(CMICmnLLDBDebugSessionInfo::Instance());
- lldb::SBProcess sbProcess = rSessionInfo.GetProcess();
- lldb::SBThread thread = (nThreadId != UINT64_MAX) ? sbProcess.GetThreadByIndexID(nThreadId) : sbProcess.GetSelectedThread();
- m_bThreadInvalid = !thread.IsValid();
- if (m_bThreadInvalid)
- return MIstatus::success;
-
- const lldb::StopReason eStopReason = thread.GetStopReason();
- if ((eStopReason == lldb::eStopReasonNone) || (eStopReason == lldb::eStopReasonInvalid))
- {
- m_bThreadInvalid = true;
- return MIstatus::success;
- }
+ const lldb::StopReason eStopReason = thread.GetStopReason();
+ if ((eStopReason == lldb::eStopReasonNone) ||
+ (eStopReason == lldb::eStopReasonInvalid)) {
+ m_bThreadInvalid = true;
+ return MIstatus::success;
+ }
- lldb::SBFrame frame = (nFrame != UINT64_MAX) ? thread.GetFrameAtIndex(nFrame) : thread.GetSelectedFrame();
+ lldb::SBFrame frame = (nFrame != UINT64_MAX) ? thread.GetFrameAtIndex(nFrame)
+ : thread.GetSelectedFrame();
- CMICmnMIValueList miValueList(true);
- const MIuint maskVarTypes = CMICmnLLDBDebugSessionInfo::eVariableType_Locals;
- if (!rSessionInfo.MIResponseFormVariableInfo(frame, maskVarTypes, eVarInfoFormat, miValueList))
- return MIstatus::failure;
+ CMICmnMIValueList miValueList(true);
+ const MIuint maskVarTypes = CMICmnLLDBDebugSessionInfo::eVariableType_Locals;
+ if (!rSessionInfo.MIResponseFormVariableInfo(frame, maskVarTypes,
+ eVarInfoFormat, miValueList))
+ return MIstatus::failure;
- m_miValueList = miValueList;
+ m_miValueList = miValueList;
- return MIstatus::success;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command prepares a MI Record Result
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command prepares a MI Record
+// Result
// for the work carried out in the Execute().
// Type: Overridden.
// Args: None.
@@ -736,46 +778,48 @@ CMICmdCmdStackListLocals::Execute()
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdStackListLocals::Acknowledge()
-{
- if (m_bThreadInvalid)
- {
- // MI print "%s^done,locals=[]"
- const CMICmnMIValueList miValueList(true);
- const CMICmnMIValueResult miValueResult("locals", miValueList);
- const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, miValueResult);
- m_miResultRecord = miRecordResult;
- return MIstatus::success;
- }
-
- // MI print "%s^done,locals=[%s]"
- const CMICmnMIValueResult miValueResult("locals", m_miValueList);
- const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, miValueResult);
+bool CMICmdCmdStackListLocals::Acknowledge() {
+ if (m_bThreadInvalid) {
+ // MI print "%s^done,locals=[]"
+ const CMICmnMIValueList miValueList(true);
+ const CMICmnMIValueResult miValueResult("locals", miValueList);
+ const CMICmnMIResultRecord miRecordResult(
+ m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
+ miValueResult);
m_miResultRecord = miRecordResult;
-
return MIstatus::success;
-}
+ }
-//++ ------------------------------------------------------------------------------------
-// Details: Required by the CMICmdFactory when registering *this command. The factory
+ // MI print "%s^done,locals=[%s]"
+ const CMICmnMIValueResult miValueResult("locals", m_miValueList);
+ const CMICmnMIResultRecord miRecordResult(
+ m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
+ miValueResult);
+ m_miResultRecord = miRecordResult;
+
+ return MIstatus::success;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: Required by the CMICmdFactory when registering *this command. The
+// factory
// calls this function to create an instance of *this command.
// Type: Static method.
// Args: None.
// Return: CMICmdBase * - Pointer to a new command.
// Throws: None.
//--
-CMICmdBase *
-CMICmdCmdStackListLocals::CreateSelf()
-{
- return new CMICmdCmdStackListLocals();
+CMICmdBase *CMICmdCmdStackListLocals::CreateSelf() {
+ return new CMICmdCmdStackListLocals();
}
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdStackListVariables constructor.
// Type: Method.
// Args: None.
@@ -783,30 +827,29 @@ CMICmdCmdStackListLocals::CreateSelf()
// Throws: None.
//--
CMICmdCmdStackListVariables::CMICmdCmdStackListVariables()
- : m_bThreadInvalid(false)
- , m_miValueList(true)
- , m_constStrArgPrintValues("print-values")
-{
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "stack-list-variables";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdStackListVariables::CreateSelf;
+ : m_bThreadInvalid(false), m_miValueList(true),
+ m_constStrArgPrintValues("print-values") {
+ // Command factory matches this name with that received from the stdin stream
+ m_strMiCmd = "stack-list-variables";
+
+ // Required by the CMICmdFactory when registering *this command
+ m_pSelfCreatorFn = &CMICmdCmdStackListVariables::CreateSelf;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdStackListVariables destructor.
// Type: Overrideable.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmdCmdStackListVariables::~CMICmdCmdStackListVariables()
-{
-}
+CMICmdCmdStackListVariables::~CMICmdCmdStackListVariables() {}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The parses the command line options
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The parses the command line
+// options
// arguments to extract values for each of those arguments.
// Type: Overridden.
// Args: None.
@@ -814,79 +857,91 @@ CMICmdCmdStackListVariables::~CMICmdCmdS
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdStackListVariables::ParseArgs()
-{
- m_setCmdArgs.Add(new CMICmdArgValPrintValues(m_constStrArgPrintValues, true, true));
- return ParseValidateCmdOptions();
+bool CMICmdCmdStackListVariables::ParseArgs() {
+ m_setCmdArgs.Add(
+ new CMICmdArgValPrintValues(m_constStrArgPrintValues, true, true));
+ return ParseValidateCmdOptions();
}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command does work in this function.
-// The command is likely to communicate with the LLDB SBDebugger in here.
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command does work in this
+// function.
+// The command is likely to communicate with the LLDB SBDebugger in
+// here.
// Type: Overridden.
// Args: None.
// Return: MIstatus::success - Functional succeeded.
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdStackListVariables::Execute()
-{
- CMICMDBASE_GETOPTION(pArgThread, OptionLong, m_constStrArgThread);
- CMICMDBASE_GETOPTION(pArgFrame, OptionLong, m_constStrArgFrame);
- CMICMDBASE_GETOPTION(pArgPrintValues, PrintValues, m_constStrArgPrintValues);
-
- // Retrieve the --thread option's thread ID (only 1)
- MIuint64 nThreadId = UINT64_MAX;
- if (pArgThread->GetFound())
- {
- if (!pArgThread->GetExpectedOption<CMICmdArgValNumber, MIuint64>(nThreadId))
- {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_OPTION_NOT_FOUND), m_cmdData.strMiCmd.c_str(), m_constStrArgThread.c_str()));
- return MIstatus::failure;
- }
- }
-
- MIuint64 nFrame = UINT64_MAX;
- if (pArgFrame->GetFound())
- {
- if (!pArgFrame->GetExpectedOption<CMICmdArgValNumber, MIuint64>(nFrame))
- {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_OPTION_NOT_FOUND), m_cmdData.strMiCmd.c_str(), m_constStrArgFrame.c_str()));
- return MIstatus::failure;
- }
- }
-
- const CMICmnLLDBDebugSessionInfo::VariableInfoFormat_e eVarInfoFormat = static_cast<CMICmnLLDBDebugSessionInfo::VariableInfoFormat_e>(pArgPrintValues->GetValue());
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(CMICmnLLDBDebugSessionInfo::Instance());
- lldb::SBProcess sbProcess = rSessionInfo.GetProcess();
- lldb::SBThread thread = (nThreadId != UINT64_MAX) ? sbProcess.GetThreadByIndexID(nThreadId) : sbProcess.GetSelectedThread();
- m_bThreadInvalid = !thread.IsValid();
- if (m_bThreadInvalid)
- return MIstatus::success;
-
- const lldb::StopReason eStopReason = thread.GetStopReason();
- if ((eStopReason == lldb::eStopReasonNone) || (eStopReason == lldb::eStopReasonInvalid))
- {
- m_bThreadInvalid = true;
- return MIstatus::success;
- }
-
- lldb::SBFrame frame = (nFrame != UINT64_MAX) ? thread.GetFrameAtIndex(nFrame) : thread.GetSelectedFrame();
-
- CMICmnMIValueList miValueList(true);
- const MIuint maskVarTypes = CMICmnLLDBDebugSessionInfo::eVariableType_Arguments | CMICmnLLDBDebugSessionInfo::eVariableType_Locals;
- if (!rSessionInfo.MIResponseFormVariableInfo(frame, maskVarTypes, eVarInfoFormat, miValueList, 10, true))
- return MIstatus::failure;
- m_miValueList = miValueList;
-
+bool CMICmdCmdStackListVariables::Execute() {
+ CMICMDBASE_GETOPTION(pArgThread, OptionLong, m_constStrArgThread);
+ CMICMDBASE_GETOPTION(pArgFrame, OptionLong, m_constStrArgFrame);
+ CMICMDBASE_GETOPTION(pArgPrintValues, PrintValues, m_constStrArgPrintValues);
+
+ // Retrieve the --thread option's thread ID (only 1)
+ MIuint64 nThreadId = UINT64_MAX;
+ if (pArgThread->GetFound()) {
+ if (!pArgThread->GetExpectedOption<CMICmdArgValNumber, MIuint64>(
+ nThreadId)) {
+ SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_OPTION_NOT_FOUND),
+ m_cmdData.strMiCmd.c_str(),
+ m_constStrArgThread.c_str()));
+ return MIstatus::failure;
+ }
+ }
+
+ MIuint64 nFrame = UINT64_MAX;
+ if (pArgFrame->GetFound()) {
+ if (!pArgFrame->GetExpectedOption<CMICmdArgValNumber, MIuint64>(nFrame)) {
+ SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_OPTION_NOT_FOUND),
+ m_cmdData.strMiCmd.c_str(),
+ m_constStrArgFrame.c_str()));
+ return MIstatus::failure;
+ }
+ }
+
+ const CMICmnLLDBDebugSessionInfo::VariableInfoFormat_e eVarInfoFormat =
+ static_cast<CMICmnLLDBDebugSessionInfo::VariableInfoFormat_e>(
+ pArgPrintValues->GetValue());
+
+ CMICmnLLDBDebugSessionInfo &rSessionInfo(
+ CMICmnLLDBDebugSessionInfo::Instance());
+ lldb::SBProcess sbProcess = rSessionInfo.GetProcess();
+ lldb::SBThread thread = (nThreadId != UINT64_MAX)
+ ? sbProcess.GetThreadByIndexID(nThreadId)
+ : sbProcess.GetSelectedThread();
+ m_bThreadInvalid = !thread.IsValid();
+ if (m_bThreadInvalid)
return MIstatus::success;
-}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command prepares a MI Record Result
+ const lldb::StopReason eStopReason = thread.GetStopReason();
+ if ((eStopReason == lldb::eStopReasonNone) ||
+ (eStopReason == lldb::eStopReasonInvalid)) {
+ m_bThreadInvalid = true;
+ return MIstatus::success;
+ }
+
+ lldb::SBFrame frame = (nFrame != UINT64_MAX) ? thread.GetFrameAtIndex(nFrame)
+ : thread.GetSelectedFrame();
+
+ CMICmnMIValueList miValueList(true);
+ const MIuint maskVarTypes =
+ CMICmnLLDBDebugSessionInfo::eVariableType_Arguments |
+ CMICmnLLDBDebugSessionInfo::eVariableType_Locals;
+ if (!rSessionInfo.MIResponseFormVariableInfo(
+ frame, maskVarTypes, eVarInfoFormat, miValueList, 10, true))
+ return MIstatus::failure;
+ m_miValueList = miValueList;
+
+ return MIstatus::success;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command prepares a MI Record
+// Result
// for the work carried out in the Execute().
// Type: Overridden.
// Args: None.
@@ -894,46 +949,48 @@ CMICmdCmdStackListVariables::Execute()
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdStackListVariables::Acknowledge()
-{
- if (m_bThreadInvalid)
- {
- // MI print "%s^done,variables=[]"
- const CMICmnMIValueList miValueList(true);
- const CMICmnMIValueResult miValueResult("variables", miValueList);
- const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, miValueResult);
- m_miResultRecord = miRecordResult;
- return MIstatus::success;
- }
-
- // MI print "%s^done,variables=[%s]"
- const CMICmnMIValueResult miValueResult("variables", m_miValueList);
- const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, miValueResult);
+bool CMICmdCmdStackListVariables::Acknowledge() {
+ if (m_bThreadInvalid) {
+ // MI print "%s^done,variables=[]"
+ const CMICmnMIValueList miValueList(true);
+ const CMICmnMIValueResult miValueResult("variables", miValueList);
+ const CMICmnMIResultRecord miRecordResult(
+ m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
+ miValueResult);
m_miResultRecord = miRecordResult;
-
return MIstatus::success;
-}
+ }
-//++ ------------------------------------------------------------------------------------
-// Details: Required by the CMICmdFactory when registering *this command. The factory
+ // MI print "%s^done,variables=[%s]"
+ const CMICmnMIValueResult miValueResult("variables", m_miValueList);
+ const CMICmnMIResultRecord miRecordResult(
+ m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
+ miValueResult);
+ m_miResultRecord = miRecordResult;
+
+ return MIstatus::success;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: Required by the CMICmdFactory when registering *this command. The
+// factory
// calls this function to create an instance of *this command.
// Type: Static method.
// Args: None.
// Return: CMICmdBase * - Pointer to a new command.
// Throws: None.
//--
-CMICmdBase *
-CMICmdCmdStackListVariables::CreateSelf()
-{
- return new CMICmdCmdStackListVariables();
+CMICmdBase *CMICmdCmdStackListVariables::CreateSelf() {
+ return new CMICmdCmdStackListVariables();
}
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdStackSelectFrame constructor.
// Type: Method.
// Args: None.
@@ -941,29 +998,28 @@ CMICmdCmdStackListVariables::CreateSelf(
// Throws: None.
//--
CMICmdCmdStackSelectFrame::CMICmdCmdStackSelectFrame()
- : m_bFrameInvalid(false)
- , m_constStrArgFrameId("frame_id")
-{
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "stack-select-frame";
+ : m_bFrameInvalid(false), m_constStrArgFrameId("frame_id") {
+ // Command factory matches this name with that received from the stdin stream
+ m_strMiCmd = "stack-select-frame";
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdStackSelectFrame::CreateSelf;
+ // Required by the CMICmdFactory when registering *this command
+ m_pSelfCreatorFn = &CMICmdCmdStackSelectFrame::CreateSelf;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdStackSelectFrame destructor.
// Type: Overrideable.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmdCmdStackSelectFrame::~CMICmdCmdStackSelectFrame()
-{
-}
+CMICmdCmdStackSelectFrame::~CMICmdCmdStackSelectFrame() {}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The parses the command line options
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The parses the command line
+// options
// arguments to extract values for each of those arguments.
// Type: Overridden.
// Args: None.
@@ -971,43 +1027,45 @@ CMICmdCmdStackSelectFrame::~CMICmdCmdSta
// MIstatus::failure - Function failed.
// Throws: None.
//--
-bool
-CMICmdCmdStackSelectFrame::ParseArgs()
-{
- m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgFrameId, true, false));
- return ParseValidateCmdOptions();
+bool CMICmdCmdStackSelectFrame::ParseArgs() {
+ m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgFrameId, true, false));
+ return ParseValidateCmdOptions();
}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command does work in this function.
-// The command is likely to communicate with the LLDB SBDebugger in here.
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command does work in this
+// function.
+// The command is likely to communicate with the LLDB SBDebugger in
+// here.
// Type: Overridden.
// Args: None.
// Return: MIstatus::success - Function succeeded.
// MIstatus::failure - Function failed.
// Throws: None.
//--
-bool
-CMICmdCmdStackSelectFrame::Execute()
-{
- CMICMDBASE_GETOPTION(pArgFrame, Number, m_constStrArgFrameId);
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(CMICmnLLDBDebugSessionInfo::Instance());
- lldb::SBThread sbThread = rSessionInfo.GetProcess().GetSelectedThread();
-
- const MIuint nFrameId = pArgFrame->GetValue();
- m_bFrameInvalid = (nFrameId >= sbThread.GetNumFrames());
- if (m_bFrameInvalid)
- return MIstatus::success;
-
- lldb::SBFrame sbFrame = sbThread.SetSelectedFrame(nFrameId);
- m_bFrameInvalid = !sbFrame.IsValid();
+bool CMICmdCmdStackSelectFrame::Execute() {
+ CMICMDBASE_GETOPTION(pArgFrame, Number, m_constStrArgFrameId);
+ CMICmnLLDBDebugSessionInfo &rSessionInfo(
+ CMICmnLLDBDebugSessionInfo::Instance());
+ lldb::SBThread sbThread = rSessionInfo.GetProcess().GetSelectedThread();
+
+ const MIuint nFrameId = pArgFrame->GetValue();
+ m_bFrameInvalid = (nFrameId >= sbThread.GetNumFrames());
+ if (m_bFrameInvalid)
return MIstatus::success;
+
+ lldb::SBFrame sbFrame = sbThread.SetSelectedFrame(nFrameId);
+ m_bFrameInvalid = !sbFrame.IsValid();
+
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command prepares a MI Record Result
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command prepares a MI Record
+// Result
// for the work carried out in the Execute().
// Type: Overridden.
// Args: None.
@@ -1015,37 +1073,38 @@ CMICmdCmdStackSelectFrame::Execute()
// MIstatus::failure - Function failed.
// Throws: None.
//--
-bool
-CMICmdCmdStackSelectFrame::Acknowledge()
-{
- if (m_bFrameInvalid)
- {
- // MI print "%s^error,msg=\"Command '-stack-select-frame'. Frame ID invalid\""
- const CMICmnMIValueConst miValueConst(
- CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_FRAME_INVALID), m_cmdData.strMiCmd.c_str()));
- const CMICmnMIValueResult miValueResult("msg", miValueConst);
- const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error, miValueResult);
- m_miResultRecord = miRecordResult;
-
- return MIstatus::success;
- }
-
- const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done);
+bool CMICmdCmdStackSelectFrame::Acknowledge() {
+ if (m_bFrameInvalid) {
+ // MI print "%s^error,msg=\"Command '-stack-select-frame'. Frame ID
+ // invalid\""
+ const CMICmnMIValueConst miValueConst(CMIUtilString::Format(
+ MIRSRC(IDS_CMD_ERR_FRAME_INVALID), m_cmdData.strMiCmd.c_str()));
+ const CMICmnMIValueResult miValueResult("msg", miValueConst);
+ const CMICmnMIResultRecord miRecordResult(
+ m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error,
+ miValueResult);
m_miResultRecord = miRecordResult;
return MIstatus::success;
+ }
+
+ const CMICmnMIResultRecord miRecordResult(
+ m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done);
+ m_miResultRecord = miRecordResult;
+
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
-// Details: Required by the CMICmdFactory when registering *this command. The factory
+//++
+//------------------------------------------------------------------------------------
+// Details: Required by the CMICmdFactory when registering *this command. The
+// factory
// calls this function to create an instance of *this command.
// Type: Static method.
// Args: None.
// Return: CMICmdBase * - Pointer to a new command.
// Throws: None.
//--
-CMICmdBase *
-CMICmdCmdStackSelectFrame::CreateSelf()
-{
- return new CMICmdCmdStackSelectFrame();
+CMICmdBase *CMICmdCmdStackSelectFrame::CreateSelf() {
+ return new CMICmdCmdStackSelectFrame();
}
Modified: lldb/trunk/tools/lldb-mi/MICmdCmdStack.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdStack.h?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdStack.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdStack.h Tue Sep 6 15:57:50 2016
@@ -14,13 +14,16 @@
// CMICmdCmdStackListLocals interface.
// CMICmdCmdStackSelectFrame interface.
//
-// To implement new MI commands derive a new command class from the command base
-// class. To enable the new command for interpretation add the new command class
+// To implement new MI commands derive a new command class from the
+// command base
+// class. To enable the new command for interpretation add the new
+// command class
// to the command factory. The files of relevance are:
// MICmdCommands.cpp
// MICmdBase.h / .cpp
// MICmdCmd.h / .cpp
-// For an introduction to adding a new command see CMICmdCmdSupportInfoMiCmdQuery
+// For an introduction to adding a new command see
+// CMICmdCmdSupportInfoMiCmdQuery
// command class as an example.
#pragma once
@@ -30,222 +33,225 @@
#include "MICmnMIValueList.h"
#include "MICmnMIValueTuple.h"
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI command class. MI commands derived from the command base class.
// *this class implements MI command "stack-info-depth".
//--
-class CMICmdCmdStackInfoDepth : public CMICmdBase
-{
- // Statics:
- public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
- public:
- /* ctor */ CMICmdCmdStackInfoDepth();
-
- // Overridden:
- public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdStackInfoDepth() override;
-
- // Attributes:
- private:
- MIuint m_nThreadFrames;
- const CMIUtilString m_constStrArgMaxDepth; // Not handled by *this command
+class CMICmdCmdStackInfoDepth : public CMICmdBase {
+ // Statics:
+public:
+ // Required by the CMICmdFactory when registering *this command
+ static CMICmdBase *CreateSelf();
+
+ // Methods:
+public:
+ /* ctor */ CMICmdCmdStackInfoDepth();
+
+ // Overridden:
+public:
+ // From CMICmdInvoker::ICmd
+ bool Execute() override;
+ bool Acknowledge() override;
+ bool ParseArgs() override;
+ // From CMICmnBase
+ /* dtor */ ~CMICmdCmdStackInfoDepth() override;
+
+ // Attributes:
+private:
+ MIuint m_nThreadFrames;
+ const CMIUtilString m_constStrArgMaxDepth; // Not handled by *this command
};
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI command class. MI commands derived from the command base class.
// *this class implements MI command "stack-info-frame".
//--
-class CMICmdCmdStackInfoFrame : public CMICmdBase
-{
- // Statics:
- public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
- public:
- /* ctor */ CMICmdCmdStackInfoFrame();
-
- // Overridden:
- public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdStackInfoFrame() override;
-
- // Attributes:
- private:
- CMICmnMIValueTuple m_miValueTuple;
+class CMICmdCmdStackInfoFrame : public CMICmdBase {
+ // Statics:
+public:
+ // Required by the CMICmdFactory when registering *this command
+ static CMICmdBase *CreateSelf();
+
+ // Methods:
+public:
+ /* ctor */ CMICmdCmdStackInfoFrame();
+
+ // Overridden:
+public:
+ // From CMICmdInvoker::ICmd
+ bool Execute() override;
+ bool Acknowledge() override;
+ bool ParseArgs() override;
+ // From CMICmnBase
+ /* dtor */ ~CMICmdCmdStackInfoFrame() override;
+
+ // Attributes:
+private:
+ CMICmnMIValueTuple m_miValueTuple;
};
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI command class. MI commands derived from the command base class.
// *this class implements MI command "stack-list-frames".
//--
-class CMICmdCmdStackListFrames : public CMICmdBase
-{
- // Statics:
- public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
- public:
- /* ctor */ CMICmdCmdStackListFrames();
-
- // Overridden:
- public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdStackListFrames() override;
-
- // Typedefs:
- private:
- typedef std::vector<CMICmnMIValueResult> VecMIValueResult_t;
-
- // Attributes:
- private:
- MIuint m_nThreadFrames;
- VecMIValueResult_t m_vecMIValueResult;
- const CMIUtilString m_constStrArgFrameLow;
- const CMIUtilString m_constStrArgFrameHigh;
+class CMICmdCmdStackListFrames : public CMICmdBase {
+ // Statics:
+public:
+ // Required by the CMICmdFactory when registering *this command
+ static CMICmdBase *CreateSelf();
+
+ // Methods:
+public:
+ /* ctor */ CMICmdCmdStackListFrames();
+
+ // Overridden:
+public:
+ // From CMICmdInvoker::ICmd
+ bool Execute() override;
+ bool Acknowledge() override;
+ bool ParseArgs() override;
+ // From CMICmnBase
+ /* dtor */ ~CMICmdCmdStackListFrames() override;
+
+ // Typedefs:
+private:
+ typedef std::vector<CMICmnMIValueResult> VecMIValueResult_t;
+
+ // Attributes:
+private:
+ MIuint m_nThreadFrames;
+ VecMIValueResult_t m_vecMIValueResult;
+ const CMIUtilString m_constStrArgFrameLow;
+ const CMIUtilString m_constStrArgFrameHigh;
};
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI command class. MI commands derived from the command base class.
// *this class implements MI command "stack-list-arguments".
//--
-class CMICmdCmdStackListArguments : public CMICmdBase
-{
- // Statics:
- public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
- public:
- /* ctor */ CMICmdCmdStackListArguments();
-
- // Overridden:
- public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdStackListArguments() override;
-
- // Attributes:
- private:
- bool m_bThreadInvalid; // True = yes invalid thread, false = thread object valid
- CMICmnMIValueList m_miValueList;
- const CMIUtilString m_constStrArgPrintValues;
- const CMIUtilString m_constStrArgFrameLow;
- const CMIUtilString m_constStrArgFrameHigh;
+class CMICmdCmdStackListArguments : public CMICmdBase {
+ // Statics:
+public:
+ // Required by the CMICmdFactory when registering *this command
+ static CMICmdBase *CreateSelf();
+
+ // Methods:
+public:
+ /* ctor */ CMICmdCmdStackListArguments();
+
+ // Overridden:
+public:
+ // From CMICmdInvoker::ICmd
+ bool Execute() override;
+ bool Acknowledge() override;
+ bool ParseArgs() override;
+ // From CMICmnBase
+ /* dtor */ ~CMICmdCmdStackListArguments() override;
+
+ // Attributes:
+private:
+ bool m_bThreadInvalid; // True = yes invalid thread, false = thread object
+ // valid
+ CMICmnMIValueList m_miValueList;
+ const CMIUtilString m_constStrArgPrintValues;
+ const CMIUtilString m_constStrArgFrameLow;
+ const CMIUtilString m_constStrArgFrameHigh;
};
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI command class. MI commands derived from the command base class.
// *this class implements MI command "stack-list-locals".
//--
-class CMICmdCmdStackListLocals : public CMICmdBase
-{
- // Statics:
- public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
- public:
- /* ctor */ CMICmdCmdStackListLocals();
-
- // Overridden:
- public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdStackListLocals() override;
-
- // Attributes:
- private:
- bool m_bThreadInvalid; // True = yes invalid thread, false = thread object valid
- CMICmnMIValueList m_miValueList;
- const CMIUtilString m_constStrArgPrintValues;
+class CMICmdCmdStackListLocals : public CMICmdBase {
+ // Statics:
+public:
+ // Required by the CMICmdFactory when registering *this command
+ static CMICmdBase *CreateSelf();
+
+ // Methods:
+public:
+ /* ctor */ CMICmdCmdStackListLocals();
+
+ // Overridden:
+public:
+ // From CMICmdInvoker::ICmd
+ bool Execute() override;
+ bool Acknowledge() override;
+ bool ParseArgs() override;
+ // From CMICmnBase
+ /* dtor */ ~CMICmdCmdStackListLocals() override;
+
+ // Attributes:
+private:
+ bool m_bThreadInvalid; // True = yes invalid thread, false = thread object
+ // valid
+ CMICmnMIValueList m_miValueList;
+ const CMIUtilString m_constStrArgPrintValues;
};
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI command class. MI commands derived from the command base class.
// *this class implements MI command "stack-list-variables".
//--
-class CMICmdCmdStackListVariables : public CMICmdBase
-{
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdStackListVariables();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdStackListVariables() override;
-
- // Attributes
-private:
- bool m_bThreadInvalid; // True = yes invalid thread, false = thread object valid
- CMICmnMIValueList m_miValueList;
- const CMIUtilString m_constStrArgPrintValues;
+class CMICmdCmdStackListVariables : public CMICmdBase {
+ // Statics:
+public:
+ // Required by the CMICmdFactory when registering *this command
+ static CMICmdBase *CreateSelf();
+
+ // Methods:
+public:
+ /* ctor */ CMICmdCmdStackListVariables();
+
+ // Overridden:
+public:
+ // From CMICmdInvoker::ICmd
+ bool Execute() override;
+ bool Acknowledge() override;
+ bool ParseArgs() override;
+ // From CMICmnBase
+ /* dtor */ ~CMICmdCmdStackListVariables() override;
+
+ // Attributes
+private:
+ bool m_bThreadInvalid; // True = yes invalid thread, false = thread object
+ // valid
+ CMICmnMIValueList m_miValueList;
+ const CMIUtilString m_constStrArgPrintValues;
};
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI command class. MI commands derived from the command base class.
// *this class implements MI command "stack-select-frame".
//--
-class CMICmdCmdStackSelectFrame : public CMICmdBase
-{
- // Statics:
- public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
- public:
- /* ctor */ CMICmdCmdStackSelectFrame();
-
- // Overridden:
- public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdStackSelectFrame() override;
-
- // Attributes:
- private:
- bool m_bFrameInvalid; // True = yes invalid frame, false = ok
- const CMIUtilString m_constStrArgFrameId;
+class CMICmdCmdStackSelectFrame : public CMICmdBase {
+ // Statics:
+public:
+ // Required by the CMICmdFactory when registering *this command
+ static CMICmdBase *CreateSelf();
+
+ // Methods:
+public:
+ /* ctor */ CMICmdCmdStackSelectFrame();
+
+ // Overridden:
+public:
+ // From CMICmdInvoker::ICmd
+ bool Execute() override;
+ bool Acknowledge() override;
+ bool ParseArgs() override;
+ // From CMICmnBase
+ /* dtor */ ~CMICmdCmdStackSelectFrame() override;
+
+ // Attributes:
+private:
+ bool m_bFrameInvalid; // True = yes invalid frame, false = ok
+ const CMIUtilString m_constStrArgFrameId;
};
Modified: lldb/trunk/tools/lldb-mi/MICmdCmdSupportInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdSupportInfo.cpp?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdSupportInfo.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdSupportInfo.cpp Tue Sep 6 15:57:50 2016
@@ -11,13 +11,14 @@
// In-house headers:
#include "MICmdCmdSupportInfo.h"
+#include "MICmdArgValString.h"
+#include "MICmdFactory.h"
#include "MICmnMIResultRecord.h"
#include "MICmnMIValueConst.h"
#include "MICmnMIValueTuple.h"
-#include "MICmdArgValString.h"
-#include "MICmdFactory.h"
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdSupportInfoMiCmdQuery constructor.
// Type: Method.
// Args: None.
@@ -25,29 +26,28 @@
// Throws: None.
//--
CMICmdCmdSupportInfoMiCmdQuery::CMICmdCmdSupportInfoMiCmdQuery()
- : m_bCmdFound(false)
- , m_constStrArgCmdName("cmd_name")
-{
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "info-gdb-mi-command";
+ : m_bCmdFound(false), m_constStrArgCmdName("cmd_name") {
+ // Command factory matches this name with that received from the stdin stream
+ m_strMiCmd = "info-gdb-mi-command";
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdSupportInfoMiCmdQuery::CreateSelf;
+ // Required by the CMICmdFactory when registering *this command
+ m_pSelfCreatorFn = &CMICmdCmdSupportInfoMiCmdQuery::CreateSelf;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdSupportInfoMiCmdQuery destructor.
// Type: Overrideable.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmdCmdSupportInfoMiCmdQuery::~CMICmdCmdSupportInfoMiCmdQuery()
-{
-}
+CMICmdCmdSupportInfoMiCmdQuery::~CMICmdCmdSupportInfoMiCmdQuery() {}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The parses the command line options
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The parses the command line
+// options
// arguments to extract values for each of those arguments.
// Type: Overridden.
// Args: None.
@@ -55,39 +55,40 @@ CMICmdCmdSupportInfoMiCmdQuery::~CMICmdC
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdSupportInfoMiCmdQuery::ParseArgs()
-{
- m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgCmdName, true, true));
- return ParseValidateCmdOptions();
+bool CMICmdCmdSupportInfoMiCmdQuery::ParseArgs() {
+ m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgCmdName, true, true));
+ return ParseValidateCmdOptions();
}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command does work in this function.
-// The command is likely to communicate with the LLDB SBDebugger in here.
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command does work in this
+// function.
+// The command is likely to communicate with the LLDB SBDebugger in
+// here.
// Type: Overridden.
// Args: None.
// Return: MIstatus::success - Functional succeeded.
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdSupportInfoMiCmdQuery::Execute()
-{
- CMICMDBASE_GETOPTION(pArgNamedCmdName, String, m_constStrArgCmdName);
- const CMIUtilString &rCmdToQuery(pArgNamedCmdName->GetValue());
- const MIuint nLen = rCmdToQuery.length();
- const CMICmdFactory &rCmdFactory = CMICmdFactory::Instance();
- if ((nLen > 1) && (rCmdToQuery[0] == '-'))
- m_bCmdFound = rCmdFactory.CmdExist(rCmdToQuery.substr(1, nLen - 1).c_str());
- else
- m_bCmdFound = rCmdFactory.CmdExist(rCmdToQuery);
-
- return MIstatus::success;
-}
-
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command prepares a MI Record Result
+bool CMICmdCmdSupportInfoMiCmdQuery::Execute() {
+ CMICMDBASE_GETOPTION(pArgNamedCmdName, String, m_constStrArgCmdName);
+ const CMIUtilString &rCmdToQuery(pArgNamedCmdName->GetValue());
+ const MIuint nLen = rCmdToQuery.length();
+ const CMICmdFactory &rCmdFactory = CMICmdFactory::Instance();
+ if ((nLen > 1) && (rCmdToQuery[0] == '-'))
+ m_bCmdFound = rCmdFactory.CmdExist(rCmdToQuery.substr(1, nLen - 1).c_str());
+ else
+ m_bCmdFound = rCmdFactory.CmdExist(rCmdToQuery);
+
+ return MIstatus::success;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command prepares a MI Record
+// Result
// for the work carried out in the Execute().
// Type: Overridden.
// Args: None.
@@ -95,29 +96,29 @@ CMICmdCmdSupportInfoMiCmdQuery::Execute(
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdSupportInfoMiCmdQuery::Acknowledge()
-{
- const CMICmnMIValueConst miValueConst(m_bCmdFound ? "true" : "false");
- const CMICmnMIValueResult miValueResult("exists", miValueConst);
- const CMICmnMIValueTuple miValueTuple(miValueResult);
- const CMICmnMIValueResult miValueResult2("command", miValueTuple);
- const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, miValueResult2);
- m_miResultRecord = miRecordResult;
-
- return MIstatus::success;
-}
-
-//++ ------------------------------------------------------------------------------------
-// Details: Required by the CMICmdFactory when registering *this command. The factory
+bool CMICmdCmdSupportInfoMiCmdQuery::Acknowledge() {
+ const CMICmnMIValueConst miValueConst(m_bCmdFound ? "true" : "false");
+ const CMICmnMIValueResult miValueResult("exists", miValueConst);
+ const CMICmnMIValueTuple miValueTuple(miValueResult);
+ const CMICmnMIValueResult miValueResult2("command", miValueTuple);
+ const CMICmnMIResultRecord miRecordResult(
+ m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
+ miValueResult2);
+ m_miResultRecord = miRecordResult;
+
+ return MIstatus::success;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: Required by the CMICmdFactory when registering *this command. The
+// factory
// calls this function to create an instance of *this command.
// Type: Static method.
// Args: None.
// Return: CMICmdBase * - Pointer to a new command.
// Throws: None.
//--
-CMICmdBase *
-CMICmdCmdSupportInfoMiCmdQuery::CreateSelf()
-{
- return new CMICmdCmdSupportInfoMiCmdQuery();
+CMICmdBase *CMICmdCmdSupportInfoMiCmdQuery::CreateSelf() {
+ return new CMICmdCmdSupportInfoMiCmdQuery();
}
Modified: lldb/trunk/tools/lldb-mi/MICmdCmdSupportInfo.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdSupportInfo.h?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdSupportInfo.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdSupportInfo.h Tue Sep 6 15:57:50 2016
@@ -9,13 +9,16 @@
// Overview: CMICmdCmdSupportInfoMiCmdQuery interface.
//
-// To implement new MI commands derive a new command class from the command base
-// class. To enable the new command for interpretation add the new command class
+// To implement new MI commands derive a new command class from the
+// command base
+// class. To enable the new command for interpretation add the new
+// command class
// to the command factory. The files of relevance are:
// MICmdCommands.cpp
// MICmdBase.h / .cpp
// MICmdCmd.h / .cpp
-// For an introduction to adding a new command see CMICmdCmdSupportInfoMiCmdQuery
+// For an introduction to adding a new command see
+// CMICmdCmdSupportInfoMiCmdQuery
// command class as an example.
#pragma once
@@ -23,33 +26,34 @@
// In-house headers:
#include "MICmdBase.h"
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI command class. MI commands derived from the command base class.
// *this class implements MI command "info-gdb-mi-command".
// This command does not follow the MI documentation exactly.
//--
-class CMICmdCmdSupportInfoMiCmdQuery : public CMICmdBase
-{
- // Statics:
- public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
- public:
- /* ctor */ CMICmdCmdSupportInfoMiCmdQuery();
-
- // Overridden:
- public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdSupportInfoMiCmdQuery() override;
-
- // Attributes:
- private:
- bool m_bCmdFound; // True = query for the command in command factory found, false = not found not recognised
- const CMIUtilString m_constStrArgCmdName;
+class CMICmdCmdSupportInfoMiCmdQuery : public CMICmdBase {
+ // Statics:
+public:
+ // Required by the CMICmdFactory when registering *this command
+ static CMICmdBase *CreateSelf();
+
+ // Methods:
+public:
+ /* ctor */ CMICmdCmdSupportInfoMiCmdQuery();
+
+ // Overridden:
+public:
+ // From CMICmdInvoker::ICmd
+ bool Execute() override;
+ bool Acknowledge() override;
+ bool ParseArgs() override;
+ // From CMICmnBase
+ /* dtor */ ~CMICmdCmdSupportInfoMiCmdQuery() override;
+
+ // Attributes:
+private:
+ bool m_bCmdFound; // True = query for the command in command factory found,
+ // false = not found not recognised
+ const CMIUtilString m_constStrArgCmdName;
};
Modified: lldb/trunk/tools/lldb-mi/MICmdCmdSupportList.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdSupportList.cpp?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdSupportList.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdSupportList.cpp Tue Sep 6 15:57:50 2016
@@ -15,52 +15,54 @@
#include "MICmnMIValueConst.h"
#include "MICmnMIValueList.h"
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdSupportListFeatures constructor.
// Type: Method.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmdCmdSupportListFeatures::CMICmdCmdSupportListFeatures()
-{
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "list-features";
+CMICmdCmdSupportListFeatures::CMICmdCmdSupportListFeatures() {
+ // Command factory matches this name with that received from the stdin stream
+ m_strMiCmd = "list-features";
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdSupportListFeatures::CreateSelf;
+ // Required by the CMICmdFactory when registering *this command
+ m_pSelfCreatorFn = &CMICmdCmdSupportListFeatures::CreateSelf;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdSupportListFeatures destructor.
// Type: Overrideable.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmdCmdSupportListFeatures::~CMICmdCmdSupportListFeatures()
-{
-}
+CMICmdCmdSupportListFeatures::~CMICmdCmdSupportListFeatures() {}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command does work in this function.
-// The command is likely to communicate with the LLDB SBDebugger in here.
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command does work in this
+// function.
+// The command is likely to communicate with the LLDB SBDebugger in
+// here.
// Type: Overridden.
// Args: None.
// Return: MIstatus::success - Functional succeeded.
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdSupportListFeatures::Execute()
-{
- // Do nothing
+bool CMICmdCmdSupportListFeatures::Execute() {
+ // Do nothing
- return MIstatus::success;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command prepares a MI Record Result
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command prepares a MI Record
+// Result
// for the work carried out in the Execute().
// Type: Overridden.
// Args: None.
@@ -68,33 +70,33 @@ CMICmdCmdSupportListFeatures::Execute()
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdSupportListFeatures::Acknowledge()
-{
- // Declare supported features here
- const CMICmnMIValueConst miValueConst1("data-read-memory-bytes");
- const CMICmnMIValueConst miValueConst2("exec-run-start-option");
- // Some features may depend on host and/or target, decide what to add below
- CMICmnMIValueList miValueList(true);
- miValueList.Add(miValueConst1);
- miValueList.Add(miValueConst2);
- const CMICmnMIValueResult miValueResult("features", miValueList);
- const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, miValueResult);
- m_miResultRecord = miRecordResult;
+bool CMICmdCmdSupportListFeatures::Acknowledge() {
+ // Declare supported features here
+ const CMICmnMIValueConst miValueConst1("data-read-memory-bytes");
+ const CMICmnMIValueConst miValueConst2("exec-run-start-option");
+ // Some features may depend on host and/or target, decide what to add below
+ CMICmnMIValueList miValueList(true);
+ miValueList.Add(miValueConst1);
+ miValueList.Add(miValueConst2);
+ const CMICmnMIValueResult miValueResult("features", miValueList);
+ const CMICmnMIResultRecord miRecordResult(
+ m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
+ miValueResult);
+ m_miResultRecord = miRecordResult;
- return MIstatus::success;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
-// Details: Required by the CMICmdFactory when registering *this command. The factory
+//++
+//------------------------------------------------------------------------------------
+// Details: Required by the CMICmdFactory when registering *this command. The
+// factory
// calls this function to create an instance of *this command.
// Type: Static method.
// Args: None.
// Return: CMICmdBase * - Pointer to a new command.
// Throws: None.
//--
-CMICmdBase *
-CMICmdCmdSupportListFeatures::CreateSelf()
-{
- return new CMICmdCmdSupportListFeatures();
+CMICmdBase *CMICmdCmdSupportListFeatures::CreateSelf() {
+ return new CMICmdCmdSupportListFeatures();
}
Modified: lldb/trunk/tools/lldb-mi/MICmdCmdSupportList.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdSupportList.h?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdSupportList.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdSupportList.h Tue Sep 6 15:57:50 2016
@@ -9,13 +9,16 @@
// Overview: CMICmdCmdSupportListFeatures interface.
//
-// To implement new MI commands derive a new command class from the command base
-// class. To enable the new command for interpretation add the new command class
+// To implement new MI commands derive a new command class from the
+// command base
+// class. To enable the new command for interpretation add the new
+// command class
// to the command factory. The files of relevance are:
// MICmdCommands.cpp
// MICmdBase.h / .cpp
// MICmdCmd.h / .cpp
-// For an introduction to adding a new command see CMICmdCmdSupportInfoMiCmdQuery
+// For an introduction to adding a new command see
+// CMICmdCmdSupportInfoMiCmdQuery
// command class as an example.
#pragma once
@@ -23,27 +26,27 @@
// In-house headers:
#include "MICmdBase.h"
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI command class. MI commands derived from the command base class.
// *this class implements MI command "list-features".
// This command does not follow the MI documentation exactly.
//--
-class CMICmdCmdSupportListFeatures : public CMICmdBase
-{
- // Statics:
- public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
- public:
- /* ctor */ CMICmdCmdSupportListFeatures();
-
- // Overridden:
- public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdSupportListFeatures() override;
+class CMICmdCmdSupportListFeatures : public CMICmdBase {
+ // Statics:
+public:
+ // Required by the CMICmdFactory when registering *this command
+ static CMICmdBase *CreateSelf();
+
+ // Methods:
+public:
+ /* ctor */ CMICmdCmdSupportListFeatures();
+
+ // Overridden:
+public:
+ // From CMICmdInvoker::ICmd
+ bool Execute() override;
+ bool Acknowledge() override;
+ // From CMICmnBase
+ /* dtor */ ~CMICmdCmdSupportListFeatures() override;
};
Modified: lldb/trunk/tools/lldb-mi/MICmdCmdSymbol.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdSymbol.cpp?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdSymbol.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdSymbol.cpp Tue Sep 6 15:57:50 2016
@@ -23,7 +23,8 @@
#include "MICmnMIValueList.h"
#include "MICmnMIValueTuple.h"
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdSymbolListLines constructor.
// Type: Method.
// Args: None.
@@ -31,28 +32,28 @@
// Throws: None.
//--
CMICmdCmdSymbolListLines::CMICmdCmdSymbolListLines()
- : m_constStrArgNameFile("file")
-{
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "symbol-list-lines";
+ : m_constStrArgNameFile("file") {
+ // Command factory matches this name with that received from the stdin stream
+ m_strMiCmd = "symbol-list-lines";
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdSymbolListLines::CreateSelf;
+ // Required by the CMICmdFactory when registering *this command
+ m_pSelfCreatorFn = &CMICmdCmdSymbolListLines::CreateSelf;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdSymbolListLines destructor.
// Type: Overrideable.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmdCmdSymbolListLines::~CMICmdCmdSymbolListLines()
-{
-}
+CMICmdCmdSymbolListLines::~CMICmdCmdSymbolListLines() {}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The parses the command line options
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The parses the command line
+// options
// arguments to extract values for each of those arguments.
// Type: Overridden.
// Args: None.
@@ -60,67 +61,75 @@ CMICmdCmdSymbolListLines::~CMICmdCmdSymb
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdSymbolListLines::ParseArgs()
-{
- m_setCmdArgs.Add(new CMICmdArgValFile(m_constStrArgNameFile, true, true));
- return ParseValidateCmdOptions();
+bool CMICmdCmdSymbolListLines::ParseArgs() {
+ m_setCmdArgs.Add(new CMICmdArgValFile(m_constStrArgNameFile, true, true));
+ return ParseValidateCmdOptions();
}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command does work in this function.
-// The command is likely to communicate with the LLDB SBDebugger in here.
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command does work in this
+// function.
+// The command is likely to communicate with the LLDB SBDebugger in
+// here.
// Synopsis: -symbol-list-lines file
-// Ref: http://sourceware.org/gdb/onlinedocs/gdb/GDB_002fMI-Symbol-Query.html#GDB_002fMI-Symbol-Query
+// Ref:
+// http://sourceware.org/gdb/onlinedocs/gdb/GDB_002fMI-Symbol-Query.html#GDB_002fMI-Symbol-Query
// Type: Overridden.
// Args: None.
// Return: MIstatus::success - Functional succeeded.
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdSymbolListLines::Execute()
-{
- CMICMDBASE_GETOPTION(pArgFile, File, m_constStrArgNameFile);
-
- const CMIUtilString &strFilePath(pArgFile->GetValue());
- const CMIUtilString strCmd(CMIUtilString::Format("source info --file \"%s\"", strFilePath.AddSlashes().c_str()));
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(CMICmnLLDBDebugSessionInfo::Instance());
- const lldb::ReturnStatus rtn = rSessionInfo.GetDebugger().GetCommandInterpreter().HandleCommand(strCmd.c_str(), m_lldbResult);
- MIunused(rtn);
+bool CMICmdCmdSymbolListLines::Execute() {
+ CMICMDBASE_GETOPTION(pArgFile, File, m_constStrArgNameFile);
- return MIstatus::success;
-}
-
-//++ ------------------------------------------------------------------------------------
-// Details: Helper function for parsing the header returned from lldb for the command:
+ const CMIUtilString &strFilePath(pArgFile->GetValue());
+ const CMIUtilString strCmd(CMIUtilString::Format(
+ "source info --file \"%s\"", strFilePath.AddSlashes().c_str()));
+
+ CMICmnLLDBDebugSessionInfo &rSessionInfo(
+ CMICmnLLDBDebugSessionInfo::Instance());
+ const lldb::ReturnStatus rtn =
+ rSessionInfo.GetDebugger().GetCommandInterpreter().HandleCommand(
+ strCmd.c_str(), m_lldbResult);
+ MIunused(rtn);
+
+ return MIstatus::success;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: Helper function for parsing the header returned from lldb for the
+// command:
// target modules dump line-table <file>
// where the header is of the format:
// Line table for /path/to/file in `/path/to/module
// Args: input - (R) Input string to parse.
// file - (W) String representing the file.
-// Return: bool - True = input was parsed successfully, false = input could not be parsed.
+// Return: bool - True = input was parsed successfully, false = input could not
+// be parsed.
// Throws: None.
//--
-static bool
-ParseLLDBLineAddressHeader(const char *input, CMIUtilString &file)
-{
- // Match LineEntry using regex.
- static llvm::Regex g_lineentry_header_regex(
- llvm::StringRef("^ *Lines found for file (.+) in compilation unit (.+) in `(.+)$"));
- // ^1=file ^2=cu ^3=module
+static bool ParseLLDBLineAddressHeader(const char *input, CMIUtilString &file) {
+ // Match LineEntry using regex.
+ static llvm::Regex g_lineentry_header_regex(llvm::StringRef(
+ "^ *Lines found for file (.+) in compilation unit (.+) in `(.+)$"));
+ // ^1=file ^2=cu
+ // ^3=module
- llvm::SmallVector<llvm::StringRef, 4> match;
+ llvm::SmallVector<llvm::StringRef, 4> match;
- const bool ok = g_lineentry_header_regex.match(input, &match);
- if (ok)
- file = match[1];
- return ok;
+ const bool ok = g_lineentry_header_regex.match(input, &match);
+ if (ok)
+ file = match[1];
+ return ok;
}
-//++ ------------------------------------------------------------------------------------
-// Details: Helper function for parsing a line entry returned from lldb for the command:
+//++
+//------------------------------------------------------------------------------------
+// Details: Helper function for parsing a line entry returned from lldb for the
+// command:
// target modules dump line-table <file>
// where the line entry is of the format:
// 0x0000000100000e70: /path/to/file:3002[:4]
@@ -129,43 +138,45 @@ ParseLLDBLineAddressHeader(const char *i
// addr - (W) String representing the pc address.
// file - (W) String representing the file.
// line - (W) String representing the line.
-// Return: bool - True = input was parsed successfully, false = input could not be parsed.
+// Return: bool - True = input was parsed successfully, false = input could not
+// be parsed.
// Throws: None.
//--
-static bool
-ParseLLDBLineAddressEntry(const char *input, CMIUtilString &addr,
- CMIUtilString &file, CMIUtilString &line)
-{
- // Note: Ambiguities arise because the column is optional, and
- // because : can appear in filenames or as a byte in a multibyte
- // UTF8 character. We keep those cases to a minimum by using regex
- // to work on the string from both the left and right, so that what
- // is remains is assumed to be the filename.
-
- // Match LineEntry using regex.
- static llvm::Regex g_lineentry_nocol_regex(
- llvm::StringRef("^ *\\[(0x[0-9a-fA-F]+)-(0x[0-9a-fA-F]+)\\): (.+):([0-9]+)$"));
- static llvm::Regex g_lineentry_col_regex(
- llvm::StringRef("^ *\\[(0x[0-9a-fA-F]+)-(0x[0-9a-fA-F]+)\\): (.+):([0-9]+):[0-9]+$"));
- // ^1=start ^2=end ^3=f ^4=line ^5=:col(opt)
-
- llvm::SmallVector<llvm::StringRef, 6> match;
-
- // First try matching the LineEntry with the column,
- // then try without the column.
- const bool ok = g_lineentry_col_regex.match(input, &match) ||
- g_lineentry_nocol_regex.match(input, &match);
- if (ok)
- {
- addr = match[1];
- file = match[3];
- line = match[4];
- }
- return ok;
-}
-
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command prepares a MI Record Result
+static bool ParseLLDBLineAddressEntry(const char *input, CMIUtilString &addr,
+ CMIUtilString &file,
+ CMIUtilString &line) {
+ // Note: Ambiguities arise because the column is optional, and
+ // because : can appear in filenames or as a byte in a multibyte
+ // UTF8 character. We keep those cases to a minimum by using regex
+ // to work on the string from both the left and right, so that what
+ // is remains is assumed to be the filename.
+
+ // Match LineEntry using regex.
+ static llvm::Regex g_lineentry_nocol_regex(llvm::StringRef(
+ "^ *\\[(0x[0-9a-fA-F]+)-(0x[0-9a-fA-F]+)\\): (.+):([0-9]+)$"));
+ static llvm::Regex g_lineentry_col_regex(llvm::StringRef(
+ "^ *\\[(0x[0-9a-fA-F]+)-(0x[0-9a-fA-F]+)\\): (.+):([0-9]+):[0-9]+$"));
+ // ^1=start ^2=end ^3=f ^4=line
+ // ^5=:col(opt)
+
+ llvm::SmallVector<llvm::StringRef, 6> match;
+
+ // First try matching the LineEntry with the column,
+ // then try without the column.
+ const bool ok = g_lineentry_col_regex.match(input, &match) ||
+ g_lineentry_nocol_regex.match(input, &match);
+ if (ok) {
+ addr = match[1];
+ file = match[3];
+ line = match[4];
+ }
+ return ok;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command prepares a MI Record
+// Result
// for the work carried out in the Execute().
// Type: Overridden.
// Args: None.
@@ -173,83 +184,85 @@ ParseLLDBLineAddressEntry(const char *in
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdSymbolListLines::Acknowledge()
-{
- if (m_lldbResult.GetErrorSize() > 0)
- {
- const char *pLldbErr = m_lldbResult.GetError();
- const CMIUtilString strMsg(CMIUtilString(pLldbErr).StripCRAll());
- const CMICmnMIValueConst miValueConst(strMsg);
- const CMICmnMIValueResult miValueResult("message", miValueConst);
- const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error, miValueResult);
- m_miResultRecord = miRecordResult;
+bool CMICmdCmdSymbolListLines::Acknowledge() {
+ if (m_lldbResult.GetErrorSize() > 0) {
+ const char *pLldbErr = m_lldbResult.GetError();
+ const CMIUtilString strMsg(CMIUtilString(pLldbErr).StripCRAll());
+ const CMICmnMIValueConst miValueConst(strMsg);
+ const CMICmnMIValueResult miValueResult("message", miValueConst);
+ const CMICmnMIResultRecord miRecordResult(
+ m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error,
+ miValueResult);
+ m_miResultRecord = miRecordResult;
+ } else {
+ CMIUtilString::VecString_t vecLines;
+ const CMIUtilString strLldbMsg(m_lldbResult.GetOutput());
+ const MIuint nLines(strLldbMsg.SplitLines(vecLines));
+
+ // Parse the file from the header.
+ const CMIUtilString &rWantFile(vecLines[0]);
+ CMIUtilString strWantFile;
+ if (!ParseLLDBLineAddressHeader(rWantFile.c_str(), strWantFile)) {
+ // Unexpected error - parsing failed.
+ // MI print "%s^error,msg=\"Command '-symbol-list-lines'. Error: Line
+ // address header is absent or has an unknown format.\""
+ const CMICmnMIValueConst miValueConst(CMIUtilString::Format(
+ MIRSRC(IDS_CMD_ERR_SOME_ERROR), m_cmdData.strMiCmd.c_str(),
+ "Line address header is absent or has an unknown format."));
+ const CMICmnMIValueResult miValueResult("msg", miValueConst);
+ const CMICmnMIResultRecord miRecordResult(
+ m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error,
+ miValueResult);
+ m_miResultRecord = miRecordResult;
+
+ return MIstatus::success;
}
- else
- {
- CMIUtilString::VecString_t vecLines;
- const CMIUtilString strLldbMsg(m_lldbResult.GetOutput());
- const MIuint nLines(strLldbMsg.SplitLines(vecLines));
-
- // Parse the file from the header.
- const CMIUtilString &rWantFile(vecLines[0]);
- CMIUtilString strWantFile;
- if (!ParseLLDBLineAddressHeader(rWantFile.c_str(), strWantFile))
- {
- // Unexpected error - parsing failed.
- // MI print "%s^error,msg=\"Command '-symbol-list-lines'. Error: Line address header is absent or has an unknown format.\""
- const CMICmnMIValueConst miValueConst(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_SOME_ERROR), m_cmdData.strMiCmd.c_str(), "Line address header is absent or has an unknown format."));
- const CMICmnMIValueResult miValueResult("msg", miValueConst);
- const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error, miValueResult);
- m_miResultRecord = miRecordResult;
-
- return MIstatus::success;
- }
-
- // Parse the line address entries.
- CMICmnMIValueList miValueList(true);
- for (MIuint i = 1; i < nLines; ++i)
- {
- // String looks like:
- // 0x0000000100000e70: /path/to/file:3[:4]
- const CMIUtilString &rLine(vecLines[i]);
- CMIUtilString strAddr;
- CMIUtilString strFile;
- CMIUtilString strLine;
-
- if (!ParseLLDBLineAddressEntry(rLine.c_str(), strAddr, strFile, strLine))
- continue;
-
- const CMICmnMIValueConst miValueConst(strAddr);
- const CMICmnMIValueResult miValueResult("pc", miValueConst);
- CMICmnMIValueTuple miValueTuple(miValueResult);
-
- const CMICmnMIValueConst miValueConst2(strLine);
- const CMICmnMIValueResult miValueResult2("line", miValueConst2);
- miValueTuple.Add(miValueResult2);
-
- miValueList.Add(miValueTuple);
- }
-
- // MI print "%s^done,lines=[{pc=\"%d\",line=\"%d\"}...]"
- const CMICmnMIValueResult miValueResult("lines", miValueList);
- const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, miValueResult);
- m_miResultRecord = miRecordResult;
+
+ // Parse the line address entries.
+ CMICmnMIValueList miValueList(true);
+ for (MIuint i = 1; i < nLines; ++i) {
+ // String looks like:
+ // 0x0000000100000e70: /path/to/file:3[:4]
+ const CMIUtilString &rLine(vecLines[i]);
+ CMIUtilString strAddr;
+ CMIUtilString strFile;
+ CMIUtilString strLine;
+
+ if (!ParseLLDBLineAddressEntry(rLine.c_str(), strAddr, strFile, strLine))
+ continue;
+
+ const CMICmnMIValueConst miValueConst(strAddr);
+ const CMICmnMIValueResult miValueResult("pc", miValueConst);
+ CMICmnMIValueTuple miValueTuple(miValueResult);
+
+ const CMICmnMIValueConst miValueConst2(strLine);
+ const CMICmnMIValueResult miValueResult2("line", miValueConst2);
+ miValueTuple.Add(miValueResult2);
+
+ miValueList.Add(miValueTuple);
}
- return MIstatus::success;
+ // MI print "%s^done,lines=[{pc=\"%d\",line=\"%d\"}...]"
+ const CMICmnMIValueResult miValueResult("lines", miValueList);
+ const CMICmnMIResultRecord miRecordResult(
+ m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
+ miValueResult);
+ m_miResultRecord = miRecordResult;
+ }
+
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
-// Details: Required by the CMICmdFactory when registering *this command. The factory
+//++
+//------------------------------------------------------------------------------------
+// Details: Required by the CMICmdFactory when registering *this command. The
+// factory
// calls this function to create an instance of *this command.
// Type: Static method.
// Args: None.
// Return: CMICmdBase * - Pointer to a new command.
// Throws: None.
//--
-CMICmdBase *
-CMICmdCmdSymbolListLines::CreateSelf()
-{
- return new CMICmdCmdSymbolListLines();
+CMICmdBase *CMICmdCmdSymbolListLines::CreateSelf() {
+ return new CMICmdCmdSymbolListLines();
}
Modified: lldb/trunk/tools/lldb-mi/MICmdCmdSymbol.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdSymbol.h?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdSymbol.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdSymbol.h Tue Sep 6 15:57:50 2016
@@ -9,13 +9,16 @@
// Overview: CMICmdCmdSymbolListLines interface.
//
-// To implement new MI commands derive a new command class from the command base
-// class. To enable the new command for interpretation add the new command class
+// To implement new MI commands derive a new command class from the
+// command base
+// class. To enable the new command for interpretation add the new
+// command class
// to the command factory. The files of relevance are:
// MICmdCommands.cpp
// MICmdBase.h / .cpp
// MICmdCmd.h / .cpp
-// For an introduction to adding a new command see CMICmdCmdSupportInfoMiCmdQuery
+// For an introduction to adding a new command see
+// CMICmdCmdSupportInfoMiCmdQuery
// command class as an example.
#pragma once
@@ -26,32 +29,32 @@
// In-house headers:
#include "MICmdBase.h"
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI command class. MI commands derived from the command base class.
// *this class implements MI command "symbol-list-lines".
//--
-class CMICmdCmdSymbolListLines : public CMICmdBase
-{
- // Statics:
- public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
- public:
- /* ctor */ CMICmdCmdSymbolListLines();
-
- // Overridden:
- public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdSymbolListLines() override;
-
- // Attributes:
- private:
- lldb::SBCommandReturnObject m_lldbResult;
- const CMIUtilString m_constStrArgNameFile;
+class CMICmdCmdSymbolListLines : public CMICmdBase {
+ // Statics:
+public:
+ // Required by the CMICmdFactory when registering *this command
+ static CMICmdBase *CreateSelf();
+
+ // Methods:
+public:
+ /* ctor */ CMICmdCmdSymbolListLines();
+
+ // Overridden:
+public:
+ // From CMICmdInvoker::ICmd
+ bool Execute() override;
+ bool Acknowledge() override;
+ bool ParseArgs() override;
+ // From CMICmnBase
+ /* dtor */ ~CMICmdCmdSymbolListLines() override;
+
+ // Attributes:
+private:
+ lldb::SBCommandReturnObject m_lldbResult;
+ const CMIUtilString m_constStrArgNameFile;
};
Modified: lldb/trunk/tools/lldb-mi/MICmdCmdTarget.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdTarget.cpp?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdTarget.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdTarget.cpp Tue Sep 6 15:57:50 2016
@@ -10,23 +10,24 @@
// Overview: CMICmdCmdTargetSelect implementation.
// Third Party Headers:
-#include "lldb/API/SBStream.h"
#include "lldb/API/SBCommandInterpreter.h"
#include "lldb/API/SBCommandReturnObject.h"
+#include "lldb/API/SBStream.h"
// In-house headers:
+#include "MICmdArgValNumber.h"
+#include "MICmdArgValOptionLong.h"
+#include "MICmdArgValOptionShort.h"
+#include "MICmdArgValString.h"
#include "MICmdCmdTarget.h"
+#include "MICmnLLDBDebugSessionInfo.h"
+#include "MICmnLLDBDebugger.h"
+#include "MICmnMIOutOfBandRecord.h"
#include "MICmnMIResultRecord.h"
#include "MICmnMIValueConst.h"
-#include "MICmnMIOutOfBandRecord.h"
-#include "MICmnLLDBDebugger.h"
-#include "MICmnLLDBDebugSessionInfo.h"
-#include "MICmdArgValString.h"
-#include "MICmdArgValOptionLong.h"
-#include "MICmdArgValOptionShort.h"
-#include "MICmdArgValNumber.h"
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdTargetSelect constructor.
// Type: Method.
// Args: None.
@@ -34,29 +35,29 @@
// Throws: None.
//--
CMICmdCmdTargetSelect::CMICmdCmdTargetSelect()
- : m_constStrArgNamedType("type")
- , m_constStrArgNamedParameters("parameters")
-{
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "target-select";
+ : m_constStrArgNamedType("type"),
+ m_constStrArgNamedParameters("parameters") {
+ // Command factory matches this name with that received from the stdin stream
+ m_strMiCmd = "target-select";
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdTargetSelect::CreateSelf;
+ // Required by the CMICmdFactory when registering *this command
+ m_pSelfCreatorFn = &CMICmdCmdTargetSelect::CreateSelf;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdTargetSelect destructor.
// Type: Overrideable.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmdCmdTargetSelect::~CMICmdCmdTargetSelect()
-{
-}
+CMICmdCmdTargetSelect::~CMICmdCmdTargetSelect() {}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The parses the command line options
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The parses the command line
+// options
// arguments to extract values for each of those arguments.
// Type: Overridden.
// Args: None.
@@ -64,106 +65,118 @@ CMICmdCmdTargetSelect::~CMICmdCmdTargetS
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdTargetSelect::ParseArgs()
-{
- m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgNamedType, true, true));
- m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgNamedParameters, true, true));
- return ParseValidateCmdOptions();
+bool CMICmdCmdTargetSelect::ParseArgs() {
+ m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgNamedType, true, true));
+ m_setCmdArgs.Add(
+ new CMICmdArgValString(m_constStrArgNamedParameters, true, true));
+ return ParseValidateCmdOptions();
}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command does work in this function.
-// The command is likely to communicate with the LLDB SBDebugger in here.
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command does work in this
+// function.
+// The command is likely to communicate with the LLDB SBDebugger in
+// here.
// Synopsis: -target-select type parameters ...
-// Ref: http://sourceware.org/gdb/onlinedocs/gdb/GDB_002fMI-Target-Manipulation.html#GDB_002fMI-Target-Manipulation
+// Ref:
+// http://sourceware.org/gdb/onlinedocs/gdb/GDB_002fMI-Target-Manipulation.html#GDB_002fMI-Target-Manipulation
// Type: Overridden.
// Args: None.
// Return: MIstatus::success - Functional succeeded.
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdTargetSelect::Execute()
-{
- CMICMDBASE_GETOPTION(pArgType, String, m_constStrArgNamedType);
- CMICMDBASE_GETOPTION(pArgParameters, String, m_constStrArgNamedParameters);
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(CMICmnLLDBDebugSessionInfo::Instance());
-
- // Check we have a valid target
- // Note: target created via 'file-exec-and-symbols' command
- if (!rSessionInfo.GetTarget().IsValid())
- {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_INVALID_TARGET_CURRENT), m_cmdData.strMiCmd.c_str()));
- return MIstatus::failure;
- }
-
- // Verify that we are executing remotely
- const CMIUtilString &rRemoteType(pArgType->GetValue());
- if (rRemoteType != "remote")
- {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_INVALID_TARGET_TYPE), m_cmdData.strMiCmd.c_str(), rRemoteType.c_str()));
- return MIstatus::failure;
- }
-
- // Create a URL pointing to the remote gdb stub
- const CMIUtilString strUrl = CMIUtilString::Format("connect://%s", pArgParameters->GetValue().c_str());
-
- // Ask LLDB to collect to the target port
- const char *pPlugin("gdb-remote");
- lldb::SBError error;
- lldb::SBProcess process = rSessionInfo.GetTarget().ConnectRemote(rSessionInfo.GetListener(), strUrl.c_str(), pPlugin, error);
-
- // Verify that we have managed to connect successfully
- lldb::SBStream errMsg;
- if (!process.IsValid())
- {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_INVALID_TARGET_PLUGIN), m_cmdData.strMiCmd.c_str(), errMsg.GetData()));
- return MIstatus::failure;
- }
- if (error.Fail())
- {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_CONNECT_TO_TARGET), m_cmdData.strMiCmd.c_str(), errMsg.GetData()));
- return MIstatus::failure;
- }
-
- // Set the environment path if we were given one
- CMIUtilString strWkDir;
- if (rSessionInfo.SharedDataRetrieve<CMIUtilString>(rSessionInfo.m_constStrSharedDataKeyWkDir, strWkDir))
- {
- lldb::SBDebugger &rDbgr = rSessionInfo.GetDebugger();
- if (!rDbgr.SetCurrentPlatformSDKRoot(strWkDir.c_str()))
- {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_FNFAILED), m_cmdData.strMiCmd.c_str(), "target-select"));
- return MIstatus::failure;
- }
- }
-
- // Set the shared object path if we were given one
- CMIUtilString strSolibPath;
- if (rSessionInfo.SharedDataRetrieve<CMIUtilString>(rSessionInfo.m_constStrSharedDataSolibPath, strSolibPath))
- {
- lldb::SBDebugger &rDbgr = rSessionInfo.GetDebugger();
- lldb::SBCommandInterpreter cmdIterpreter = rDbgr.GetCommandInterpreter();
-
- CMIUtilString strCmdString = CMIUtilString::Format("target modules search-paths add . %s", strSolibPath.c_str());
-
- lldb::SBCommandReturnObject retObj;
- cmdIterpreter.HandleCommand(strCmdString.c_str(), retObj, false);
-
- if (!retObj.Succeeded())
- {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_FNFAILED), m_cmdData.strMiCmd.c_str(), "target-select"));
- return MIstatus::failure;
- }
- }
-
- return MIstatus::success;
-}
-
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command prepares a MI Record Result
+bool CMICmdCmdTargetSelect::Execute() {
+ CMICMDBASE_GETOPTION(pArgType, String, m_constStrArgNamedType);
+ CMICMDBASE_GETOPTION(pArgParameters, String, m_constStrArgNamedParameters);
+
+ CMICmnLLDBDebugSessionInfo &rSessionInfo(
+ CMICmnLLDBDebugSessionInfo::Instance());
+
+ // Check we have a valid target
+ // Note: target created via 'file-exec-and-symbols' command
+ if (!rSessionInfo.GetTarget().IsValid()) {
+ SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_INVALID_TARGET_CURRENT),
+ m_cmdData.strMiCmd.c_str()));
+ return MIstatus::failure;
+ }
+
+ // Verify that we are executing remotely
+ const CMIUtilString &rRemoteType(pArgType->GetValue());
+ if (rRemoteType != "remote") {
+ SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_INVALID_TARGET_TYPE),
+ m_cmdData.strMiCmd.c_str(),
+ rRemoteType.c_str()));
+ return MIstatus::failure;
+ }
+
+ // Create a URL pointing to the remote gdb stub
+ const CMIUtilString strUrl =
+ CMIUtilString::Format("connect://%s", pArgParameters->GetValue().c_str());
+
+ // Ask LLDB to collect to the target port
+ const char *pPlugin("gdb-remote");
+ lldb::SBError error;
+ lldb::SBProcess process = rSessionInfo.GetTarget().ConnectRemote(
+ rSessionInfo.GetListener(), strUrl.c_str(), pPlugin, error);
+
+ // Verify that we have managed to connect successfully
+ lldb::SBStream errMsg;
+ if (!process.IsValid()) {
+ SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_INVALID_TARGET_PLUGIN),
+ m_cmdData.strMiCmd.c_str(),
+ errMsg.GetData()));
+ return MIstatus::failure;
+ }
+ if (error.Fail()) {
+ SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_CONNECT_TO_TARGET),
+ m_cmdData.strMiCmd.c_str(),
+ errMsg.GetData()));
+ return MIstatus::failure;
+ }
+
+ // Set the environment path if we were given one
+ CMIUtilString strWkDir;
+ if (rSessionInfo.SharedDataRetrieve<CMIUtilString>(
+ rSessionInfo.m_constStrSharedDataKeyWkDir, strWkDir)) {
+ lldb::SBDebugger &rDbgr = rSessionInfo.GetDebugger();
+ if (!rDbgr.SetCurrentPlatformSDKRoot(strWkDir.c_str())) {
+ SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_FNFAILED),
+ m_cmdData.strMiCmd.c_str(),
+ "target-select"));
+ return MIstatus::failure;
+ }
+ }
+
+ // Set the shared object path if we were given one
+ CMIUtilString strSolibPath;
+ if (rSessionInfo.SharedDataRetrieve<CMIUtilString>(
+ rSessionInfo.m_constStrSharedDataSolibPath, strSolibPath)) {
+ lldb::SBDebugger &rDbgr = rSessionInfo.GetDebugger();
+ lldb::SBCommandInterpreter cmdIterpreter = rDbgr.GetCommandInterpreter();
+
+ CMIUtilString strCmdString = CMIUtilString::Format(
+ "target modules search-paths add . %s", strSolibPath.c_str());
+
+ lldb::SBCommandReturnObject retObj;
+ cmdIterpreter.HandleCommand(strCmdString.c_str(), retObj, false);
+
+ if (!retObj.Succeeded()) {
+ SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_FNFAILED),
+ m_cmdData.strMiCmd.c_str(),
+ "target-select"));
+ return MIstatus::failure;
+ }
+ }
+
+ return MIstatus::success;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command prepares a MI Record
+// Result
// for the work carried out in the Execute().
// Type: Overridden.
// Args: None.
@@ -171,44 +184,47 @@ CMICmdCmdTargetSelect::Execute()
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdTargetSelect::Acknowledge()
-{
- const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Connected);
- m_miResultRecord = miRecordResult;
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(CMICmnLLDBDebugSessionInfo::Instance());
- lldb::pid_t pid = rSessionInfo.GetProcess().GetProcessID();
- // Prod the client i.e. Eclipse with out-of-band results to help it 'continue' because it is using LLDB debugger
- // Give the client '=thread-group-started,id="i1"'
- m_bHasResultRecordExtra = true;
- const CMICmnMIValueConst miValueConst2("i1");
- const CMICmnMIValueResult miValueResult2("id", miValueConst2);
- const CMIUtilString strPid(CMIUtilString::Format("%lld", pid));
- const CMICmnMIValueConst miValueConst(strPid);
- const CMICmnMIValueResult miValueResult("pid", miValueConst);
- CMICmnMIOutOfBandRecord miOutOfBand(CMICmnMIOutOfBandRecord::eOutOfBand_ThreadGroupStarted, miValueResult2);
- miOutOfBand.Add(miValueResult);
- m_miResultRecordExtra = miOutOfBand.GetString();
-
- return MIstatus::success;
-}
-
-//++ ------------------------------------------------------------------------------------
-// Details: Required by the CMICmdFactory when registering *this command. The factory
+bool CMICmdCmdTargetSelect::Acknowledge() {
+ const CMICmnMIResultRecord miRecordResult(
+ m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Connected);
+ m_miResultRecord = miRecordResult;
+
+ CMICmnLLDBDebugSessionInfo &rSessionInfo(
+ CMICmnLLDBDebugSessionInfo::Instance());
+ lldb::pid_t pid = rSessionInfo.GetProcess().GetProcessID();
+ // Prod the client i.e. Eclipse with out-of-band results to help it 'continue'
+ // because it is using LLDB debugger
+ // Give the client '=thread-group-started,id="i1"'
+ m_bHasResultRecordExtra = true;
+ const CMICmnMIValueConst miValueConst2("i1");
+ const CMICmnMIValueResult miValueResult2("id", miValueConst2);
+ const CMIUtilString strPid(CMIUtilString::Format("%lld", pid));
+ const CMICmnMIValueConst miValueConst(strPid);
+ const CMICmnMIValueResult miValueResult("pid", miValueConst);
+ CMICmnMIOutOfBandRecord miOutOfBand(
+ CMICmnMIOutOfBandRecord::eOutOfBand_ThreadGroupStarted, miValueResult2);
+ miOutOfBand.Add(miValueResult);
+ m_miResultRecordExtra = miOutOfBand.GetString();
+
+ return MIstatus::success;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: Required by the CMICmdFactory when registering *this command. The
+// factory
// calls this function to create an instance of *this command.
// Type: Static method.
// Args: None.
// Return: CMICmdBase * - Pointer to a new command.
// Throws: None.
//--
-CMICmdBase *
-CMICmdCmdTargetSelect::CreateSelf()
-{
- return new CMICmdCmdTargetSelect();
+CMICmdBase *CMICmdCmdTargetSelect::CreateSelf() {
+ return new CMICmdCmdTargetSelect();
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdTargetAttach constructor.
// Type: Method.
// Args: None.
@@ -216,30 +232,29 @@ CMICmdCmdTargetSelect::CreateSelf()
// Throws: None.
//--
CMICmdCmdTargetAttach::CMICmdCmdTargetAttach()
-: m_constStrArgPid("pid")
-, m_constStrArgNamedFile("n")
-, m_constStrArgWaitFor("waitfor")
-{
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "target-attach";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdTargetAttach::CreateSelf;
+ : m_constStrArgPid("pid"), m_constStrArgNamedFile("n"),
+ m_constStrArgWaitFor("waitfor") {
+ // Command factory matches this name with that received from the stdin stream
+ m_strMiCmd = "target-attach";
+
+ // Required by the CMICmdFactory when registering *this command
+ m_pSelfCreatorFn = &CMICmdCmdTargetAttach::CreateSelf;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdTargetAttach destructor.
// Type: Overrideable.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmdCmdTargetAttach::~CMICmdCmdTargetAttach()
-{
-}
+CMICmdCmdTargetAttach::~CMICmdCmdTargetAttach() {}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The parses the command line options
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The parses the command line
+// options
// arguments to extract values for each of those arguments.
// Type: Overridden.
// Args: None.
@@ -247,81 +262,82 @@ CMICmdCmdTargetAttach::~CMICmdCmdTargetA
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdTargetAttach::ParseArgs()
-{
- m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgPid, false, true));
- m_setCmdArgs.Add(new CMICmdArgValOptionShort(m_constStrArgNamedFile, false, true,
- CMICmdArgValListBase::eArgValType_String, 1));
- m_setCmdArgs.Add(new CMICmdArgValOptionLong(m_constStrArgWaitFor, false, true));
- return ParseValidateCmdOptions();
-}
-
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command does work in this function.
-// The command is likely to communicate with the LLDB SBDebugger in here.
+bool CMICmdCmdTargetAttach::ParseArgs() {
+ m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgPid, false, true));
+ m_setCmdArgs.Add(
+ new CMICmdArgValOptionShort(m_constStrArgNamedFile, false, true,
+ CMICmdArgValListBase::eArgValType_String, 1));
+ m_setCmdArgs.Add(
+ new CMICmdArgValOptionLong(m_constStrArgWaitFor, false, true));
+ return ParseValidateCmdOptions();
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command does work in this
+// function.
+// The command is likely to communicate with the LLDB SBDebugger in
+// here.
// Synopsis: -target-attach file
-// Ref: http://sourceware.org/gdb/onlinedocs/gdb/GDB_002fMI-Target-Manipulation.html#GDB_002fMI-Target-Manipulation
+// Ref:
+// http://sourceware.org/gdb/onlinedocs/gdb/GDB_002fMI-Target-Manipulation.html#GDB_002fMI-Target-Manipulation
// Type: Overridden.
// Args: None.
// Return: MIstatus::success - Functional succeeded.
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdTargetAttach::Execute()
-{
- CMICMDBASE_GETOPTION(pArgPid, Number, m_constStrArgPid);
- CMICMDBASE_GETOPTION(pArgFile, OptionShort, m_constStrArgNamedFile);
- CMICMDBASE_GETOPTION(pArgWaitFor, OptionLong, m_constStrArgWaitFor);
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(CMICmnLLDBDebugSessionInfo::Instance());
-
- // If the current target is invalid, create one
- lldb::SBTarget target = rSessionInfo.GetTarget();
- if (!target.IsValid())
- {
- target = rSessionInfo.GetDebugger().CreateTarget(NULL);
- if (!target.IsValid())
- {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_INVALID_TARGET_CURRENT), m_cmdData.strMiCmd.c_str()));
- return MIstatus::failure;
- }
- }
-
- lldb::SBError error;
- lldb::SBListener listener;
- if (pArgPid->GetFound() && pArgPid->GetValid())
- {
- lldb::pid_t pid;
- pid = pArgPid->GetValue();
- target.AttachToProcessWithID(listener, pid, error);
- }
- else if (pArgFile->GetFound() && pArgFile->GetValid())
- {
- bool bWaitFor = (pArgWaitFor->GetFound());
- CMIUtilString file;
- pArgFile->GetExpectedOption<CMICmdArgValString>(file);
- target.AttachToProcessWithName(listener, file.c_str(), bWaitFor, error);
- }
- else
- {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_ATTACH_BAD_ARGS), m_cmdData.strMiCmd.c_str()));
- return MIstatus::failure;
- }
-
- lldb::SBStream errMsg;
- if (error.Fail())
- {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_ATTACH_FAILED), m_cmdData.strMiCmd.c_str(), errMsg.GetData()));
- return MIstatus::failure;
- }
-
- return MIstatus::success;
-}
-
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command prepares a MI Record Result
+bool CMICmdCmdTargetAttach::Execute() {
+ CMICMDBASE_GETOPTION(pArgPid, Number, m_constStrArgPid);
+ CMICMDBASE_GETOPTION(pArgFile, OptionShort, m_constStrArgNamedFile);
+ CMICMDBASE_GETOPTION(pArgWaitFor, OptionLong, m_constStrArgWaitFor);
+
+ CMICmnLLDBDebugSessionInfo &rSessionInfo(
+ CMICmnLLDBDebugSessionInfo::Instance());
+
+ // If the current target is invalid, create one
+ lldb::SBTarget target = rSessionInfo.GetTarget();
+ if (!target.IsValid()) {
+ target = rSessionInfo.GetDebugger().CreateTarget(NULL);
+ if (!target.IsValid()) {
+ SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_INVALID_TARGET_CURRENT),
+ m_cmdData.strMiCmd.c_str()));
+ return MIstatus::failure;
+ }
+ }
+
+ lldb::SBError error;
+ lldb::SBListener listener;
+ if (pArgPid->GetFound() && pArgPid->GetValid()) {
+ lldb::pid_t pid;
+ pid = pArgPid->GetValue();
+ target.AttachToProcessWithID(listener, pid, error);
+ } else if (pArgFile->GetFound() && pArgFile->GetValid()) {
+ bool bWaitFor = (pArgWaitFor->GetFound());
+ CMIUtilString file;
+ pArgFile->GetExpectedOption<CMICmdArgValString>(file);
+ target.AttachToProcessWithName(listener, file.c_str(), bWaitFor, error);
+ } else {
+ SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_ATTACH_BAD_ARGS),
+ m_cmdData.strMiCmd.c_str()));
+ return MIstatus::failure;
+ }
+
+ lldb::SBStream errMsg;
+ if (error.Fail()) {
+ SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_ATTACH_FAILED),
+ m_cmdData.strMiCmd.c_str(),
+ errMsg.GetData()));
+ return MIstatus::failure;
+ }
+
+ return MIstatus::success;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command prepares a MI Record
+// Result
// for the work carried out in the Execute().
// Type: Overridden.
// Args: None.
@@ -329,72 +345,75 @@ CMICmdCmdTargetAttach::Execute()
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdTargetAttach::Acknowledge()
-{
- const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done);
- m_miResultRecord = miRecordResult;
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(CMICmnLLDBDebugSessionInfo::Instance());
- lldb::pid_t pid = rSessionInfo.GetProcess().GetProcessID();
- // Prod the client i.e. Eclipse with out-of-band results to help it 'continue' because it is using LLDB debugger
- // Give the client '=thread-group-started,id="i1"'
- m_bHasResultRecordExtra = true;
- const CMICmnMIValueConst miValueConst2("i1");
- const CMICmnMIValueResult miValueResult2("id", miValueConst2);
- const CMIUtilString strPid(CMIUtilString::Format("%lld", pid));
- const CMICmnMIValueConst miValueConst(strPid);
- const CMICmnMIValueResult miValueResult("pid", miValueConst);
- CMICmnMIOutOfBandRecord miOutOfBand(CMICmnMIOutOfBandRecord::eOutOfBand_ThreadGroupStarted, miValueResult2);
- miOutOfBand.Add(miValueResult);
- m_miResultRecordExtra = miOutOfBand.GetString();
-
- return MIstatus::success;
-}
-
-//++ ------------------------------------------------------------------------------------
-// Details: Required by the CMICmdFactory when registering *this command. The factory
+bool CMICmdCmdTargetAttach::Acknowledge() {
+ const CMICmnMIResultRecord miRecordResult(
+ m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done);
+ m_miResultRecord = miRecordResult;
+
+ CMICmnLLDBDebugSessionInfo &rSessionInfo(
+ CMICmnLLDBDebugSessionInfo::Instance());
+ lldb::pid_t pid = rSessionInfo.GetProcess().GetProcessID();
+ // Prod the client i.e. Eclipse with out-of-band results to help it 'continue'
+ // because it is using LLDB debugger
+ // Give the client '=thread-group-started,id="i1"'
+ m_bHasResultRecordExtra = true;
+ const CMICmnMIValueConst miValueConst2("i1");
+ const CMICmnMIValueResult miValueResult2("id", miValueConst2);
+ const CMIUtilString strPid(CMIUtilString::Format("%lld", pid));
+ const CMICmnMIValueConst miValueConst(strPid);
+ const CMICmnMIValueResult miValueResult("pid", miValueConst);
+ CMICmnMIOutOfBandRecord miOutOfBand(
+ CMICmnMIOutOfBandRecord::eOutOfBand_ThreadGroupStarted, miValueResult2);
+ miOutOfBand.Add(miValueResult);
+ m_miResultRecordExtra = miOutOfBand.GetString();
+
+ return MIstatus::success;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: Required by the CMICmdFactory when registering *this command. The
+// factory
// calls this function to create an instance of *this command.
// Type: Static method.
// Args: None.
// Return: CMICmdBase * - Pointer to a new command.
// Throws: None.
//--
-CMICmdBase *
-CMICmdCmdTargetAttach::CreateSelf()
-{
- return new CMICmdCmdTargetAttach();
+CMICmdBase *CMICmdCmdTargetAttach::CreateSelf() {
+ return new CMICmdCmdTargetAttach();
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdTargetDetach constructor.
// Type: Method.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmdCmdTargetDetach::CMICmdCmdTargetDetach()
-{
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "target-detach";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdTargetDetach::CreateSelf;
+CMICmdCmdTargetDetach::CMICmdCmdTargetDetach() {
+ // Command factory matches this name with that received from the stdin stream
+ m_strMiCmd = "target-detach";
+
+ // Required by the CMICmdFactory when registering *this command
+ m_pSelfCreatorFn = &CMICmdCmdTargetDetach::CreateSelf;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdTargetDetach destructor.
// Type: Overrideable.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmdCmdTargetDetach::~CMICmdCmdTargetDetach()
-{
-}
+CMICmdCmdTargetDetach::~CMICmdCmdTargetDetach() {}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The parses the command line options
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The parses the command line
+// options
// arguments to extract values for each of those arguments.
// Type: Overridden.
// Args: None.
@@ -402,43 +421,44 @@ CMICmdCmdTargetDetach::~CMICmdCmdTargetD
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdTargetDetach::ParseArgs()
-{
- return MIstatus::success;
-}
+bool CMICmdCmdTargetDetach::ParseArgs() { return MIstatus::success; }
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command does work in this function.
-// The command is likely to communicate with the LLDB SBDebugger in here.
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command does work in this
+// function.
+// The command is likely to communicate with the LLDB SBDebugger in
+// here.
// Synopsis: -target-attach file
-// Ref: http://sourceware.org/gdb/onlinedocs/gdb/GDB_002fMI-Target-Manipulation.html#GDB_002fMI-Target-Manipulation
+// Ref:
+// http://sourceware.org/gdb/onlinedocs/gdb/GDB_002fMI-Target-Manipulation.html#GDB_002fMI-Target-Manipulation
// Type: Overridden.
// Args: None.
// Return: MIstatus::success - Functional succeeded.
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdTargetDetach::Execute()
-{
- CMICmnLLDBDebugSessionInfo &rSessionInfo(CMICmnLLDBDebugSessionInfo::Instance());
-
- lldb::SBProcess process = rSessionInfo.GetProcess();
-
- if (!process.IsValid())
- {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_INVALID_PROCESS), m_cmdData.strMiCmd.c_str()));
- return MIstatus::failure;
- }
-
- process.Detach();
-
- return MIstatus::success;
+bool CMICmdCmdTargetDetach::Execute() {
+ CMICmnLLDBDebugSessionInfo &rSessionInfo(
+ CMICmnLLDBDebugSessionInfo::Instance());
+
+ lldb::SBProcess process = rSessionInfo.GetProcess();
+
+ if (!process.IsValid()) {
+ SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_INVALID_PROCESS),
+ m_cmdData.strMiCmd.c_str()));
+ return MIstatus::failure;
+ }
+
+ process.Detach();
+
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command prepares a MI Record Result
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command prepares a MI Record
+// Result
// for the work carried out in the Execute().
// Type: Overridden.
// Args: None.
@@ -446,24 +466,23 @@ CMICmdCmdTargetDetach::Execute()
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdTargetDetach::Acknowledge()
-{
- const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done);
- m_miResultRecord = miRecordResult;
- return MIstatus::success;
+bool CMICmdCmdTargetDetach::Acknowledge() {
+ const CMICmnMIResultRecord miRecordResult(
+ m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done);
+ m_miResultRecord = miRecordResult;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
-// Details: Required by the CMICmdFactory when registering *this command. The factory
+//++
+//------------------------------------------------------------------------------------
+// Details: Required by the CMICmdFactory when registering *this command. The
+// factory
// calls this function to create an instance of *this command.
// Type: Static method.
// Args: None.
// Return: CMICmdBase * - Pointer to a new command.
// Throws: None.
//--
-CMICmdBase *
-CMICmdCmdTargetDetach::CreateSelf()
-{
- return new CMICmdCmdTargetDetach();
+CMICmdBase *CMICmdCmdTargetDetach::CreateSelf() {
+ return new CMICmdCmdTargetDetach();
}
Modified: lldb/trunk/tools/lldb-mi/MICmdCmdTarget.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdTarget.h?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdTarget.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdTarget.h Tue Sep 6 15:57:50 2016
@@ -9,108 +9,110 @@
// Overview: CMICmdCmdTargetSelect interface.
//
-// To implement new MI commands derive a new command class from the command base
-// class. To enable the new command for interpretation add the new command class
+// To implement new MI commands derive a new command class from the
+// command base
+// class. To enable the new command for interpretation add the new
+// command class
// to the command factory. The files of relevance are:
// MICmdCommands.cpp
// MICmdBase.h / .cpp
// MICmdCmd.h / .cpp
-// For an introduction to adding a new command see CMICmdCmdSupportInfoMiCmdQuery
+// For an introduction to adding a new command see
+// CMICmdCmdSupportInfoMiCmdQuery
// command class as an example.
#pragma once
// In-house headers:
#include "MICmdBase.h"
-#include "MICmnMIValueTuple.h"
#include "MICmnMIValueList.h"
+#include "MICmnMIValueTuple.h"
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI command class. MI commands derived from the command base class.
// *this class implements MI command "target-select".
// http://sourceware.org/gdb/onlinedocs/gdb/GDB_002fMI-Target-Manipulation.html#GDB_002fMI-Target-Manipulation
//--
-class CMICmdCmdTargetSelect : public CMICmdBase
-{
- // Statics:
- public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
- public:
- /* ctor */ CMICmdCmdTargetSelect();
-
- // Overridden:
- public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdTargetSelect() override;
-
- // Attributes:
- private:
- const CMIUtilString m_constStrArgNamedType;
- const CMIUtilString m_constStrArgNamedParameters;
+class CMICmdCmdTargetSelect : public CMICmdBase {
+ // Statics:
+public:
+ // Required by the CMICmdFactory when registering *this command
+ static CMICmdBase *CreateSelf();
+
+ // Methods:
+public:
+ /* ctor */ CMICmdCmdTargetSelect();
+
+ // Overridden:
+public:
+ // From CMICmdInvoker::ICmd
+ bool Execute() override;
+ bool Acknowledge() override;
+ bool ParseArgs() override;
+ // From CMICmnBase
+ /* dtor */ ~CMICmdCmdTargetSelect() override;
+
+ // Attributes:
+private:
+ const CMIUtilString m_constStrArgNamedType;
+ const CMIUtilString m_constStrArgNamedParameters;
};
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI command class. MI commands derived from the command base class.
// *this class implements MI command "target-attach".
// http://sourceware.org/gdb/onlinedocs/gdb/GDB_002fMI-Target-Manipulation.html#GDB_002fMI-Target-Manipulation
//--
-class CMICmdCmdTargetAttach : public CMICmdBase
-{
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdTargetAttach();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdTargetAttach() override;
-
- // Attributes:
+class CMICmdCmdTargetAttach : public CMICmdBase {
+ // Statics:
+public:
+ // Required by the CMICmdFactory when registering *this command
+ static CMICmdBase *CreateSelf();
+
+ // Methods:
+public:
+ /* ctor */ CMICmdCmdTargetAttach();
+
+ // Overridden:
+public:
+ // From CMICmdInvoker::ICmd
+ bool Execute() override;
+ bool Acknowledge() override;
+ bool ParseArgs() override;
+ // From CMICmnBase
+ /* dtor */ ~CMICmdCmdTargetAttach() override;
+
+ // Attributes:
private:
- const CMIUtilString m_constStrArgPid;
- const CMIUtilString m_constStrArgNamedFile;
- const CMIUtilString m_constStrArgWaitFor;
+ const CMIUtilString m_constStrArgPid;
+ const CMIUtilString m_constStrArgNamedFile;
+ const CMIUtilString m_constStrArgWaitFor;
};
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI command class. MI commands derived from the command base class.
// *this class implements MI command "target-attach".
// http://sourceware.org/gdb/onlinedocs/gdb/GDB_002fMI-Target-Manipulation.html#GDB_002fMI-Target-Manipulation
//--
-class CMICmdCmdTargetDetach : public CMICmdBase
-{
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdTargetDetach();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdTargetDetach() override;
-};
+class CMICmdCmdTargetDetach : public CMICmdBase {
+ // Statics:
+public:
+ // Required by the CMICmdFactory when registering *this command
+ static CMICmdBase *CreateSelf();
+
+ // Methods:
+public:
+ /* ctor */ CMICmdCmdTargetDetach();
+ // Overridden:
+public:
+ // From CMICmdInvoker::ICmd
+ bool Execute() override;
+ bool Acknowledge() override;
+ bool ParseArgs() override;
+ // From CMICmnBase
+ /* dtor */ ~CMICmdCmdTargetDetach() override;
+};
Modified: lldb/trunk/tools/lldb-mi/MICmdCmdThread.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdThread.cpp?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdThread.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdThread.cpp Tue Sep 6 15:57:50 2016
@@ -14,14 +14,15 @@
#include "lldb/API/SBThread.h"
// In-house headers:
+#include "MICmdArgValNumber.h"
#include "MICmdCmdThread.h"
+#include "MICmnLLDBDebugSessionInfo.h"
+#include "MICmnLLDBDebugger.h"
#include "MICmnMIResultRecord.h"
#include "MICmnMIValueConst.h"
-#include "MICmnLLDBDebugger.h"
-#include "MICmnLLDBDebugSessionInfo.h"
-#include "MICmdArgValNumber.h"
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdThreadInfo constructor.
// Type: Method.
// Args: None.
@@ -29,32 +30,29 @@
// Throws: None.
//--
CMICmdCmdThreadInfo::CMICmdCmdThreadInfo()
- : m_bSingleThread(false),
- m_bThreadInvalid(true),
- m_constStrArgNamedThreadId("thread-id"),
- m_bHasCurrentThread(false)
-{
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "thread-info";
+ : m_bSingleThread(false), m_bThreadInvalid(true),
+ m_constStrArgNamedThreadId("thread-id"), m_bHasCurrentThread(false) {
+ // Command factory matches this name with that received from the stdin stream
+ m_strMiCmd = "thread-info";
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdThreadInfo::CreateSelf;
+ // Required by the CMICmdFactory when registering *this command
+ m_pSelfCreatorFn = &CMICmdCmdThreadInfo::CreateSelf;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdThreadInfo destructor.
// Type: Overrideable.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmdCmdThreadInfo::~CMICmdCmdThreadInfo()
-{
- m_vecMIValueTuple.clear();
-}
+CMICmdCmdThreadInfo::~CMICmdCmdThreadInfo() { m_vecMIValueTuple.clear(); }
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The parses the command line options
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The parses the command line
+// options
// arguments to extract values for each of those arguments.
// Type: Overridden.
// Args: None.
@@ -62,83 +60,85 @@ CMICmdCmdThreadInfo::~CMICmdCmdThreadInf
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdThreadInfo::ParseArgs()
-{
- m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgNamedThreadId, false, true));
- return ParseValidateCmdOptions();
+bool CMICmdCmdThreadInfo::ParseArgs() {
+ m_setCmdArgs.Add(
+ new CMICmdArgValNumber(m_constStrArgNamedThreadId, false, true));
+ return ParseValidateCmdOptions();
}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command does work in this function.
-// The command is likely to communicate with the LLDB SBDebugger in here.
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command does work in this
+// function.
+// The command is likely to communicate with the LLDB SBDebugger in
+// here.
// Type: Overridden.
// Args: None.
// Return: MIstatus::success - Functional succeeded.
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdThreadInfo::Execute()
-{
- CMICMDBASE_GETOPTION(pArgThreadId, Number, m_constStrArgNamedThreadId);
- MIuint nThreadId = 0;
- if (pArgThreadId->GetFound() && pArgThreadId->GetValid())
- {
- m_bSingleThread = true;
- nThreadId = static_cast<MIuint>(pArgThreadId->GetValue());
- }
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(CMICmnLLDBDebugSessionInfo::Instance());
- lldb::SBProcess sbProcess = rSessionInfo.GetProcess();
- lldb::SBThread thread = sbProcess.GetSelectedThread();
-
- if (m_bSingleThread)
- {
- thread = sbProcess.GetThreadByIndexID(nThreadId);
- m_bThreadInvalid = !thread.IsValid();
- if (m_bThreadInvalid)
- return MIstatus::success;
-
- CMICmnMIValueTuple miTuple;
- if (!rSessionInfo.MIResponseFormThreadInfo(m_cmdData, thread, CMICmnLLDBDebugSessionInfo::eThreadInfoFormat_AllFrames, miTuple))
- return MIstatus::failure;
-
- m_miValueTupleThread = miTuple;
-
- return MIstatus::success;
- }
-
- // Multiple threads
- m_vecMIValueTuple.clear();
- const MIuint nThreads = sbProcess.GetNumThreads();
- for (MIuint i = 0; i < nThreads; i++)
- {
- lldb::SBThread thread = sbProcess.GetThreadAtIndex(i);
- if (thread.IsValid())
- {
- CMICmnMIValueTuple miTuple;
- if (!rSessionInfo.MIResponseFormThreadInfo(m_cmdData, thread, CMICmnLLDBDebugSessionInfo::eThreadInfoFormat_AllFrames, miTuple))
- return MIstatus::failure;
-
- m_vecMIValueTuple.push_back(miTuple);
- }
- }
+bool CMICmdCmdThreadInfo::Execute() {
+ CMICMDBASE_GETOPTION(pArgThreadId, Number, m_constStrArgNamedThreadId);
+ MIuint nThreadId = 0;
+ if (pArgThreadId->GetFound() && pArgThreadId->GetValid()) {
+ m_bSingleThread = true;
+ nThreadId = static_cast<MIuint>(pArgThreadId->GetValue());
+ }
+
+ CMICmnLLDBDebugSessionInfo &rSessionInfo(
+ CMICmnLLDBDebugSessionInfo::Instance());
+ lldb::SBProcess sbProcess = rSessionInfo.GetProcess();
+ lldb::SBThread thread = sbProcess.GetSelectedThread();
+
+ if (m_bSingleThread) {
+ thread = sbProcess.GetThreadByIndexID(nThreadId);
+ m_bThreadInvalid = !thread.IsValid();
+ if (m_bThreadInvalid)
+ return MIstatus::success;
+
+ CMICmnMIValueTuple miTuple;
+ if (!rSessionInfo.MIResponseFormThreadInfo(
+ m_cmdData, thread,
+ CMICmnLLDBDebugSessionInfo::eThreadInfoFormat_AllFrames, miTuple))
+ return MIstatus::failure;
- // -thread-info with multiple threads ends with the current thread id if any
- if (thread.IsValid())
- {
- const CMIUtilString strId(CMIUtilString::Format("%d", thread.GetIndexID()));
- CMICmnMIValueConst miValueCurrThreadId(strId);
- m_miValueCurrThreadId = miValueCurrThreadId;
- m_bHasCurrentThread = true;
- }
+ m_miValueTupleThread = miTuple;
return MIstatus::success;
-}
+ }
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command prepares a MI Record Result
+ // Multiple threads
+ m_vecMIValueTuple.clear();
+ const MIuint nThreads = sbProcess.GetNumThreads();
+ for (MIuint i = 0; i < nThreads; i++) {
+ lldb::SBThread thread = sbProcess.GetThreadAtIndex(i);
+ if (thread.IsValid()) {
+ CMICmnMIValueTuple miTuple;
+ if (!rSessionInfo.MIResponseFormThreadInfo(
+ m_cmdData, thread,
+ CMICmnLLDBDebugSessionInfo::eThreadInfoFormat_AllFrames, miTuple))
+ return MIstatus::failure;
+
+ m_vecMIValueTuple.push_back(miTuple);
+ }
+ }
+
+ // -thread-info with multiple threads ends with the current thread id if any
+ if (thread.IsValid()) {
+ const CMIUtilString strId(CMIUtilString::Format("%d", thread.GetIndexID()));
+ CMICmnMIValueConst miValueCurrThreadId(strId);
+ m_miValueCurrThreadId = miValueCurrThreadId;
+ m_bHasCurrentThread = true;
+ }
+
+ return MIstatus::success;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command prepares a MI Record
+// Result
// for the work carried out in the Execute().
// Type: Overridden.
// Args: None.
@@ -146,71 +146,73 @@ CMICmdCmdThreadInfo::Execute()
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdThreadInfo::Acknowledge()
-{
- if (m_bSingleThread)
- {
- if (m_bThreadInvalid)
- {
- const CMICmnMIValueConst miValueConst("invalid thread id");
- const CMICmnMIValueResult miValueResult("msg", miValueConst);
- const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error, miValueResult);
- m_miResultRecord = miRecordResult;
- return MIstatus::success;
- }
-
- // MI print "%s^done,threads=[{id=\"%d\",target-id=\"%s\",frame={},state=\"%s\"}]
- const CMICmnMIValueList miValueList(m_miValueTupleThread);
- const CMICmnMIValueResult miValueResult("threads", miValueList);
- const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, miValueResult);
- m_miResultRecord = miRecordResult;
- return MIstatus::success;
- }
-
- // Build up a list of thread information from tuples
- VecMIValueTuple_t::const_iterator it = m_vecMIValueTuple.begin();
- if (it == m_vecMIValueTuple.end())
- {
- const CMICmnMIValueConst miValueConst("[]");
- const CMICmnMIValueResult miValueResult("threads", miValueConst);
- const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, miValueResult);
- m_miResultRecord = miRecordResult;
- return MIstatus::success;
- }
- CMICmnMIValueList miValueList(*it);
- ++it;
- while (it != m_vecMIValueTuple.end())
- {
- const CMICmnMIValueTuple &rTuple(*it);
- miValueList.Add(rTuple);
-
- // Next
- ++it;
- }
-
- CMICmnMIValueResult miValueResult("threads", miValueList);
- if (m_bHasCurrentThread)
- {
- CMIUtilString strCurrThreadId = "current-thread-id";
- miValueResult.Add(strCurrThreadId, m_miValueCurrThreadId);
- }
- const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, miValueResult);
+bool CMICmdCmdThreadInfo::Acknowledge() {
+ if (m_bSingleThread) {
+ if (m_bThreadInvalid) {
+ const CMICmnMIValueConst miValueConst("invalid thread id");
+ const CMICmnMIValueResult miValueResult("msg", miValueConst);
+ const CMICmnMIResultRecord miRecordResult(
+ m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error,
+ miValueResult);
+ m_miResultRecord = miRecordResult;
+ return MIstatus::success;
+ }
+
+ // MI print
+ // "%s^done,threads=[{id=\"%d\",target-id=\"%s\",frame={},state=\"%s\"}]
+ const CMICmnMIValueList miValueList(m_miValueTupleThread);
+ const CMICmnMIValueResult miValueResult("threads", miValueList);
+ const CMICmnMIResultRecord miRecordResult(
+ m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
+ miValueResult);
m_miResultRecord = miRecordResult;
+ return MIstatus::success;
+ }
+ // Build up a list of thread information from tuples
+ VecMIValueTuple_t::const_iterator it = m_vecMIValueTuple.begin();
+ if (it == m_vecMIValueTuple.end()) {
+ const CMICmnMIValueConst miValueConst("[]");
+ const CMICmnMIValueResult miValueResult("threads", miValueConst);
+ const CMICmnMIResultRecord miRecordResult(
+ m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
+ miValueResult);
+ m_miResultRecord = miRecordResult;
return MIstatus::success;
-}
+ }
+ CMICmnMIValueList miValueList(*it);
+ ++it;
+ while (it != m_vecMIValueTuple.end()) {
+ const CMICmnMIValueTuple &rTuple(*it);
+ miValueList.Add(rTuple);
+
+ // Next
+ ++it;
+ }
-//++ ------------------------------------------------------------------------------------
-// Details: Required by the CMICmdFactory when registering *this command. The factory
+ CMICmnMIValueResult miValueResult("threads", miValueList);
+ if (m_bHasCurrentThread) {
+ CMIUtilString strCurrThreadId = "current-thread-id";
+ miValueResult.Add(strCurrThreadId, m_miValueCurrThreadId);
+ }
+ const CMICmnMIResultRecord miRecordResult(
+ m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
+ miValueResult);
+ m_miResultRecord = miRecordResult;
+
+ return MIstatus::success;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: Required by the CMICmdFactory when registering *this command. The
+// factory
// calls this function to create an instance of *this command.
// Type: Static method.
// Args: None.
// Return: CMICmdBase * - Pointer to a new command.
// Throws: None.
//--
-CMICmdBase *
-CMICmdCmdThreadInfo::CreateSelf()
-{
- return new CMICmdCmdThreadInfo();
+CMICmdBase *CMICmdCmdThreadInfo::CreateSelf() {
+ return new CMICmdCmdThreadInfo();
}
Modified: lldb/trunk/tools/lldb-mi/MICmdCmdThread.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdThread.h?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdThread.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdThread.h Tue Sep 6 15:57:50 2016
@@ -9,59 +9,62 @@
// Overview: CMICmdCmdThreadInfo interface.
//
-// To implement new MI commands derive a new command class from the command base
-// class. To enable the new command for interpretation add the new command class
+// To implement new MI commands derive a new command class from the
+// command base
+// class. To enable the new command for interpretation add the new
+// command class
// to the command factory. The files of relevance are:
// MICmdCommands.cpp
// MICmdBase.h / .cpp
// MICmdCmd.h / .cpp
-// For an introduction to adding a new command see CMICmdCmdSupportInfoMiCmdQuery
+// For an introduction to adding a new command see
+// CMICmdCmdSupportInfoMiCmdQuery
// command class as an example.
#pragma once
// In-house headers:
#include "MICmdBase.h"
-#include "MICmnMIValueTuple.h"
#include "MICmnMIValueList.h"
+#include "MICmnMIValueTuple.h"
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI command class. MI commands derived from the command base class.
// *this class implements MI command "thread-info".
//--
-class CMICmdCmdThreadInfo : public CMICmdBase
-{
- // Statics:
- public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
- public:
- /* ctor */ CMICmdCmdThreadInfo();
-
- // Overridden:
- public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdThreadInfo() override;
-
- // Typedefs:
- private:
- typedef std::vector<CMICmnMIValueTuple> VecMIValueTuple_t;
-
- // Attributes:
- private:
- CMICmnMIValueTuple m_miValueTupleThread;
- bool m_bSingleThread; // True = yes single thread, false = multiple threads
- bool m_bThreadInvalid; // True = invalid, false = ok
- VecMIValueTuple_t m_vecMIValueTuple;
- const CMIUtilString m_constStrArgNamedThreadId;
-
- // mi value of current-thread-id if multiple threads are requested
- bool m_bHasCurrentThread;
- CMICmnMIValue m_miValueCurrThreadId;
+class CMICmdCmdThreadInfo : public CMICmdBase {
+ // Statics:
+public:
+ // Required by the CMICmdFactory when registering *this command
+ static CMICmdBase *CreateSelf();
+
+ // Methods:
+public:
+ /* ctor */ CMICmdCmdThreadInfo();
+
+ // Overridden:
+public:
+ // From CMICmdInvoker::ICmd
+ bool Execute() override;
+ bool Acknowledge() override;
+ bool ParseArgs() override;
+ // From CMICmnBase
+ /* dtor */ ~CMICmdCmdThreadInfo() override;
+
+ // Typedefs:
+private:
+ typedef std::vector<CMICmnMIValueTuple> VecMIValueTuple_t;
+
+ // Attributes:
+private:
+ CMICmnMIValueTuple m_miValueTupleThread;
+ bool m_bSingleThread; // True = yes single thread, false = multiple threads
+ bool m_bThreadInvalid; // True = invalid, false = ok
+ VecMIValueTuple_t m_vecMIValueTuple;
+ const CMIUtilString m_constStrArgNamedThreadId;
+
+ // mi value of current-thread-id if multiple threads are requested
+ bool m_bHasCurrentThread;
+ CMICmnMIValue m_miValueCurrThreadId;
};
Modified: lldb/trunk/tools/lldb-mi/MICmdCmdTrace.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdTrace.cpp?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdTrace.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdTrace.cpp Tue Sep 6 15:57:50 2016
@@ -14,51 +14,53 @@
#include "MICmnMIResultRecord.h"
#include "MICmnMIValueConst.h"
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdTraceStatus constructor.
// Type: Method.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmdCmdTraceStatus::CMICmdCmdTraceStatus()
-{
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "trace-status";
+CMICmdCmdTraceStatus::CMICmdCmdTraceStatus() {
+ // Command factory matches this name with that received from the stdin stream
+ m_strMiCmd = "trace-status";
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdTraceStatus::CreateSelf;
+ // Required by the CMICmdFactory when registering *this command
+ m_pSelfCreatorFn = &CMICmdCmdTraceStatus::CreateSelf;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdTraceStatus destructor.
// Type: Overrideable.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmdCmdTraceStatus::~CMICmdCmdTraceStatus()
-{
-}
+CMICmdCmdTraceStatus::~CMICmdCmdTraceStatus() {}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command does work in this function.
-// The command is likely to communicate with the LLDB SBDebugger in here.
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command does work in this
+// function.
+// The command is likely to communicate with the LLDB SBDebugger in
+// here.
// Type: Overridden.
// Args: None.
// Return: MIstatus::success - Functional succeeded.
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdTraceStatus::Execute()
-{
- // Do nothing
- return MIstatus::success;
+bool CMICmdCmdTraceStatus::Execute() {
+ // Do nothing
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command prepares a MI Record Result
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command prepares a MI Record
+// Result
// for the work carried out in the Execute().
// Type: Overridden.
// Args: None.
@@ -66,27 +68,27 @@ CMICmdCmdTraceStatus::Execute()
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdTraceStatus::Acknowledge()
-{
- const CMICmnMIValueConst miValueConst(MIRSRC(IDS_CMD_ERR_NOT_IMPLEMENTED));
- const CMICmnMIValueResult miValueResult("msg", miValueConst);
- const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error, miValueResult);
- m_miResultRecord = miRecordResult;
+bool CMICmdCmdTraceStatus::Acknowledge() {
+ const CMICmnMIValueConst miValueConst(MIRSRC(IDS_CMD_ERR_NOT_IMPLEMENTED));
+ const CMICmnMIValueResult miValueResult("msg", miValueConst);
+ const CMICmnMIResultRecord miRecordResult(
+ m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error,
+ miValueResult);
+ m_miResultRecord = miRecordResult;
- return MIstatus::success;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
-// Details: Required by the CMICmdFactory when registering *this command. The factory
+//++
+//------------------------------------------------------------------------------------
+// Details: Required by the CMICmdFactory when registering *this command. The
+// factory
// calls this function to create an instance of *this command.
// Type: Static method.
// Args: None.
// Return: CMICmdBase * - Pointer to a new command.
// Throws: None.
//--
-CMICmdBase *
-CMICmdCmdTraceStatus::CreateSelf()
-{
- return new CMICmdCmdTraceStatus();
+CMICmdBase *CMICmdCmdTraceStatus::CreateSelf() {
+ return new CMICmdCmdTraceStatus();
}
Modified: lldb/trunk/tools/lldb-mi/MICmdCmdTrace.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdTrace.h?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdTrace.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdTrace.h Tue Sep 6 15:57:50 2016
@@ -9,13 +9,16 @@
// Overview: CMICmdCmdTraceStatus interface.
//
-// To implement new MI commands derive a new command class from the command base
-// class. To enable the new command for interpretation add the new command class
+// To implement new MI commands derive a new command class from the
+// command base
+// class. To enable the new command for interpretation add the new
+// command class
// to the command factory. The files of relevance are:
// MICmdCommands.cpp
// MICmdBase.h / .cpp
// MICmdCmd.h / .cpp
-// For an introduction to adding a new command see CMICmdCmdSupportInfoMiCmdQuery
+// For an introduction to adding a new command see
+// CMICmdCmdSupportInfoMiCmdQuery
// command class as an example.
#pragma once
@@ -23,26 +26,26 @@
// In-house headers:
#include "MICmdBase.h"
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI command class. MI commands derived from the command base class.
// *this class implements MI command "trace-status".
//--
-class CMICmdCmdTraceStatus : public CMICmdBase
-{
- // Statics:
- public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
- public:
- /* ctor */ CMICmdCmdTraceStatus();
-
- // Overridden:
- public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdTraceStatus() override;
+class CMICmdCmdTraceStatus : public CMICmdBase {
+ // Statics:
+public:
+ // Required by the CMICmdFactory when registering *this command
+ static CMICmdBase *CreateSelf();
+
+ // Methods:
+public:
+ /* ctor */ CMICmdCmdTraceStatus();
+
+ // Overridden:
+public:
+ // From CMICmdInvoker::ICmd
+ bool Execute() override;
+ bool Acknowledge() override;
+ // From CMICmnBase
+ /* dtor */ ~CMICmdCmdTraceStatus() override;
};
Modified: lldb/trunk/tools/lldb-mi/MICmdCmdVar.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdVar.cpp?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdVar.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdVar.cpp Tue Sep 6 15:57:50 2016
@@ -19,26 +19,27 @@
// Third Party Headers:
#include "lldb/API/SBStream.h"
-#include "lldb/API/SBType.h"
#include "lldb/API/SBThread.h"
+#include "lldb/API/SBType.h"
// In-house headers:
-#include "MICmdCmdVar.h"
-#include "MICmnMIResultRecord.h"
-#include "MICmnMIValueConst.h"
-#include "MICmnLLDBDebugger.h"
-#include "MICmnLLDBDebugSessionInfo.h"
+#include "MICmdArgValListOfN.h"
#include "MICmdArgValNumber.h"
-#include "MICmdArgValString.h"
-#include "MICmdArgValThreadGrp.h"
#include "MICmdArgValOptionLong.h"
#include "MICmdArgValOptionShort.h"
#include "MICmdArgValPrintValues.h"
-#include "MICmdArgValListOfN.h"
+#include "MICmdArgValString.h"
+#include "MICmdArgValThreadGrp.h"
+#include "MICmdCmdVar.h"
+#include "MICmnLLDBDebugSessionInfo.h"
+#include "MICmnLLDBDebugger.h"
#include "MICmnLLDBProxySBValue.h"
#include "MICmnLLDBUtilSBValue.h"
+#include "MICmnMIResultRecord.h"
+#include "MICmnMIValueConst.h"
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdVarCreate constructor.
// Type: Method.
// Args: None.
@@ -46,35 +47,31 @@
// Throws: None.
//--
CMICmdCmdVarCreate::CMICmdCmdVarCreate()
- : m_nChildren(0)
- , m_nThreadId(0)
- , m_strType("??")
- , m_bValid(false)
- , m_strValue("??")
- , m_constStrArgName("name")
- , m_constStrArgFrameAddr("frame-addr")
- , m_constStrArgExpression("expression")
-{
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "var-create";
+ : m_nChildren(0), m_nThreadId(0), m_strType("??"), m_bValid(false),
+ m_strValue("??"), m_constStrArgName("name"),
+ m_constStrArgFrameAddr("frame-addr"),
+ m_constStrArgExpression("expression") {
+ // Command factory matches this name with that received from the stdin stream
+ m_strMiCmd = "var-create";
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdVarCreate::CreateSelf;
+ // Required by the CMICmdFactory when registering *this command
+ m_pSelfCreatorFn = &CMICmdCmdVarCreate::CreateSelf;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdVarCreate destructor.
// Type: Overrideable.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmdCmdVarCreate::~CMICmdCmdVarCreate()
-{
-}
+CMICmdCmdVarCreate::~CMICmdCmdVarCreate() {}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The parses the command line options
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The parses the command line
+// options
// arguments to extract values for each of those arguments.
// Type: Overridden.
// Args: None.
@@ -82,133 +79,140 @@ CMICmdCmdVarCreate::~CMICmdCmdVarCreate(
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdVarCreate::ParseArgs()
-{
- m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgName, false, true));
- m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgFrameAddr, false, true));
- m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgExpression, true, true, true, true));
- return ParseValidateCmdOptions();
-}
-
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command does work in this function.
-// The command is likely to communicate with the LLDB SBDebugger in here.
+bool CMICmdCmdVarCreate::ParseArgs() {
+ m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgName, false, true));
+ m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgFrameAddr, false, true));
+ m_setCmdArgs.Add(
+ new CMICmdArgValString(m_constStrArgExpression, true, true, true, true));
+ return ParseValidateCmdOptions();
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command does work in this
+// function.
+// The command is likely to communicate with the LLDB SBDebugger in
+// here.
// Type: Overridden.
// Args: None.
// Return: MIstatus::success - Functional succeeded.
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdVarCreate::Execute()
-{
- CMICMDBASE_GETOPTION(pArgThread, OptionLong, m_constStrArgThread);
- CMICMDBASE_GETOPTION(pArgFrame, OptionLong, m_constStrArgFrame);
- CMICMDBASE_GETOPTION(pArgName, String, m_constStrArgName);
- CMICMDBASE_GETOPTION(pArgFrameAddr, String, m_constStrArgFrameAddr);
- CMICMDBASE_GETOPTION(pArgExpression, String, m_constStrArgExpression);
-
- // Retrieve the --thread option's thread ID (only 1)
- MIuint64 nThreadId = UINT64_MAX;
- if (pArgThread->GetFound() && !pArgThread->GetExpectedOption<CMICmdArgValNumber, MIuint64>(nThreadId))
- {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_OPTION_NOT_FOUND), m_cmdData.strMiCmd.c_str(), m_constStrArgThread.c_str()));
- return MIstatus::failure;
- }
-
- // Retrieve the --frame option's number
- MIuint64 nFrame = UINT64_MAX;
- if (pArgThread->GetFound() && !pArgFrame->GetExpectedOption<CMICmdArgValNumber, MIuint64>(nFrame))
- {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_OPTION_NOT_FOUND), m_cmdData.strMiCmd.c_str(), m_constStrArgFrame.c_str()));
- return MIstatus::failure;
- }
-
- const CMICmdArgValOptionLong::VecArgObjPtr_t &rVecFrameId(pArgFrame->GetExpectedOptions());
- CMICmdArgValOptionLong::VecArgObjPtr_t::const_iterator it2 = rVecFrameId.begin();
- if (it2 != rVecFrameId.end())
- {
- const CMICmdArgValNumber *pOption = static_cast<CMICmdArgValNumber *>(*it2);
- nFrame = pOption->GetValue();
- }
-
- m_strVarName = "<unnamedvariable>";
- if (pArgName->GetFound())
- {
- const CMIUtilString &rArg = pArgName->GetValue();
- const bool bAutoName = (rArg == "-");
- if (bAutoName)
- {
- m_strVarName = CMIUtilString::Format("var%u", CMICmnLLDBDebugSessionInfoVarObj::VarObjIdGet());
- CMICmnLLDBDebugSessionInfoVarObj::VarObjIdInc();
- }
- else
- m_strVarName = rArg;
- }
-
- bool bCurrentFrame = false;
- if (pArgFrameAddr->GetFound())
- {
- const CMIUtilString &rStrFrameAddr(pArgFrameAddr->GetValue());
- bCurrentFrame = CMIUtilString::Compare(rStrFrameAddr, "*");
- if (!bCurrentFrame && (nFrame == UINT64_MAX))
- {
- //FIXME: *addr isn't implemented. Exit with error if --thread isn't specified.
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_OPTION_NOT_FOUND), m_cmdData.strMiCmd.c_str(), m_constStrArgFrame.c_str()));
- return MIstatus::failure;
- }
- }
-
- const CMIUtilString &rStrExpression(pArgExpression->GetValue());
- m_strExpression = rStrExpression;
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(CMICmnLLDBDebugSessionInfo::Instance());
- lldb::SBProcess sbProcess = rSessionInfo.GetProcess();
- lldb::SBThread thread = (nThreadId != UINT64_MAX) ? sbProcess.GetThreadByIndexID(nThreadId) : sbProcess.GetSelectedThread();
- m_nThreadId = thread.GetIndexID();
- lldb::SBFrame frame = bCurrentFrame ? thread.GetSelectedFrame() : thread.GetFrameAtIndex(nFrame);
- lldb::SBValue value;
-
- if (rStrExpression[0] == '$')
- {
- const CMIUtilString rStrRegister(rStrExpression.substr(1));
- value = frame.FindRegister(rStrRegister.c_str());
- }
- else
- {
- const bool bArgs = true;
- const bool bLocals = true;
- const bool bStatics = true;
- const bool bInScopeOnly = false;
- const lldb::SBValueList valueList = frame.GetVariables(bArgs, bLocals, bStatics, bInScopeOnly);
- value = valueList.GetFirstValueByName(rStrExpression.c_str());
- }
-
- if (!value.IsValid())
- value = frame.EvaluateExpression(rStrExpression.c_str());
-
- if (value.IsValid() && value.GetError().Success())
- {
- CompleteSBValue(value);
- m_bValid = true;
- m_nChildren = value.GetNumChildren();
- m_strType = CMICmnLLDBUtilSBValue(value).GetTypeNameDisplay();
-
- // This gets added to CMICmnLLDBDebugSessionInfoVarObj static container of varObjs
- CMICmnLLDBDebugSessionInfoVarObj varObj(rStrExpression, m_strVarName, value);
- m_strValue = varObj.GetValueFormatted();
- }
- else
- {
- m_strValue = value.GetError().GetCString();
- }
-
- return MIstatus::success;
-}
-
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command prepares a MI Record Result
+bool CMICmdCmdVarCreate::Execute() {
+ CMICMDBASE_GETOPTION(pArgThread, OptionLong, m_constStrArgThread);
+ CMICMDBASE_GETOPTION(pArgFrame, OptionLong, m_constStrArgFrame);
+ CMICMDBASE_GETOPTION(pArgName, String, m_constStrArgName);
+ CMICMDBASE_GETOPTION(pArgFrameAddr, String, m_constStrArgFrameAddr);
+ CMICMDBASE_GETOPTION(pArgExpression, String, m_constStrArgExpression);
+
+ // Retrieve the --thread option's thread ID (only 1)
+ MIuint64 nThreadId = UINT64_MAX;
+ if (pArgThread->GetFound() &&
+ !pArgThread->GetExpectedOption<CMICmdArgValNumber, MIuint64>(nThreadId)) {
+ SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_OPTION_NOT_FOUND),
+ m_cmdData.strMiCmd.c_str(),
+ m_constStrArgThread.c_str()));
+ return MIstatus::failure;
+ }
+
+ // Retrieve the --frame option's number
+ MIuint64 nFrame = UINT64_MAX;
+ if (pArgThread->GetFound() &&
+ !pArgFrame->GetExpectedOption<CMICmdArgValNumber, MIuint64>(nFrame)) {
+ SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_OPTION_NOT_FOUND),
+ m_cmdData.strMiCmd.c_str(),
+ m_constStrArgFrame.c_str()));
+ return MIstatus::failure;
+ }
+
+ const CMICmdArgValOptionLong::VecArgObjPtr_t &rVecFrameId(
+ pArgFrame->GetExpectedOptions());
+ CMICmdArgValOptionLong::VecArgObjPtr_t::const_iterator it2 =
+ rVecFrameId.begin();
+ if (it2 != rVecFrameId.end()) {
+ const CMICmdArgValNumber *pOption = static_cast<CMICmdArgValNumber *>(*it2);
+ nFrame = pOption->GetValue();
+ }
+
+ m_strVarName = "<unnamedvariable>";
+ if (pArgName->GetFound()) {
+ const CMIUtilString &rArg = pArgName->GetValue();
+ const bool bAutoName = (rArg == "-");
+ if (bAutoName) {
+ m_strVarName = CMIUtilString::Format(
+ "var%u", CMICmnLLDBDebugSessionInfoVarObj::VarObjIdGet());
+ CMICmnLLDBDebugSessionInfoVarObj::VarObjIdInc();
+ } else
+ m_strVarName = rArg;
+ }
+
+ bool bCurrentFrame = false;
+ if (pArgFrameAddr->GetFound()) {
+ const CMIUtilString &rStrFrameAddr(pArgFrameAddr->GetValue());
+ bCurrentFrame = CMIUtilString::Compare(rStrFrameAddr, "*");
+ if (!bCurrentFrame && (nFrame == UINT64_MAX)) {
+ // FIXME: *addr isn't implemented. Exit with error if --thread isn't
+ // specified.
+ SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_OPTION_NOT_FOUND),
+ m_cmdData.strMiCmd.c_str(),
+ m_constStrArgFrame.c_str()));
+ return MIstatus::failure;
+ }
+ }
+
+ const CMIUtilString &rStrExpression(pArgExpression->GetValue());
+ m_strExpression = rStrExpression;
+
+ CMICmnLLDBDebugSessionInfo &rSessionInfo(
+ CMICmnLLDBDebugSessionInfo::Instance());
+ lldb::SBProcess sbProcess = rSessionInfo.GetProcess();
+ lldb::SBThread thread = (nThreadId != UINT64_MAX)
+ ? sbProcess.GetThreadByIndexID(nThreadId)
+ : sbProcess.GetSelectedThread();
+ m_nThreadId = thread.GetIndexID();
+ lldb::SBFrame frame = bCurrentFrame ? thread.GetSelectedFrame()
+ : thread.GetFrameAtIndex(nFrame);
+ lldb::SBValue value;
+
+ if (rStrExpression[0] == '$') {
+ const CMIUtilString rStrRegister(rStrExpression.substr(1));
+ value = frame.FindRegister(rStrRegister.c_str());
+ } else {
+ const bool bArgs = true;
+ const bool bLocals = true;
+ const bool bStatics = true;
+ const bool bInScopeOnly = false;
+ const lldb::SBValueList valueList =
+ frame.GetVariables(bArgs, bLocals, bStatics, bInScopeOnly);
+ value = valueList.GetFirstValueByName(rStrExpression.c_str());
+ }
+
+ if (!value.IsValid())
+ value = frame.EvaluateExpression(rStrExpression.c_str());
+
+ if (value.IsValid() && value.GetError().Success()) {
+ CompleteSBValue(value);
+ m_bValid = true;
+ m_nChildren = value.GetNumChildren();
+ m_strType = CMICmnLLDBUtilSBValue(value).GetTypeNameDisplay();
+
+ // This gets added to CMICmnLLDBDebugSessionInfoVarObj static container of
+ // varObjs
+ CMICmnLLDBDebugSessionInfoVarObj varObj(rStrExpression, m_strVarName,
+ value);
+ m_strValue = varObj.GetValueFormatted();
+ } else {
+ m_strValue = value.GetError().GetCString();
+ }
+
+ return MIstatus::success;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command prepares a MI Record
+// Result
// for the work carried out in the Execute().
// Type: Overridden.
// Args: None.
@@ -216,60 +220,66 @@ CMICmdCmdVarCreate::Execute()
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdVarCreate::Acknowledge()
-{
- if (m_bValid)
- {
- // MI print "%s^done,name=\"%s\",numchild=\"%d\",value=\"%s\",type=\"%s\",thread-id=\"%llu\",has_more=\"%u\""
- const CMICmnMIValueConst miValueConst(m_strVarName);
- CMICmnMIValueResult miValueResultAll("name", miValueConst);
- const CMIUtilString strNumChild(CMIUtilString::Format("%d", m_nChildren));
- const CMICmnMIValueConst miValueConst2(strNumChild);
- miValueResultAll.Add("numchild", miValueConst2);
- const CMICmnMIValueConst miValueConst3(m_strValue);
- miValueResultAll.Add("value", miValueConst3);
- const CMICmnMIValueConst miValueConst4(m_strType);
- miValueResultAll.Add("type", miValueConst4);
- const CMIUtilString strThreadId(CMIUtilString::Format("%llu", m_nThreadId));
- const CMICmnMIValueConst miValueConst5(strThreadId);
- miValueResultAll.Add("thread-id", miValueConst5);
- const CMICmnMIValueConst miValueConst6("0");
- miValueResultAll.Add("has_more", miValueConst6);
-
- const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, miValueResultAll);
- m_miResultRecord = miRecordResult;
-
- return MIstatus::success;
- }
-
- CMIUtilString strErrMsg(m_strValue);
- if (m_strValue.empty())
- strErrMsg = CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_VARIABLE_CREATION_FAILED), m_strExpression.c_str());
- const CMICmnMIValueConst miValueConst(strErrMsg.Escape(true /* vbEscapeQuotes */));
- CMICmnMIValueResult miValueResult("msg", miValueConst);
- const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error, miValueResult);
+bool CMICmdCmdVarCreate::Acknowledge() {
+ if (m_bValid) {
+ // MI print
+ // "%s^done,name=\"%s\",numchild=\"%d\",value=\"%s\",type=\"%s\",thread-id=\"%llu\",has_more=\"%u\""
+ const CMICmnMIValueConst miValueConst(m_strVarName);
+ CMICmnMIValueResult miValueResultAll("name", miValueConst);
+ const CMIUtilString strNumChild(CMIUtilString::Format("%d", m_nChildren));
+ const CMICmnMIValueConst miValueConst2(strNumChild);
+ miValueResultAll.Add("numchild", miValueConst2);
+ const CMICmnMIValueConst miValueConst3(m_strValue);
+ miValueResultAll.Add("value", miValueConst3);
+ const CMICmnMIValueConst miValueConst4(m_strType);
+ miValueResultAll.Add("type", miValueConst4);
+ const CMIUtilString strThreadId(CMIUtilString::Format("%llu", m_nThreadId));
+ const CMICmnMIValueConst miValueConst5(strThreadId);
+ miValueResultAll.Add("thread-id", miValueConst5);
+ const CMICmnMIValueConst miValueConst6("0");
+ miValueResultAll.Add("has_more", miValueConst6);
+
+ const CMICmnMIResultRecord miRecordResult(
+ m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
+ miValueResultAll);
m_miResultRecord = miRecordResult;
return MIstatus::success;
-}
+ }
-//++ ------------------------------------------------------------------------------------
-// Details: Required by the CMICmdFactory when registering *this command. The factory
+ CMIUtilString strErrMsg(m_strValue);
+ if (m_strValue.empty())
+ strErrMsg = CMIUtilString::Format(
+ MIRSRC(IDS_CMD_ERR_VARIABLE_CREATION_FAILED), m_strExpression.c_str());
+ const CMICmnMIValueConst miValueConst(
+ strErrMsg.Escape(true /* vbEscapeQuotes */));
+ CMICmnMIValueResult miValueResult("msg", miValueConst);
+ const CMICmnMIResultRecord miRecordResult(
+ m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error,
+ miValueResult);
+ m_miResultRecord = miRecordResult;
+
+ return MIstatus::success;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: Required by the CMICmdFactory when registering *this command. The
+// factory
// calls this function to create an instance of *this command.
// Type: Static method.
// Args: None.
// Return: CMICmdBase * - Pointer to a new command.
// Throws: None.
//--
-CMICmdBase *
-CMICmdCmdVarCreate::CreateSelf()
-{
- return new CMICmdCmdVarCreate();
+CMICmdBase *CMICmdCmdVarCreate::CreateSelf() {
+ return new CMICmdCmdVarCreate();
}
-//++ ------------------------------------------------------------------------------------
-// Details: Complete SBValue object and its children to get SBValue::GetValueDidChange
+//++
+//------------------------------------------------------------------------------------
+// Details: Complete SBValue object and its children to get
+// SBValue::GetValueDidChange
// work.
// Type: Method.
// Args: vrwValue - (R) Value to update.
@@ -277,31 +287,28 @@ CMICmdCmdVarCreate::CreateSelf()
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-void
-CMICmdCmdVarCreate::CompleteSBValue(lldb::SBValue &vrwValue)
-{
- // Force a value to update
- vrwValue.GetValueDidChange();
-
- // And update its children
- lldb::SBType valueType = vrwValue.GetType();
- if (!valueType.IsPointerType() && !valueType.IsReferenceType())
- {
- const MIuint nChildren = vrwValue.GetNumChildren();
- for (MIuint i = 0; i < nChildren; ++i)
- {
- lldb::SBValue member = vrwValue.GetChildAtIndex(i);
- if (member.IsValid())
- CompleteSBValue(member);
- }
+void CMICmdCmdVarCreate::CompleteSBValue(lldb::SBValue &vrwValue) {
+ // Force a value to update
+ vrwValue.GetValueDidChange();
+
+ // And update its children
+ lldb::SBType valueType = vrwValue.GetType();
+ if (!valueType.IsPointerType() && !valueType.IsReferenceType()) {
+ const MIuint nChildren = vrwValue.GetNumChildren();
+ for (MIuint i = 0; i < nChildren; ++i) {
+ lldb::SBValue member = vrwValue.GetChildAtIndex(i);
+ if (member.IsValid())
+ CompleteSBValue(member);
}
+ }
}
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdVarUpdate constructor.
// Type: Method.
// Args: None.
@@ -309,31 +316,29 @@ CMICmdCmdVarCreate::CompleteSBValue(lldb
// Throws: None.
//--
CMICmdCmdVarUpdate::CMICmdCmdVarUpdate()
- : m_constStrArgPrintValues("print-values")
- , m_constStrArgName("name")
- , m_bValueChanged(false)
- , m_miValueList(true)
-{
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "var-update";
+ : m_constStrArgPrintValues("print-values"), m_constStrArgName("name"),
+ m_bValueChanged(false), m_miValueList(true) {
+ // Command factory matches this name with that received from the stdin stream
+ m_strMiCmd = "var-update";
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdVarUpdate::CreateSelf;
+ // Required by the CMICmdFactory when registering *this command
+ m_pSelfCreatorFn = &CMICmdCmdVarUpdate::CreateSelf;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdVarUpdate destructor.
// Type: Overrideable.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmdCmdVarUpdate::~CMICmdCmdVarUpdate()
-{
-}
+CMICmdCmdVarUpdate::~CMICmdCmdVarUpdate() {}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The parses the command line options
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The parses the command line
+// options
// arguments to extract values for each of those arguments.
// Type: Overridden.
// Args: None.
@@ -341,60 +346,70 @@ CMICmdCmdVarUpdate::~CMICmdCmdVarUpdate(
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdVarUpdate::ParseArgs()
-{
- m_setCmdArgs.Add(new CMICmdArgValPrintValues(m_constStrArgPrintValues, false, true));
- m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgName, true, true));
- return ParseValidateCmdOptions();
+bool CMICmdCmdVarUpdate::ParseArgs() {
+ m_setCmdArgs.Add(
+ new CMICmdArgValPrintValues(m_constStrArgPrintValues, false, true));
+ m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgName, true, true));
+ return ParseValidateCmdOptions();
}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command does work in this function.
-// The command is likely to communicate with the LLDB SBDebugger in here.
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command does work in this
+// function.
+// The command is likely to communicate with the LLDB SBDebugger in
+// here.
// Type: Overridden.
// Args: None.
// Return: MIstatus::success - Functional succeeded.
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdVarUpdate::Execute()
-{
- CMICMDBASE_GETOPTION(pArgPrintValues, PrintValues, m_constStrArgPrintValues);
- CMICMDBASE_GETOPTION(pArgName, String, m_constStrArgName);
-
- CMICmnLLDBDebugSessionInfo::VariableInfoFormat_e eVarInfoFormat = CMICmnLLDBDebugSessionInfo::eVariableInfoFormat_NoValues;
- if (pArgPrintValues->GetFound())
- eVarInfoFormat = static_cast<CMICmnLLDBDebugSessionInfo::VariableInfoFormat_e>(pArgPrintValues->GetValue());
+bool CMICmdCmdVarUpdate::Execute() {
+ CMICMDBASE_GETOPTION(pArgPrintValues, PrintValues, m_constStrArgPrintValues);
+ CMICMDBASE_GETOPTION(pArgName, String, m_constStrArgName);
- const CMIUtilString &rVarObjName(pArgName->GetValue());
- CMICmnLLDBDebugSessionInfoVarObj varObj;
- if (!CMICmnLLDBDebugSessionInfoVarObj::VarObjGet(rVarObjName, varObj))
- {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_VARIABLE_DOESNOTEXIST), m_cmdData.strMiCmd.c_str(), rVarObjName.c_str()));
- return MIstatus::failure;
- }
+ CMICmnLLDBDebugSessionInfo::VariableInfoFormat_e eVarInfoFormat =
+ CMICmnLLDBDebugSessionInfo::eVariableInfoFormat_NoValues;
+ if (pArgPrintValues->GetFound())
+ eVarInfoFormat =
+ static_cast<CMICmnLLDBDebugSessionInfo::VariableInfoFormat_e>(
+ pArgPrintValues->GetValue());
- lldb::SBValue &rValue = varObj.GetValue();
- if (!ExamineSBValueForChange(rValue, m_bValueChanged))
- return MIstatus::failure;
-
- if (m_bValueChanged)
- {
- varObj.UpdateValue();
- const bool bPrintValue((eVarInfoFormat == CMICmnLLDBDebugSessionInfo::eVariableInfoFormat_AllValues) ||
- (eVarInfoFormat == CMICmnLLDBDebugSessionInfo::eVariableInfoFormat_SimpleValues && rValue.GetNumChildren() == 0));
- const CMIUtilString strValue(bPrintValue ? varObj.GetValueFormatted() : "");
- const CMIUtilString strInScope(rValue.IsInScope() ? "true" : "false");
- MIFormResponse(rVarObjName, bPrintValue ? strValue.c_str() : nullptr, strInScope);
- }
+ const CMIUtilString &rVarObjName(pArgName->GetValue());
+ CMICmnLLDBDebugSessionInfoVarObj varObj;
+ if (!CMICmnLLDBDebugSessionInfoVarObj::VarObjGet(rVarObjName, varObj)) {
+ SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_VARIABLE_DOESNOTEXIST),
+ m_cmdData.strMiCmd.c_str(),
+ rVarObjName.c_str()));
+ return MIstatus::failure;
+ }
- return MIstatus::success;
-}
+ lldb::SBValue &rValue = varObj.GetValue();
+ if (!ExamineSBValueForChange(rValue, m_bValueChanged))
+ return MIstatus::failure;
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command prepares a MI Record Result
+ if (m_bValueChanged) {
+ varObj.UpdateValue();
+ const bool bPrintValue(
+ (eVarInfoFormat ==
+ CMICmnLLDBDebugSessionInfo::eVariableInfoFormat_AllValues) ||
+ (eVarInfoFormat ==
+ CMICmnLLDBDebugSessionInfo::eVariableInfoFormat_SimpleValues &&
+ rValue.GetNumChildren() == 0));
+ const CMIUtilString strValue(bPrintValue ? varObj.GetValueFormatted() : "");
+ const CMIUtilString strInScope(rValue.IsInScope() ? "true" : "false");
+ MIFormResponse(rVarObjName, bPrintValue ? strValue.c_str() : nullptr,
+ strInScope);
+ }
+
+ return MIstatus::success;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command prepares a MI Record
+// Result
// for the work carried out in the Execute().
// Type: Overridden.
// Args: None.
@@ -402,77 +417,80 @@ CMICmdCmdVarUpdate::Execute()
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdVarUpdate::Acknowledge()
-{
- if (m_bValueChanged)
- {
- // MI print "%s^done,changelist=[{name=\"%s\",value=\"%s\",in_scope=\"%s\",type_changed=\"false\",has_more=\"0\"}]"
- CMICmnMIValueResult miValueResult("changelist", m_miValueList);
- const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, miValueResult);
- m_miResultRecord = miRecordResult;
- }
- else
- {
- // MI print "%s^done,changelist=[]"
- const CMICmnMIValueList miValueList(true);
- CMICmnMIValueResult miValueResult6("changelist", miValueList);
- const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, miValueResult6);
- m_miResultRecord = miRecordResult;
- }
+bool CMICmdCmdVarUpdate::Acknowledge() {
+ if (m_bValueChanged) {
+ // MI print
+ // "%s^done,changelist=[{name=\"%s\",value=\"%s\",in_scope=\"%s\",type_changed=\"false\",has_more=\"0\"}]"
+ CMICmnMIValueResult miValueResult("changelist", m_miValueList);
+ const CMICmnMIResultRecord miRecordResult(
+ m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
+ miValueResult);
+ m_miResultRecord = miRecordResult;
+ } else {
+ // MI print "%s^done,changelist=[]"
+ const CMICmnMIValueList miValueList(true);
+ CMICmnMIValueResult miValueResult6("changelist", miValueList);
+ const CMICmnMIResultRecord miRecordResult(
+ m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
+ miValueResult6);
+ m_miResultRecord = miRecordResult;
+ }
- return MIstatus::success;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
-// Details: Required by the CMICmdFactory when registering *this command. The factory
+//++
+//------------------------------------------------------------------------------------
+// Details: Required by the CMICmdFactory when registering *this command. The
+// factory
// calls this function to create an instance of *this command.
// Type: Static method.
// Args: None.
// Return: CMICmdBase * - Pointer to a new command.
// Throws: None.
//--
-CMICmdBase *
-CMICmdCmdVarUpdate::CreateSelf()
-{
- return new CMICmdCmdVarUpdate();
+CMICmdBase *CMICmdCmdVarUpdate::CreateSelf() {
+ return new CMICmdCmdVarUpdate();
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Form the MI response for multiple variables.
// Type: Method.
// Args: vrStrVarName - (R) Session var object's name.
-// vpValue - (R) Text version of the value held in the variable.
+// vpValue - (R) Text version of the value held in the
+// variable.
// vrStrScope - (R) In scope "yes" or "no".
// Return: None.
// Throws: None.
//--
-void
-CMICmdCmdVarUpdate::MIFormResponse(const CMIUtilString &vrStrVarName, const char *const vpValue, const CMIUtilString &vrStrScope)
-{
- // MI print "[{name=\"%s\",value=\"%s\",in_scope=\"%s\",type_changed=\"false\",has_more=\"0\"}]"
- const CMICmnMIValueConst miValueConst(vrStrVarName);
- const CMICmnMIValueResult miValueResult("name", miValueConst);
- CMICmnMIValueTuple miValueTuple(miValueResult);
- if (vpValue != nullptr)
- {
- const CMICmnMIValueConst miValueConst2(vpValue);
- const CMICmnMIValueResult miValueResult2("value", miValueConst2);
- miValueTuple.Add(miValueResult2);
- }
- const CMICmnMIValueConst miValueConst3(vrStrScope);
- const CMICmnMIValueResult miValueResult3("in_scope", miValueConst3);
- miValueTuple.Add(miValueResult3);
- const CMICmnMIValueConst miValueConst4("false");
- const CMICmnMIValueResult miValueResult4("type_changed", miValueConst4);
- miValueTuple.Add(miValueResult4);
- const CMICmnMIValueConst miValueConst5("0");
- const CMICmnMIValueResult miValueResult5("has_more", miValueConst5);
- miValueTuple.Add(miValueResult5);
- m_miValueList.Add(miValueTuple);
+void CMICmdCmdVarUpdate::MIFormResponse(const CMIUtilString &vrStrVarName,
+ const char *const vpValue,
+ const CMIUtilString &vrStrScope) {
+ // MI print
+ // "[{name=\"%s\",value=\"%s\",in_scope=\"%s\",type_changed=\"false\",has_more=\"0\"}]"
+ const CMICmnMIValueConst miValueConst(vrStrVarName);
+ const CMICmnMIValueResult miValueResult("name", miValueConst);
+ CMICmnMIValueTuple miValueTuple(miValueResult);
+ if (vpValue != nullptr) {
+ const CMICmnMIValueConst miValueConst2(vpValue);
+ const CMICmnMIValueResult miValueResult2("value", miValueConst2);
+ miValueTuple.Add(miValueResult2);
+ }
+ const CMICmnMIValueConst miValueConst3(vrStrScope);
+ const CMICmnMIValueResult miValueResult3("in_scope", miValueConst3);
+ miValueTuple.Add(miValueResult3);
+ const CMICmnMIValueConst miValueConst4("false");
+ const CMICmnMIValueResult miValueResult4("type_changed", miValueConst4);
+ miValueTuple.Add(miValueResult4);
+ const CMICmnMIValueConst miValueConst5("0");
+ const CMICmnMIValueResult miValueResult5("has_more", miValueConst5);
+ miValueTuple.Add(miValueResult5);
+ m_miValueList.Add(miValueTuple);
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Determine if the var object was changed.
// Type: Method.
// Args: vrVarObj - (R) Session var object to examine.
@@ -482,63 +500,58 @@ CMICmdCmdVarUpdate::MIFormResponse(const
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdVarUpdate::ExamineSBValueForChange(lldb::SBValue &vrwValue, bool &vrwbChanged)
-{
- if (vrwValue.GetValueDidChange())
- {
+bool CMICmdCmdVarUpdate::ExamineSBValueForChange(lldb::SBValue &vrwValue,
+ bool &vrwbChanged) {
+ if (vrwValue.GetValueDidChange()) {
+ vrwbChanged = true;
+ return MIstatus::success;
+ }
+
+ lldb::SBType valueType = vrwValue.GetType();
+ if (!valueType.IsPointerType() && !valueType.IsReferenceType()) {
+ const MIuint nChildren = vrwValue.GetNumChildren();
+ for (MIuint i = 0; i < nChildren; ++i) {
+ lldb::SBValue member = vrwValue.GetChildAtIndex(i);
+ if (!member.IsValid())
+ continue;
+
+ if (member.GetValueDidChange()) {
vrwbChanged = true;
return MIstatus::success;
+ } else if (ExamineSBValueForChange(member, vrwbChanged) && vrwbChanged)
+ // Handle composite types (i.e. struct or arrays)
+ return MIstatus::success;
}
+ }
- lldb::SBType valueType = vrwValue.GetType();
- if (!valueType.IsPointerType() && !valueType.IsReferenceType())
- {
- const MIuint nChildren = vrwValue.GetNumChildren();
- for (MIuint i = 0; i < nChildren; ++i)
- {
- lldb::SBValue member = vrwValue.GetChildAtIndex(i);
- if (!member.IsValid())
- continue;
-
- if (member.GetValueDidChange())
- {
- vrwbChanged = true;
- return MIstatus::success;
- }
- else if (ExamineSBValueForChange(member, vrwbChanged) && vrwbChanged)
- // Handle composite types (i.e. struct or arrays)
- return MIstatus::success;
- }
- }
-
- vrwbChanged = false;
- return MIstatus::success;
+ vrwbChanged = false;
+ return MIstatus::success;
}
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdVarDelete constructor.
// Type: Method.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmdCmdVarDelete::CMICmdCmdVarDelete()
- : m_constStrArgName("name")
-{
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "var-delete";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdVarDelete::CreateSelf;
+CMICmdCmdVarDelete::CMICmdCmdVarDelete() : m_constStrArgName("name") {
+ // Command factory matches this name with that received from the stdin stream
+ m_strMiCmd = "var-delete";
+
+ // Required by the CMICmdFactory when registering *this command
+ m_pSelfCreatorFn = &CMICmdCmdVarDelete::CreateSelf;
}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The parses the command line options
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The parses the command line
+// options
// arguments to extract values for each of those arguments.
// Type: Overridden.
// Args: None.
@@ -546,46 +559,46 @@ CMICmdCmdVarDelete::CMICmdCmdVarDelete()
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdVarDelete::ParseArgs()
-{
- m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgName, true, true));
- return ParseValidateCmdOptions();
+bool CMICmdCmdVarDelete::ParseArgs() {
+ m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgName, true, true));
+ return ParseValidateCmdOptions();
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdVarDelete destructor.
// Type: Overrideable.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmdCmdVarDelete::~CMICmdCmdVarDelete()
-{
-}
+CMICmdCmdVarDelete::~CMICmdCmdVarDelete() {}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command does work in this function.
-// The command is likely to communicate with the LLDB SBDebugger in here.
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command does work in this
+// function.
+// The command is likely to communicate with the LLDB SBDebugger in
+// here.
// Type: Overridden.
// Args: None.
// Return: MIstatus::success - Functional succeeded.
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdVarDelete::Execute()
-{
- CMICMDBASE_GETOPTION(pArgName, String, m_constStrArgName);
+bool CMICmdCmdVarDelete::Execute() {
+ CMICMDBASE_GETOPTION(pArgName, String, m_constStrArgName);
- const CMIUtilString &rVarObjName(pArgName->GetValue());
- CMICmnLLDBDebugSessionInfoVarObj::VarObjDelete(rVarObjName);
+ const CMIUtilString &rVarObjName(pArgName->GetValue());
+ CMICmnLLDBDebugSessionInfoVarObj::VarObjDelete(rVarObjName);
- return MIstatus::success;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command prepares a MI Record Result
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command prepares a MI Record
+// Result
// for the work carried out in the Execute().
// Type: Overridden.
// Args: None.
@@ -593,34 +606,34 @@ CMICmdCmdVarDelete::Execute()
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdVarDelete::Acknowledge()
-{
- const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done);
- m_miResultRecord = miRecordResult;
-
- return MIstatus::success;
+bool CMICmdCmdVarDelete::Acknowledge() {
+ const CMICmnMIResultRecord miRecordResult(
+ m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done);
+ m_miResultRecord = miRecordResult;
+
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
-// Details: Required by the CMICmdFactory when registering *this command. The factory
+//++
+//------------------------------------------------------------------------------------
+// Details: Required by the CMICmdFactory when registering *this command. The
+// factory
// calls this function to create an instance of *this command.
// Type: Static method.
// Args: None.
// Return: CMICmdBase * - Pointer to a new command.
// Throws: None.
//--
-CMICmdBase *
-CMICmdCmdVarDelete::CreateSelf()
-{
- return new CMICmdCmdVarDelete();
+CMICmdBase *CMICmdCmdVarDelete::CreateSelf() {
+ return new CMICmdCmdVarDelete();
}
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdVarAssign constructor.
// Type: Method.
// Args: None.
@@ -628,30 +641,29 @@ CMICmdCmdVarDelete::CreateSelf()
// Throws: None.
//--
CMICmdCmdVarAssign::CMICmdCmdVarAssign()
- : m_bOk(true)
- , m_constStrArgName("name")
- , m_constStrArgExpression("expression")
-{
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "var-assign";
+ : m_bOk(true), m_constStrArgName("name"),
+ m_constStrArgExpression("expression") {
+ // Command factory matches this name with that received from the stdin stream
+ m_strMiCmd = "var-assign";
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdVarAssign::CreateSelf;
+ // Required by the CMICmdFactory when registering *this command
+ m_pSelfCreatorFn = &CMICmdCmdVarAssign::CreateSelf;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdVarAssign destructor.
// Type: Overrideable.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmdCmdVarAssign::~CMICmdCmdVarAssign()
-{
-}
+CMICmdCmdVarAssign::~CMICmdCmdVarAssign() {}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The parses the command line options
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The parses the command line
+// options
// arguments to extract values for each of those arguments.
// Type: Overridden.
// Args: None.
@@ -659,52 +671,54 @@ CMICmdCmdVarAssign::~CMICmdCmdVarAssign(
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdVarAssign::ParseArgs()
-{
- m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgName, true, true));
- m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgExpression, true, true));
- return ParseValidateCmdOptions();
+bool CMICmdCmdVarAssign::ParseArgs() {
+ m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgName, true, true));
+ m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgExpression, true, true));
+ return ParseValidateCmdOptions();
}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command does work in this function.
-// The command is likely to communicate with the LLDB SBDebugger in here.
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command does work in this
+// function.
+// The command is likely to communicate with the LLDB SBDebugger in
+// here.
// Type: Overridden.
// Args: None.
// Return: MIstatus::success - Functional succeeded.
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdVarAssign::Execute()
-{
- CMICMDBASE_GETOPTION(pArgName, String, m_constStrArgName);
- CMICMDBASE_GETOPTION(pArgExpression, String, m_constStrArgExpression);
+bool CMICmdCmdVarAssign::Execute() {
+ CMICMDBASE_GETOPTION(pArgName, String, m_constStrArgName);
+ CMICMDBASE_GETOPTION(pArgExpression, String, m_constStrArgExpression);
- const CMIUtilString &rVarObjName(pArgName->GetValue());
- const CMIUtilString &rExpression(pArgExpression->GetValue());
+ const CMIUtilString &rVarObjName(pArgName->GetValue());
+ const CMIUtilString &rExpression(pArgExpression->GetValue());
- CMICmnLLDBDebugSessionInfoVarObj varObj;
- if (!CMICmnLLDBDebugSessionInfoVarObj::VarObjGet(rVarObjName, varObj))
- {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_VARIABLE_DOESNOTEXIST), m_cmdData.strMiCmd.c_str(), rVarObjName.c_str()));
- return MIstatus::failure;
- }
- m_varObjName = rVarObjName;
+ CMICmnLLDBDebugSessionInfoVarObj varObj;
+ if (!CMICmnLLDBDebugSessionInfoVarObj::VarObjGet(rVarObjName, varObj)) {
+ SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_VARIABLE_DOESNOTEXIST),
+ m_cmdData.strMiCmd.c_str(),
+ rVarObjName.c_str()));
+ return MIstatus::failure;
+ }
+ m_varObjName = rVarObjName;
- CMIUtilString strExpression(rExpression.Trim());
- strExpression = strExpression.Trim('"');
- lldb::SBValue &rValue(const_cast<lldb::SBValue &>(varObj.GetValue()));
- m_bOk = rValue.SetValueFromCString(strExpression.c_str());
- if (m_bOk)
- varObj.UpdateValue();
+ CMIUtilString strExpression(rExpression.Trim());
+ strExpression = strExpression.Trim('"');
+ lldb::SBValue &rValue(const_cast<lldb::SBValue &>(varObj.GetValue()));
+ m_bOk = rValue.SetValueFromCString(strExpression.c_str());
+ if (m_bOk)
+ varObj.UpdateValue();
- return MIstatus::success;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command prepares a MI Record Result
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command prepares a MI Record
+// Result
// for the work carried out in the Execute().
// Type: Overridden.
// Args: None.
@@ -712,49 +726,51 @@ CMICmdCmdVarAssign::Execute()
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdVarAssign::Acknowledge()
-{
- if (m_bOk)
- {
- // MI print "%s^done,value=\"%s\""
- CMICmnLLDBDebugSessionInfoVarObj varObj;
- CMICmnLLDBDebugSessionInfoVarObj::VarObjGet(m_varObjName, varObj);
- const CMICmnMIValueConst miValueConst(varObj.GetValueFormatted());
- const CMICmnMIValueResult miValueResult("value", miValueConst);
- const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, miValueResult);
- m_miResultRecord = miRecordResult;
-
- return MIstatus::success;
- }
-
- const CMICmnMIValueConst miValueConst("expression could not be evaluated");
- const CMICmnMIValueResult miValueResult("msg", miValueConst);
- const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error, miValueResult);
+bool CMICmdCmdVarAssign::Acknowledge() {
+ if (m_bOk) {
+ // MI print "%s^done,value=\"%s\""
+ CMICmnLLDBDebugSessionInfoVarObj varObj;
+ CMICmnLLDBDebugSessionInfoVarObj::VarObjGet(m_varObjName, varObj);
+ const CMICmnMIValueConst miValueConst(varObj.GetValueFormatted());
+ const CMICmnMIValueResult miValueResult("value", miValueConst);
+ const CMICmnMIResultRecord miRecordResult(
+ m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
+ miValueResult);
m_miResultRecord = miRecordResult;
return MIstatus::success;
-}
+ }
-//++ ------------------------------------------------------------------------------------
-// Details: Required by the CMICmdFactory when registering *this command. The factory
+ const CMICmnMIValueConst miValueConst("expression could not be evaluated");
+ const CMICmnMIValueResult miValueResult("msg", miValueConst);
+ const CMICmnMIResultRecord miRecordResult(
+ m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error,
+ miValueResult);
+ m_miResultRecord = miRecordResult;
+
+ return MIstatus::success;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: Required by the CMICmdFactory when registering *this command. The
+// factory
// calls this function to create an instance of *this command.
// Type: Static method.
// Args: None.
// Return: CMICmdBase * - Pointer to a new command.
// Throws: None.
//--
-CMICmdBase *
-CMICmdCmdVarAssign::CreateSelf()
-{
- return new CMICmdCmdVarAssign();
+CMICmdBase *CMICmdCmdVarAssign::CreateSelf() {
+ return new CMICmdCmdVarAssign();
}
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdVarSetFormat constructor.
// Type: Method.
// Args: None.
@@ -762,29 +778,28 @@ CMICmdCmdVarAssign::CreateSelf()
// Throws: None.
//--
CMICmdCmdVarSetFormat::CMICmdCmdVarSetFormat()
- : m_constStrArgName("name")
- , m_constStrArgFormatSpec("format-spec")
-{
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "var-set-format";
+ : m_constStrArgName("name"), m_constStrArgFormatSpec("format-spec") {
+ // Command factory matches this name with that received from the stdin stream
+ m_strMiCmd = "var-set-format";
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdVarSetFormat::CreateSelf;
+ // Required by the CMICmdFactory when registering *this command
+ m_pSelfCreatorFn = &CMICmdCmdVarSetFormat::CreateSelf;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdVarSetFormat destructor.
// Type: Overrideable.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmdCmdVarSetFormat::~CMICmdCmdVarSetFormat()
-{
-}
+CMICmdCmdVarSetFormat::~CMICmdCmdVarSetFormat() {}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The parses the command line options
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The parses the command line
+// options
// arguments to extract values for each of those arguments.
// Type: Overridden.
// Args: None.
@@ -792,53 +807,57 @@ CMICmdCmdVarSetFormat::~CMICmdCmdVarSetF
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdVarSetFormat::ParseArgs()
-{
- m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgName, true, true));
- m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgFormatSpec, true, true));
- return ParseValidateCmdOptions();
+bool CMICmdCmdVarSetFormat::ParseArgs() {
+ m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgName, true, true));
+ m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgFormatSpec, true, true));
+ return ParseValidateCmdOptions();
}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command does work in this function.
-// The command is likely to communicate with the LLDB SBDebugger in here.
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command does work in this
+// function.
+// The command is likely to communicate with the LLDB SBDebugger in
+// here.
// Type: Overridden.
// Args: None.
// Return: MIstatus::success - Functional succeeded.
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdVarSetFormat::Execute()
-{
- CMICMDBASE_GETOPTION(pArgName, String, m_constStrArgName);
- CMICMDBASE_GETOPTION(pArgFormatSpec, String, m_constStrArgFormatSpec);
+bool CMICmdCmdVarSetFormat::Execute() {
+ CMICMDBASE_GETOPTION(pArgName, String, m_constStrArgName);
+ CMICMDBASE_GETOPTION(pArgFormatSpec, String, m_constStrArgFormatSpec);
- const CMIUtilString &rVarObjName(pArgName->GetValue());
- const CMIUtilString &rExpression(pArgFormatSpec->GetValue());
+ const CMIUtilString &rVarObjName(pArgName->GetValue());
+ const CMIUtilString &rExpression(pArgFormatSpec->GetValue());
- CMICmnLLDBDebugSessionInfoVarObj varObj;
- if (!CMICmnLLDBDebugSessionInfoVarObj::VarObjGet(rVarObjName, varObj))
- {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_VARIABLE_DOESNOTEXIST), m_cmdData.strMiCmd.c_str(), rVarObjName.c_str()));
- return MIstatus::failure;
- }
- if (!varObj.SetVarFormat(CMICmnLLDBDebugSessionInfoVarObj::GetVarFormatForString(rExpression)))
- {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_VARIABLE_ENUM_INVALID), m_cmdData.strMiCmd.c_str(), rVarObjName.c_str(),
- rExpression.c_str()));
- return MIstatus::failure;
- }
- varObj.UpdateValue();
+ CMICmnLLDBDebugSessionInfoVarObj varObj;
+ if (!CMICmnLLDBDebugSessionInfoVarObj::VarObjGet(rVarObjName, varObj)) {
+ SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_VARIABLE_DOESNOTEXIST),
+ m_cmdData.strMiCmd.c_str(),
+ rVarObjName.c_str()));
+ return MIstatus::failure;
+ }
+ if (!varObj.SetVarFormat(
+ CMICmnLLDBDebugSessionInfoVarObj::GetVarFormatForString(
+ rExpression))) {
+ SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_VARIABLE_ENUM_INVALID),
+ m_cmdData.strMiCmd.c_str(),
+ rVarObjName.c_str(), rExpression.c_str()));
+ return MIstatus::failure;
+ }
+ varObj.UpdateValue();
- m_varObjName = rVarObjName;
+ m_varObjName = rVarObjName;
- return MIstatus::success;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command prepares a MI Record Result
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command prepares a MI Record
+// Result
// for the work carried out in the Execute().
// Type: Overridden.
// Args: None.
@@ -846,56 +865,58 @@ CMICmdCmdVarSetFormat::Execute()
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdVarSetFormat::Acknowledge()
-{
- // MI print "%s^done,changelist=[{name=\"%s\",value=\"%s\",in_scope=\"%s\",type_changed=\"false\",has_more=\"0\"}]"
- CMICmnLLDBDebugSessionInfoVarObj varObj;
- CMICmnLLDBDebugSessionInfoVarObj::VarObjGet(m_varObjName, varObj);
- const CMICmnMIValueConst miValueConst(m_varObjName);
- const CMICmnMIValueResult miValueResult("name", miValueConst);
- CMICmnMIValueTuple miValueTuple(miValueResult);
- const CMICmnMIValueConst miValueConst2(varObj.GetValueFormatted());
- const CMICmnMIValueResult miValueResult2("value", miValueConst2);
- miValueTuple.Add(miValueResult2);
- lldb::SBValue &rValue = const_cast<lldb::SBValue &>(varObj.GetValue());
- const CMICmnMIValueConst miValueConst3(rValue.IsInScope() ? "true" : "false");
- const CMICmnMIValueResult miValueResult3("in_scope", miValueConst3);
- miValueTuple.Add(miValueResult3);
- const CMICmnMIValueConst miValueConst4("false");
- const CMICmnMIValueResult miValueResult4("type_changed", miValueConst4);
- miValueTuple.Add(miValueResult4);
- const CMICmnMIValueConst miValueConst5("0");
- const CMICmnMIValueResult miValueResult5("type_changed", miValueConst5);
- miValueTuple.Add(miValueResult5);
- const CMICmnMIValueList miValueList(miValueTuple);
- const CMICmnMIValueResult miValueResult6("changelist", miValueList);
-
- const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, miValueResult6);
- m_miResultRecord = miRecordResult;
-
- return MIstatus::success;
-}
-
-//++ ------------------------------------------------------------------------------------
-// Details: Required by the CMICmdFactory when registering *this command. The factory
+bool CMICmdCmdVarSetFormat::Acknowledge() {
+ // MI print
+ // "%s^done,changelist=[{name=\"%s\",value=\"%s\",in_scope=\"%s\",type_changed=\"false\",has_more=\"0\"}]"
+ CMICmnLLDBDebugSessionInfoVarObj varObj;
+ CMICmnLLDBDebugSessionInfoVarObj::VarObjGet(m_varObjName, varObj);
+ const CMICmnMIValueConst miValueConst(m_varObjName);
+ const CMICmnMIValueResult miValueResult("name", miValueConst);
+ CMICmnMIValueTuple miValueTuple(miValueResult);
+ const CMICmnMIValueConst miValueConst2(varObj.GetValueFormatted());
+ const CMICmnMIValueResult miValueResult2("value", miValueConst2);
+ miValueTuple.Add(miValueResult2);
+ lldb::SBValue &rValue = const_cast<lldb::SBValue &>(varObj.GetValue());
+ const CMICmnMIValueConst miValueConst3(rValue.IsInScope() ? "true" : "false");
+ const CMICmnMIValueResult miValueResult3("in_scope", miValueConst3);
+ miValueTuple.Add(miValueResult3);
+ const CMICmnMIValueConst miValueConst4("false");
+ const CMICmnMIValueResult miValueResult4("type_changed", miValueConst4);
+ miValueTuple.Add(miValueResult4);
+ const CMICmnMIValueConst miValueConst5("0");
+ const CMICmnMIValueResult miValueResult5("type_changed", miValueConst5);
+ miValueTuple.Add(miValueResult5);
+ const CMICmnMIValueList miValueList(miValueTuple);
+ const CMICmnMIValueResult miValueResult6("changelist", miValueList);
+
+ const CMICmnMIResultRecord miRecordResult(
+ m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
+ miValueResult6);
+ m_miResultRecord = miRecordResult;
+
+ return MIstatus::success;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: Required by the CMICmdFactory when registering *this command. The
+// factory
// calls this function to create an instance of *this command.
// Type: Static method.
// Args: None.
// Return: CMICmdBase * - Pointer to a new command.
// Throws: None.
//--
-CMICmdBase *
-CMICmdCmdVarSetFormat::CreateSelf()
-{
- return new CMICmdCmdVarSetFormat();
+CMICmdBase *CMICmdCmdVarSetFormat::CreateSelf() {
+ return new CMICmdCmdVarSetFormat();
}
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdVarListChildren constructor.
// Type: Method.
// Args: None.
@@ -903,35 +924,30 @@ CMICmdCmdVarSetFormat::CreateSelf()
// Throws: None.
//--
CMICmdCmdVarListChildren::CMICmdCmdVarListChildren()
- : m_constStrArgPrintValues("print-values")
- , m_constStrArgName("name")
- , m_constStrArgFrom("from")
- , m_constStrArgTo("to")
- , m_bValueValid(false)
- , m_nChildren(0)
- , m_miValueList(true)
- , m_bHasMore(false)
- {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "var-list-children";
+ : m_constStrArgPrintValues("print-values"), m_constStrArgName("name"),
+ m_constStrArgFrom("from"), m_constStrArgTo("to"), m_bValueValid(false),
+ m_nChildren(0), m_miValueList(true), m_bHasMore(false) {
+ // Command factory matches this name with that received from the stdin stream
+ m_strMiCmd = "var-list-children";
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdVarListChildren::CreateSelf;
+ // Required by the CMICmdFactory when registering *this command
+ m_pSelfCreatorFn = &CMICmdCmdVarListChildren::CreateSelf;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdVarListChildren destructor.
// Type: Overrideable.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmdCmdVarListChildren::~CMICmdCmdVarListChildren()
-{
-}
+CMICmdCmdVarListChildren::~CMICmdCmdVarListChildren() {}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The parses the command line options
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The parses the command line
+// options
// arguments to extract values for each of those arguments.
// Type: Overridden.
// Args: None.
@@ -939,121 +955,132 @@ CMICmdCmdVarListChildren::~CMICmdCmdVarL
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdVarListChildren::ParseArgs()
-{
- m_setCmdArgs.Add(new CMICmdArgValPrintValues(m_constStrArgPrintValues, false, true));
- m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgName, true, true, true));
- m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgFrom, false, true));
- m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgTo, false, true));
- return ParseValidateCmdOptions();
-}
-
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command does work in this function.
-// The command is likely to communicate with the LLDB SBDebugger in here.
+bool CMICmdCmdVarListChildren::ParseArgs() {
+ m_setCmdArgs.Add(
+ new CMICmdArgValPrintValues(m_constStrArgPrintValues, false, true));
+ m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgName, true, true, true));
+ m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgFrom, false, true));
+ m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgTo, false, true));
+ return ParseValidateCmdOptions();
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command does work in this
+// function.
+// The command is likely to communicate with the LLDB SBDebugger in
+// here.
// Type: Overridden.
// Args: None.
// Return: MIstatus::success - Functional succeeded.
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdVarListChildren::Execute()
-{
- CMICMDBASE_GETOPTION(pArgPrintValues, PrintValues, m_constStrArgPrintValues);
- CMICMDBASE_GETOPTION(pArgName, String, m_constStrArgName);
- CMICMDBASE_GETOPTION(pArgFrom, Number, m_constStrArgFrom);
- CMICMDBASE_GETOPTION(pArgTo, Number, m_constStrArgTo);
-
- CMICmnLLDBDebugSessionInfo::VariableInfoFormat_e eVarInfoFormat = CMICmnLLDBDebugSessionInfo::eVariableInfoFormat_NoValues;
- if (pArgPrintValues->GetFound())
- eVarInfoFormat = static_cast<CMICmnLLDBDebugSessionInfo::VariableInfoFormat_e>(pArgPrintValues->GetValue());
-
- const CMIUtilString &rVarObjName(pArgName->GetValue());
- CMICmnLLDBDebugSessionInfoVarObj varObj;
- if (!CMICmnLLDBDebugSessionInfoVarObj::VarObjGet(rVarObjName, varObj))
- {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_VARIABLE_DOESNOTEXIST), m_cmdData.strMiCmd.c_str(), rVarObjName.c_str()));
- return MIstatus::failure;
- }
-
- MIuint nFrom = 0;
- MIuint nTo = UINT32_MAX;
- if (pArgFrom->GetFound() && pArgTo->GetFound())
- {
- nFrom = pArgFrom->GetValue();
- nTo = pArgTo->GetValue();
- }
- else if (pArgFrom->GetFound() || pArgTo->GetFound())
- {
- // Only from or to was specified but both are required
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_VARIABLE_CHILD_RANGE_INVALID), m_cmdData.strMiCmd.c_str()));
- return MIstatus::failure;
- }
-
- lldb::SBValue &rValue = const_cast<lldb::SBValue &>(varObj.GetValue());
- m_bValueValid = rValue.IsValid();
- if (!m_bValueValid)
- return MIstatus::success;
-
- const MIuint nChildren = rValue.GetNumChildren();
- m_bHasMore = nTo < nChildren;
- nTo = std::min(nTo, nChildren);
- m_nChildren = nFrom < nTo ? nTo - nFrom : 0;
- for (MIuint i = nFrom; i < nTo; i++)
- {
- lldb::SBValue member = rValue.GetChildAtIndex(i);
- const CMICmnLLDBUtilSBValue utilValue(member);
- const CMIUtilString strExp = utilValue.GetName();
- const CMIUtilString name(strExp.empty() ?
- CMIUtilString::Format("%s.$%u", rVarObjName.c_str(), i) :
- CMIUtilString::Format("%s.%s", rVarObjName.c_str(), strExp.c_str()));
- const MIuint nChildren = member.GetNumChildren();
- const CMIUtilString strThreadId(CMIUtilString::Format("%u", member.GetThread().GetIndexID()));
-
- // Varobj gets added to CMICmnLLDBDebugSessionInfoVarObj static container of varObjs
- CMICmnLLDBDebugSessionInfoVarObj var(strExp, name, member, rVarObjName);
-
- // MI print "child={name=\"%s\",exp=\"%s\",numchild=\"%d\",value=\"%s\",type=\"%s\",thread-id=\"%u\",has_more=\"%u\"}"
- const CMICmnMIValueConst miValueConst(name);
- const CMICmnMIValueResult miValueResult("name", miValueConst);
- CMICmnMIValueTuple miValueTuple(miValueResult);
- const CMICmnMIValueConst miValueConst2(strExp);
- const CMICmnMIValueResult miValueResult2("exp", miValueConst2);
- miValueTuple.Add(miValueResult2);
- const CMIUtilString strNumChild(CMIUtilString::Format("%u", nChildren));
- const CMICmnMIValueConst miValueConst3(strNumChild);
- const CMICmnMIValueResult miValueResult3("numchild", miValueConst3);
- miValueTuple.Add(miValueResult3);
- const CMICmnMIValueConst miValueConst5(utilValue.GetTypeNameDisplay());
- const CMICmnMIValueResult miValueResult5("type", miValueConst5);
- miValueTuple.Add(miValueResult5);
- const CMICmnMIValueConst miValueConst6(strThreadId);
- const CMICmnMIValueResult miValueResult6("thread-id", miValueConst6);
- miValueTuple.Add(miValueResult6);
- // nChildren == 0 is used to check for simple values
- if (eVarInfoFormat == CMICmnLLDBDebugSessionInfo::eVariableInfoFormat_AllValues ||
- (eVarInfoFormat == CMICmnLLDBDebugSessionInfo::eVariableInfoFormat_SimpleValues && nChildren == 0))
- {
- const CMIUtilString strValue(
- CMICmnLLDBDebugSessionInfoVarObj::GetValueStringFormatted(member, CMICmnLLDBDebugSessionInfoVarObj::eVarFormat_Natural));
- const CMICmnMIValueConst miValueConst7(strValue);
- const CMICmnMIValueResult miValueResult7("value", miValueConst7);
- miValueTuple.Add(miValueResult7);
- }
- const CMICmnMIValueConst miValueConst8("0");
- const CMICmnMIValueResult miValueResult8("has_more", miValueConst8);
- miValueTuple.Add(miValueResult8);
- const CMICmnMIValueResult miValueResult9("child", miValueTuple);
- m_miValueList.Add(miValueResult9);
- }
-
+bool CMICmdCmdVarListChildren::Execute() {
+ CMICMDBASE_GETOPTION(pArgPrintValues, PrintValues, m_constStrArgPrintValues);
+ CMICMDBASE_GETOPTION(pArgName, String, m_constStrArgName);
+ CMICMDBASE_GETOPTION(pArgFrom, Number, m_constStrArgFrom);
+ CMICMDBASE_GETOPTION(pArgTo, Number, m_constStrArgTo);
+
+ CMICmnLLDBDebugSessionInfo::VariableInfoFormat_e eVarInfoFormat =
+ CMICmnLLDBDebugSessionInfo::eVariableInfoFormat_NoValues;
+ if (pArgPrintValues->GetFound())
+ eVarInfoFormat =
+ static_cast<CMICmnLLDBDebugSessionInfo::VariableInfoFormat_e>(
+ pArgPrintValues->GetValue());
+
+ const CMIUtilString &rVarObjName(pArgName->GetValue());
+ CMICmnLLDBDebugSessionInfoVarObj varObj;
+ if (!CMICmnLLDBDebugSessionInfoVarObj::VarObjGet(rVarObjName, varObj)) {
+ SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_VARIABLE_DOESNOTEXIST),
+ m_cmdData.strMiCmd.c_str(),
+ rVarObjName.c_str()));
+ return MIstatus::failure;
+ }
+
+ MIuint nFrom = 0;
+ MIuint nTo = UINT32_MAX;
+ if (pArgFrom->GetFound() && pArgTo->GetFound()) {
+ nFrom = pArgFrom->GetValue();
+ nTo = pArgTo->GetValue();
+ } else if (pArgFrom->GetFound() || pArgTo->GetFound()) {
+ // Only from or to was specified but both are required
+ SetError(
+ CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_VARIABLE_CHILD_RANGE_INVALID),
+ m_cmdData.strMiCmd.c_str()));
+ return MIstatus::failure;
+ }
+
+ lldb::SBValue &rValue = const_cast<lldb::SBValue &>(varObj.GetValue());
+ m_bValueValid = rValue.IsValid();
+ if (!m_bValueValid)
return MIstatus::success;
-}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command prepares a MI Record Result
+ const MIuint nChildren = rValue.GetNumChildren();
+ m_bHasMore = nTo < nChildren;
+ nTo = std::min(nTo, nChildren);
+ m_nChildren = nFrom < nTo ? nTo - nFrom : 0;
+ for (MIuint i = nFrom; i < nTo; i++) {
+ lldb::SBValue member = rValue.GetChildAtIndex(i);
+ const CMICmnLLDBUtilSBValue utilValue(member);
+ const CMIUtilString strExp = utilValue.GetName();
+ const CMIUtilString name(
+ strExp.empty() ? CMIUtilString::Format("%s.$%u", rVarObjName.c_str(), i)
+ : CMIUtilString::Format("%s.%s", rVarObjName.c_str(),
+ strExp.c_str()));
+ const MIuint nChildren = member.GetNumChildren();
+ const CMIUtilString strThreadId(
+ CMIUtilString::Format("%u", member.GetThread().GetIndexID()));
+
+ // Varobj gets added to CMICmnLLDBDebugSessionInfoVarObj static container of
+ // varObjs
+ CMICmnLLDBDebugSessionInfoVarObj var(strExp, name, member, rVarObjName);
+
+ // MI print
+ // "child={name=\"%s\",exp=\"%s\",numchild=\"%d\",value=\"%s\",type=\"%s\",thread-id=\"%u\",has_more=\"%u\"}"
+ const CMICmnMIValueConst miValueConst(name);
+ const CMICmnMIValueResult miValueResult("name", miValueConst);
+ CMICmnMIValueTuple miValueTuple(miValueResult);
+ const CMICmnMIValueConst miValueConst2(strExp);
+ const CMICmnMIValueResult miValueResult2("exp", miValueConst2);
+ miValueTuple.Add(miValueResult2);
+ const CMIUtilString strNumChild(CMIUtilString::Format("%u", nChildren));
+ const CMICmnMIValueConst miValueConst3(strNumChild);
+ const CMICmnMIValueResult miValueResult3("numchild", miValueConst3);
+ miValueTuple.Add(miValueResult3);
+ const CMICmnMIValueConst miValueConst5(utilValue.GetTypeNameDisplay());
+ const CMICmnMIValueResult miValueResult5("type", miValueConst5);
+ miValueTuple.Add(miValueResult5);
+ const CMICmnMIValueConst miValueConst6(strThreadId);
+ const CMICmnMIValueResult miValueResult6("thread-id", miValueConst6);
+ miValueTuple.Add(miValueResult6);
+ // nChildren == 0 is used to check for simple values
+ if (eVarInfoFormat ==
+ CMICmnLLDBDebugSessionInfo::eVariableInfoFormat_AllValues ||
+ (eVarInfoFormat ==
+ CMICmnLLDBDebugSessionInfo::eVariableInfoFormat_SimpleValues &&
+ nChildren == 0)) {
+ const CMIUtilString strValue(
+ CMICmnLLDBDebugSessionInfoVarObj::GetValueStringFormatted(
+ member, CMICmnLLDBDebugSessionInfoVarObj::eVarFormat_Natural));
+ const CMICmnMIValueConst miValueConst7(strValue);
+ const CMICmnMIValueResult miValueResult7("value", miValueConst7);
+ miValueTuple.Add(miValueResult7);
+ }
+ const CMICmnMIValueConst miValueConst8("0");
+ const CMICmnMIValueResult miValueResult8("has_more", miValueConst8);
+ miValueTuple.Add(miValueResult8);
+ const CMICmnMIValueResult miValueResult9("child", miValueTuple);
+ m_miValueList.Add(miValueResult9);
+ }
+
+ return MIstatus::success;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command prepares a MI Record
+// Result
// for the work carried out in the Execute().
// Type: Overridden.
// Args: None.
@@ -1061,55 +1088,57 @@ CMICmdCmdVarListChildren::Execute()
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdVarListChildren::Acknowledge()
-{
- if (m_bValueValid)
- {
- // MI print "%s^done,numchild=\"%u\",children=[%s],has_more=\"%d\""
- const CMIUtilString strNumChild(CMIUtilString::Format("%u", m_nChildren));
- const CMICmnMIValueConst miValueConst(strNumChild);
- CMICmnMIValueResult miValueResult("numchild", miValueConst);
- if (m_nChildren != 0)
- miValueResult.Add("children", m_miValueList);
- const CMIUtilString strHasMore(m_bHasMore ? "1" : "0");
- const CMICmnMIValueConst miValueConst2(strHasMore);
- miValueResult.Add("has_more", miValueConst2);
-
- const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, miValueResult);
- m_miResultRecord = miRecordResult;
-
- return MIstatus::success;
- }
-
- // MI print "%s^error,msg=\"variable invalid\""
- const CMICmnMIValueConst miValueConst("variable invalid");
- const CMICmnMIValueResult miValueResult("msg", miValueConst);
- const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error, miValueResult);
+bool CMICmdCmdVarListChildren::Acknowledge() {
+ if (m_bValueValid) {
+ // MI print "%s^done,numchild=\"%u\",children=[%s],has_more=\"%d\""
+ const CMIUtilString strNumChild(CMIUtilString::Format("%u", m_nChildren));
+ const CMICmnMIValueConst miValueConst(strNumChild);
+ CMICmnMIValueResult miValueResult("numchild", miValueConst);
+ if (m_nChildren != 0)
+ miValueResult.Add("children", m_miValueList);
+ const CMIUtilString strHasMore(m_bHasMore ? "1" : "0");
+ const CMICmnMIValueConst miValueConst2(strHasMore);
+ miValueResult.Add("has_more", miValueConst2);
+
+ const CMICmnMIResultRecord miRecordResult(
+ m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
+ miValueResult);
m_miResultRecord = miRecordResult;
return MIstatus::success;
-}
+ }
-//++ ------------------------------------------------------------------------------------
-// Details: Required by the CMICmdFactory when registering *this command. The factory
+ // MI print "%s^error,msg=\"variable invalid\""
+ const CMICmnMIValueConst miValueConst("variable invalid");
+ const CMICmnMIValueResult miValueResult("msg", miValueConst);
+ const CMICmnMIResultRecord miRecordResult(
+ m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error,
+ miValueResult);
+ m_miResultRecord = miRecordResult;
+
+ return MIstatus::success;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: Required by the CMICmdFactory when registering *this command. The
+// factory
// calls this function to create an instance of *this command.
// Type: Static method.
// Args: None.
// Return: CMICmdBase * - Pointer to a new command.
// Throws: None.
//--
-CMICmdBase *
-CMICmdCmdVarListChildren::CreateSelf()
-{
- return new CMICmdCmdVarListChildren();
+CMICmdBase *CMICmdCmdVarListChildren::CreateSelf() {
+ return new CMICmdCmdVarListChildren();
}
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdVarEvaluateExpression constructor.
// Type: Method.
// Args: None.
@@ -1117,30 +1146,29 @@ CMICmdCmdVarListChildren::CreateSelf()
// Throws: None.
//--
CMICmdCmdVarEvaluateExpression::CMICmdCmdVarEvaluateExpression()
- : m_bValueValid(true)
- , m_constStrArgFormatSpec("-f")
- , m_constStrArgName("name")
-{
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "var-evaluate-expression";
+ : m_bValueValid(true), m_constStrArgFormatSpec("-f"),
+ m_constStrArgName("name") {
+ // Command factory matches this name with that received from the stdin stream
+ m_strMiCmd = "var-evaluate-expression";
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdVarEvaluateExpression::CreateSelf;
+ // Required by the CMICmdFactory when registering *this command
+ m_pSelfCreatorFn = &CMICmdCmdVarEvaluateExpression::CreateSelf;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdVarEvaluateExpression destructor.
// Type: Overrideable.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmdCmdVarEvaluateExpression::~CMICmdCmdVarEvaluateExpression()
-{
-}
+CMICmdCmdVarEvaluateExpression::~CMICmdCmdVarEvaluateExpression() {}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The parses the command line options
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The parses the command line
+// options
// arguments to extract values for each of those arguments.
// Type: Overridden.
// Args: None.
@@ -1148,50 +1176,53 @@ CMICmdCmdVarEvaluateExpression::~CMICmdC
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdVarEvaluateExpression::ParseArgs()
-{
- m_setCmdArgs.Add(
- new CMICmdArgValOptionShort(m_constStrArgFormatSpec, false, false, CMICmdArgValListBase::eArgValType_String, 1));
- m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgName, true, true));
- return ParseValidateCmdOptions();
+bool CMICmdCmdVarEvaluateExpression::ParseArgs() {
+ m_setCmdArgs.Add(
+ new CMICmdArgValOptionShort(m_constStrArgFormatSpec, false, false,
+ CMICmdArgValListBase::eArgValType_String, 1));
+ m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgName, true, true));
+ return ParseValidateCmdOptions();
}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command does work in this function.
-// The command is likely to communicate with the LLDB SBDebugger in here.
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command does work in this
+// function.
+// The command is likely to communicate with the LLDB SBDebugger in
+// here.
// Type: Overridden.
// Args: None.
// Return: MIstatus::success - Functional succeeded.
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdVarEvaluateExpression::Execute()
-{
- CMICMDBASE_GETOPTION(pArgName, String, m_constStrArgName);
+bool CMICmdCmdVarEvaluateExpression::Execute() {
+ CMICMDBASE_GETOPTION(pArgName, String, m_constStrArgName);
- const CMIUtilString &rVarObjName(pArgName->GetValue());
- CMICmnLLDBDebugSessionInfoVarObj varObj;
- if (!CMICmnLLDBDebugSessionInfoVarObj::VarObjGet(rVarObjName, varObj))
- {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_VARIABLE_DOESNOTEXIST), m_cmdData.strMiCmd.c_str(), rVarObjName.c_str()));
- return MIstatus::failure;
- }
+ const CMIUtilString &rVarObjName(pArgName->GetValue());
+ CMICmnLLDBDebugSessionInfoVarObj varObj;
+ if (!CMICmnLLDBDebugSessionInfoVarObj::VarObjGet(rVarObjName, varObj)) {
+ SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_VARIABLE_DOESNOTEXIST),
+ m_cmdData.strMiCmd.c_str(),
+ rVarObjName.c_str()));
+ return MIstatus::failure;
+ }
- lldb::SBValue &rValue = const_cast<lldb::SBValue &>(varObj.GetValue());
- m_bValueValid = rValue.IsValid();
- if (!m_bValueValid)
- return MIstatus::success;
+ lldb::SBValue &rValue = const_cast<lldb::SBValue &>(varObj.GetValue());
+ m_bValueValid = rValue.IsValid();
+ if (!m_bValueValid)
+ return MIstatus::success;
- m_varObjName = rVarObjName;
- varObj.UpdateValue();
+ m_varObjName = rVarObjName;
+ varObj.UpdateValue();
- return MIstatus::success;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command prepares a MI Record Result
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command prepares a MI Record
+// Result
// for the work carried out in the Execute().
// Type: Overridden.
// Args: None.
@@ -1199,46 +1230,48 @@ CMICmdCmdVarEvaluateExpression::Execute(
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdVarEvaluateExpression::Acknowledge()
-{
- if (m_bValueValid)
- {
- CMICmnLLDBDebugSessionInfoVarObj varObj;
- CMICmnLLDBDebugSessionInfoVarObj::VarObjGet(m_varObjName, varObj);
- const CMICmnMIValueConst miValueConst(varObj.GetValueFormatted());
- const CMICmnMIValueResult miValueResult("value", miValueConst);
- const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, miValueResult);
- m_miResultRecord = miRecordResult;
- return MIstatus::success;
- }
-
- const CMICmnMIValueConst miValueConst("variable invalid");
- const CMICmnMIValueResult miValueResult("msg", miValueConst);
- const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error, miValueResult);
+bool CMICmdCmdVarEvaluateExpression::Acknowledge() {
+ if (m_bValueValid) {
+ CMICmnLLDBDebugSessionInfoVarObj varObj;
+ CMICmnLLDBDebugSessionInfoVarObj::VarObjGet(m_varObjName, varObj);
+ const CMICmnMIValueConst miValueConst(varObj.GetValueFormatted());
+ const CMICmnMIValueResult miValueResult("value", miValueConst);
+ const CMICmnMIResultRecord miRecordResult(
+ m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
+ miValueResult);
m_miResultRecord = miRecordResult;
return MIstatus::success;
+ }
+
+ const CMICmnMIValueConst miValueConst("variable invalid");
+ const CMICmnMIValueResult miValueResult("msg", miValueConst);
+ const CMICmnMIResultRecord miRecordResult(
+ m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error,
+ miValueResult);
+ m_miResultRecord = miRecordResult;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
-// Details: Required by the CMICmdFactory when registering *this command. The factory
+//++
+//------------------------------------------------------------------------------------
+// Details: Required by the CMICmdFactory when registering *this command. The
+// factory
// calls this function to create an instance of *this command.
// Type: Static method.
// Args: None.
// Return: CMICmdBase * - Pointer to a new command.
// Throws: None.
//--
-CMICmdBase *
-CMICmdCmdVarEvaluateExpression::CreateSelf()
-{
- return new CMICmdCmdVarEvaluateExpression();
+CMICmdBase *CMICmdCmdVarEvaluateExpression::CreateSelf() {
+ return new CMICmdCmdVarEvaluateExpression();
}
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdVarInfoPathExpression constructor.
// Type: Method.
// Args: None.
@@ -1246,29 +1279,28 @@ CMICmdCmdVarEvaluateExpression::CreateSe
// Throws: None.
//--
CMICmdCmdVarInfoPathExpression::CMICmdCmdVarInfoPathExpression()
- : m_bValueValid(true)
- , m_constStrArgName("name")
-{
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "var-info-path-expression";
+ : m_bValueValid(true), m_constStrArgName("name") {
+ // Command factory matches this name with that received from the stdin stream
+ m_strMiCmd = "var-info-path-expression";
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdVarInfoPathExpression::CreateSelf;
+ // Required by the CMICmdFactory when registering *this command
+ m_pSelfCreatorFn = &CMICmdCmdVarInfoPathExpression::CreateSelf;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdVarInfoPathExpression destructor.
// Type: Overrideable.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmdCmdVarInfoPathExpression::~CMICmdCmdVarInfoPathExpression()
-{
-}
+CMICmdCmdVarInfoPathExpression::~CMICmdCmdVarInfoPathExpression() {}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The parses the command line options
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The parses the command line
+// options
// arguments to extract values for each of those arguments.
// Type: Overridden.
// Args: None.
@@ -1276,84 +1308,86 @@ CMICmdCmdVarInfoPathExpression::~CMICmdC
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdVarInfoPathExpression::ParseArgs()
-{
- m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgName, true, true));
- return ParseValidateCmdOptions();
+bool CMICmdCmdVarInfoPathExpression::ParseArgs() {
+ m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgName, true, true));
+ return ParseValidateCmdOptions();
}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command does work in this function.
-// The command is likely to communicate with the LLDB SBDebugger in here.
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command does work in this
+// function.
+// The command is likely to communicate with the LLDB SBDebugger in
+// here.
// Type: Overridden.
// Args: None.
// Return: MIstatus::success - Functional succeeded.
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdVarInfoPathExpression::Execute()
-{
- CMICMDBASE_GETOPTION(pArgName, String, m_constStrArgName);
+bool CMICmdCmdVarInfoPathExpression::Execute() {
+ CMICMDBASE_GETOPTION(pArgName, String, m_constStrArgName);
- const CMIUtilString &rVarObjName(pArgName->GetValue());
- CMICmnLLDBDebugSessionInfoVarObj varObj;
- if (!CMICmnLLDBDebugSessionInfoVarObj::VarObjGet(rVarObjName, varObj))
- {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_VARIABLE_DOESNOTEXIST), m_cmdData.strMiCmd.c_str(), rVarObjName.c_str()));
- return MIstatus::failure;
- }
-
- lldb::SBValue &rValue = const_cast<lldb::SBValue &>(varObj.GetValue());
- m_bValueValid = rValue.IsValid();
- if (!m_bValueValid)
- return MIstatus::success;
-
- lldb::SBStream stream;
- if (!rValue.GetExpressionPath(stream, true))
- {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_VARIABLE_EXPRESSIONPATH), m_cmdData.strMiCmd.c_str(), rVarObjName.c_str()));
- return MIstatus::failure;
- }
+ const CMIUtilString &rVarObjName(pArgName->GetValue());
+ CMICmnLLDBDebugSessionInfoVarObj varObj;
+ if (!CMICmnLLDBDebugSessionInfoVarObj::VarObjGet(rVarObjName, varObj)) {
+ SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_VARIABLE_DOESNOTEXIST),
+ m_cmdData.strMiCmd.c_str(),
+ rVarObjName.c_str()));
+ return MIstatus::failure;
+ }
- const char *pPathExpression = stream.GetData();
- if (pPathExpression == nullptr)
- {
- // Build expression from what we do know
- m_strPathExpression = varObj.GetNameReal();
- return MIstatus::success;
- }
+ lldb::SBValue &rValue = const_cast<lldb::SBValue &>(varObj.GetValue());
+ m_bValueValid = rValue.IsValid();
+ if (!m_bValueValid)
+ return MIstatus::success;
- // Has LLDB returned a var signature of it's own
- if (pPathExpression[0] != '$')
- {
- m_strPathExpression = pPathExpression;
- return MIstatus::success;
- }
+ lldb::SBStream stream;
+ if (!rValue.GetExpressionPath(stream, true)) {
+ SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_VARIABLE_EXPRESSIONPATH),
+ m_cmdData.strMiCmd.c_str(),
+ rVarObjName.c_str()));
+ return MIstatus::failure;
+ }
+ const char *pPathExpression = stream.GetData();
+ if (pPathExpression == nullptr) {
// Build expression from what we do know
- const CMIUtilString &rVarParentName(varObj.GetVarParentName());
- if (rVarParentName.empty())
- {
- m_strPathExpression = varObj.GetNameReal();
- }
- else
- {
- CMICmnLLDBDebugSessionInfoVarObj varObjParent;
- if (!CMICmnLLDBDebugSessionInfoVarObj::VarObjGet(rVarParentName, varObjParent))
- {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_VARIABLE_DOESNOTEXIST), m_cmdData.strMiCmd.c_str(), rVarParentName.c_str()));
- return MIstatus::failure;
- }
- m_strPathExpression = CMIUtilString::Format("%s.%s", varObjParent.GetNameReal().c_str(), varObj.GetNameReal().c_str());
- }
+ m_strPathExpression = varObj.GetNameReal();
+ return MIstatus::success;
+ }
+ // Has LLDB returned a var signature of it's own
+ if (pPathExpression[0] != '$') {
+ m_strPathExpression = pPathExpression;
return MIstatus::success;
-}
+ }
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command prepares a MI Record Result
+ // Build expression from what we do know
+ const CMIUtilString &rVarParentName(varObj.GetVarParentName());
+ if (rVarParentName.empty()) {
+ m_strPathExpression = varObj.GetNameReal();
+ } else {
+ CMICmnLLDBDebugSessionInfoVarObj varObjParent;
+ if (!CMICmnLLDBDebugSessionInfoVarObj::VarObjGet(rVarParentName,
+ varObjParent)) {
+ SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_VARIABLE_DOESNOTEXIST),
+ m_cmdData.strMiCmd.c_str(),
+ rVarParentName.c_str()));
+ return MIstatus::failure;
+ }
+ m_strPathExpression =
+ CMIUtilString::Format("%s.%s", varObjParent.GetNameReal().c_str(),
+ varObj.GetNameReal().c_str());
+ }
+
+ return MIstatus::success;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command prepares a MI Record
+// Result
// for the work carried out in the Execute().
// Type: Overridden.
// Args: None.
@@ -1361,45 +1395,47 @@ CMICmdCmdVarInfoPathExpression::Execute(
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdVarInfoPathExpression::Acknowledge()
-{
- if (m_bValueValid)
- {
- const CMICmnMIValueConst miValueConst(m_strPathExpression);
- const CMICmnMIValueResult miValueResult("path_expr", miValueConst);
- const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, miValueResult);
- m_miResultRecord = miRecordResult;
- return MIstatus::success;
- }
-
- const CMICmnMIValueConst miValueConst("variable invalid");
- const CMICmnMIValueResult miValueResult("msg", miValueConst);
- const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error, miValueResult);
+bool CMICmdCmdVarInfoPathExpression::Acknowledge() {
+ if (m_bValueValid) {
+ const CMICmnMIValueConst miValueConst(m_strPathExpression);
+ const CMICmnMIValueResult miValueResult("path_expr", miValueConst);
+ const CMICmnMIResultRecord miRecordResult(
+ m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
+ miValueResult);
m_miResultRecord = miRecordResult;
-
return MIstatus::success;
-}
+ }
-//++ ------------------------------------------------------------------------------------
-// Details: Required by the CMICmdFactory when registering *this command. The factory
+ const CMICmnMIValueConst miValueConst("variable invalid");
+ const CMICmnMIValueResult miValueResult("msg", miValueConst);
+ const CMICmnMIResultRecord miRecordResult(
+ m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error,
+ miValueResult);
+ m_miResultRecord = miRecordResult;
+
+ return MIstatus::success;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: Required by the CMICmdFactory when registering *this command. The
+// factory
// calls this function to create an instance of *this command.
// Type: Static method.
// Args: None.
// Return: CMICmdBase * - Pointer to a new command.
// Throws: None.
//--
-CMICmdBase *
-CMICmdCmdVarInfoPathExpression::CreateSelf()
-{
- return new CMICmdCmdVarInfoPathExpression();
+CMICmdBase *CMICmdCmdVarInfoPathExpression::CreateSelf() {
+ return new CMICmdCmdVarInfoPathExpression();
}
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdVarShowAttributes constructor.
// Type: Method.
// Args: None.
@@ -1407,28 +1443,28 @@ CMICmdCmdVarInfoPathExpression::CreateSe
// Throws: None.
//--
CMICmdCmdVarShowAttributes::CMICmdCmdVarShowAttributes()
- : m_constStrArgName("name")
-{
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "var-show-attributes";
+ : m_constStrArgName("name") {
+ // Command factory matches this name with that received from the stdin stream
+ m_strMiCmd = "var-show-attributes";
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdVarShowAttributes::CreateSelf;
+ // Required by the CMICmdFactory when registering *this command
+ m_pSelfCreatorFn = &CMICmdCmdVarShowAttributes::CreateSelf;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdCmdVarShowAttributes destructor.
// Type: Overrideable.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmdCmdVarShowAttributes::~CMICmdCmdVarShowAttributes()
-{
-}
+CMICmdCmdVarShowAttributes::~CMICmdCmdVarShowAttributes() {}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The parses the command line options
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The parses the command line
+// options
// arguments to extract values for each of those arguments.
// Type: Overridden.
// Args: None.
@@ -1436,40 +1472,42 @@ CMICmdCmdVarShowAttributes::~CMICmdCmdVa
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdVarShowAttributes::ParseArgs()
-{
- m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgName, true, true));
- return ParseValidateCmdOptions();
+bool CMICmdCmdVarShowAttributes::ParseArgs() {
+ m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgName, true, true));
+ return ParseValidateCmdOptions();
}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command does work in this function.
-// The command is likely to communicate with the LLDB SBDebugger in here.
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command does work in this
+// function.
+// The command is likely to communicate with the LLDB SBDebugger in
+// here.
// Type: Overridden.
// Args: None.
// Return: MIstatus::success - Functional succeeded.
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdVarShowAttributes::Execute()
-{
- CMICMDBASE_GETOPTION(pArgName, String, m_constStrArgName);
+bool CMICmdCmdVarShowAttributes::Execute() {
+ CMICMDBASE_GETOPTION(pArgName, String, m_constStrArgName);
- const CMIUtilString &rVarObjName(pArgName->GetValue());
- CMICmnLLDBDebugSessionInfoVarObj varObj;
- if (!CMICmnLLDBDebugSessionInfoVarObj::VarObjGet(rVarObjName, varObj))
- {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_VARIABLE_DOESNOTEXIST), m_cmdData.strMiCmd.c_str(), rVarObjName.c_str()));
- return MIstatus::failure;
- }
+ const CMIUtilString &rVarObjName(pArgName->GetValue());
+ CMICmnLLDBDebugSessionInfoVarObj varObj;
+ if (!CMICmnLLDBDebugSessionInfoVarObj::VarObjGet(rVarObjName, varObj)) {
+ SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_VARIABLE_DOESNOTEXIST),
+ m_cmdData.strMiCmd.c_str(),
+ rVarObjName.c_str()));
+ return MIstatus::failure;
+ }
- return MIstatus::success;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command prepares a MI Record Result
+//++
+//------------------------------------------------------------------------------------
+// Details: The invoker requires this function. The command prepares a MI Record
+// Result
// for the work carried out in the Execute().
// Type: Overridden.
// Args: None.
@@ -1477,28 +1515,28 @@ CMICmdCmdVarShowAttributes::Execute()
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdCmdVarShowAttributes::Acknowledge()
-{
- // MI output: "%s^done,status=\"editable\"]"
- const CMICmnMIValueConst miValueConst("editable");
- const CMICmnMIValueResult miValueResult("status", miValueConst);
- const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, miValueResult);
- m_miResultRecord = miRecordResult;
-
- return MIstatus::success;
-}
-
-//++ ------------------------------------------------------------------------------------
-// Details: Required by the CMICmdFactory when registering *this command. The factory
+bool CMICmdCmdVarShowAttributes::Acknowledge() {
+ // MI output: "%s^done,status=\"editable\"]"
+ const CMICmnMIValueConst miValueConst("editable");
+ const CMICmnMIValueResult miValueResult("status", miValueConst);
+ const CMICmnMIResultRecord miRecordResult(
+ m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
+ miValueResult);
+ m_miResultRecord = miRecordResult;
+
+ return MIstatus::success;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: Required by the CMICmdFactory when registering *this command. The
+// factory
// calls this function to create an instance of *this command.
// Type: Static method.
// Args: None.
// Return: CMICmdBase * - Pointer to a new command.
// Throws: None.
//--
-CMICmdBase *
-CMICmdCmdVarShowAttributes::CreateSelf()
-{
- return new CMICmdCmdVarShowAttributes();
+CMICmdBase *CMICmdCmdVarShowAttributes::CreateSelf() {
+ return new CMICmdCmdVarShowAttributes();
}
Modified: lldb/trunk/tools/lldb-mi/MICmdCmdVar.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdVar.h?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdVar.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdVar.h Tue Sep 6 15:57:50 2016
@@ -17,328 +17,333 @@
// CMICmdCmdVarInfoPathExpression interface.
// CMICmdCmdVarShowAttributes interface.
//
-// To implement new MI commands derive a new command class from the command base
-// class. To enable the new command for interpretation add the new command class
+// To implement new MI commands derive a new command class from the
+// command base
+// class. To enable the new command for interpretation add the new
+// command class
// to the command factory. The files of relevance are:
// MICmdCommands.cpp
// MICmdBase.h / .cpp
// MICmdCmd.h / .cpp
-// For an introduction to adding a new command see CMICmdCmdSupportInfoMiCmdQuery
+// For an introduction to adding a new command see
+// CMICmdCmdSupportInfoMiCmdQuery
// command class as an example.
#pragma once
// In-house headers:
#include "MICmdBase.h"
-#include "MICmnMIValueTuple.h"
-#include "MICmnMIValueList.h"
#include "MICmnLLDBDebugSessionInfo.h"
#include "MICmnLLDBDebugSessionInfoVarObj.h"
+#include "MICmnMIValueList.h"
+#include "MICmnMIValueTuple.h"
// Declarations:
class CMICmnLLDBDebugSessionInfoVarObj;
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI command class. MI commands derived from the command base class.
// *this class implements MI command "var-create".
//--
-class CMICmdCmdVarCreate : public CMICmdBase
-{
- // Statics:
- public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
- public:
- /* ctor */ CMICmdCmdVarCreate();
-
- // Overridden:
- public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
-
- // Overridden:
- public:
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdVarCreate() override;
-
- // Methods:
- private:
- void CompleteSBValue(lldb::SBValue &vrwValue);
-
- // Attribute:
- private:
- CMIUtilString m_strVarName;
- MIuint m_nChildren;
- MIuint64 m_nThreadId;
- CMIUtilString m_strType;
- bool m_bValid; // True = Variable is valid, false = not valid
- CMIUtilString m_strExpression;
- CMIUtilString m_strValue;
- const CMIUtilString m_constStrArgName;
- const CMIUtilString m_constStrArgFrameAddr;
- const CMIUtilString m_constStrArgExpression;
+class CMICmdCmdVarCreate : public CMICmdBase {
+ // Statics:
+public:
+ // Required by the CMICmdFactory when registering *this command
+ static CMICmdBase *CreateSelf();
+
+ // Methods:
+public:
+ /* ctor */ CMICmdCmdVarCreate();
+
+ // Overridden:
+public:
+ // From CMICmdInvoker::ICmd
+ bool Execute() override;
+ bool Acknowledge() override;
+ bool ParseArgs() override;
+
+ // Overridden:
+public:
+ // From CMICmnBase
+ /* dtor */ ~CMICmdCmdVarCreate() override;
+
+ // Methods:
+private:
+ void CompleteSBValue(lldb::SBValue &vrwValue);
+
+ // Attribute:
+private:
+ CMIUtilString m_strVarName;
+ MIuint m_nChildren;
+ MIuint64 m_nThreadId;
+ CMIUtilString m_strType;
+ bool m_bValid; // True = Variable is valid, false = not valid
+ CMIUtilString m_strExpression;
+ CMIUtilString m_strValue;
+ const CMIUtilString m_constStrArgName;
+ const CMIUtilString m_constStrArgFrameAddr;
+ const CMIUtilString m_constStrArgExpression;
};
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI command class. MI commands derived from the command base class.
// *this class implements MI command "var-update".
//--
-class CMICmdCmdVarUpdate : public CMICmdBase
-{
- // Statics:
- public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
- public:
- /* ctor */ CMICmdCmdVarUpdate();
-
- // Overridden:
- public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
-
- // Overridden:
- public:
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdVarUpdate() override;
-
- // Methods:
- private:
- bool ExamineSBValueForChange(lldb::SBValue &vrwValue, bool &vrwbChanged);
- void MIFormResponse(const CMIUtilString &vrStrVarName, const char *const vpValue, const CMIUtilString &vrStrScope);
-
- // Attribute:
- private:
- const CMIUtilString m_constStrArgPrintValues;
- const CMIUtilString m_constStrArgName;
- bool m_bValueChanged; // True = yes value changed, false = no change
- CMICmnMIValueList m_miValueList;
+class CMICmdCmdVarUpdate : public CMICmdBase {
+ // Statics:
+public:
+ // Required by the CMICmdFactory when registering *this command
+ static CMICmdBase *CreateSelf();
+
+ // Methods:
+public:
+ /* ctor */ CMICmdCmdVarUpdate();
+
+ // Overridden:
+public:
+ // From CMICmdInvoker::ICmd
+ bool Execute() override;
+ bool Acknowledge() override;
+ bool ParseArgs() override;
+
+ // Overridden:
+public:
+ // From CMICmnBase
+ /* dtor */ ~CMICmdCmdVarUpdate() override;
+
+ // Methods:
+private:
+ bool ExamineSBValueForChange(lldb::SBValue &vrwValue, bool &vrwbChanged);
+ void MIFormResponse(const CMIUtilString &vrStrVarName,
+ const char *const vpValue,
+ const CMIUtilString &vrStrScope);
+
+ // Attribute:
+private:
+ const CMIUtilString m_constStrArgPrintValues;
+ const CMIUtilString m_constStrArgName;
+ bool m_bValueChanged; // True = yes value changed, false = no change
+ CMICmnMIValueList m_miValueList;
};
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI command class. MI commands derived from the command base class.
// *this class implements MI command "var-delete".
//--
-class CMICmdCmdVarDelete : public CMICmdBase
-{
- // Statics:
- public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
- public:
- /* ctor */ CMICmdCmdVarDelete();
-
- // Overridden:
- public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdVarDelete() override;
-
- // Attribute:
- private:
- const CMIUtilString m_constStrArgName;
+class CMICmdCmdVarDelete : public CMICmdBase {
+ // Statics:
+public:
+ // Required by the CMICmdFactory when registering *this command
+ static CMICmdBase *CreateSelf();
+
+ // Methods:
+public:
+ /* ctor */ CMICmdCmdVarDelete();
+
+ // Overridden:
+public:
+ // From CMICmdInvoker::ICmd
+ bool Execute() override;
+ bool Acknowledge() override;
+ bool ParseArgs() override;
+ // From CMICmnBase
+ /* dtor */ ~CMICmdCmdVarDelete() override;
+
+ // Attribute:
+private:
+ const CMIUtilString m_constStrArgName;
};
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI command class. MI commands derived from the command base class.
// *this class implements MI command "var-assign".
//--
-class CMICmdCmdVarAssign : public CMICmdBase
-{
- // Statics:
- public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
- public:
- /* ctor */ CMICmdCmdVarAssign();
-
- // Overridden:
- public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdVarAssign() override;
-
- // Attributes:
- private:
- bool m_bOk; // True = success, false = failure
- CMIUtilString m_varObjName;
- const CMIUtilString m_constStrArgName;
- const CMIUtilString m_constStrArgExpression;
+class CMICmdCmdVarAssign : public CMICmdBase {
+ // Statics:
+public:
+ // Required by the CMICmdFactory when registering *this command
+ static CMICmdBase *CreateSelf();
+
+ // Methods:
+public:
+ /* ctor */ CMICmdCmdVarAssign();
+
+ // Overridden:
+public:
+ // From CMICmdInvoker::ICmd
+ bool Execute() override;
+ bool Acknowledge() override;
+ bool ParseArgs() override;
+ // From CMICmnBase
+ /* dtor */ ~CMICmdCmdVarAssign() override;
+
+ // Attributes:
+private:
+ bool m_bOk; // True = success, false = failure
+ CMIUtilString m_varObjName;
+ const CMIUtilString m_constStrArgName;
+ const CMIUtilString m_constStrArgExpression;
};
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI command class. MI commands derived from the command base class.
// *this class implements MI command "var-set-format".
//--
-class CMICmdCmdVarSetFormat : public CMICmdBase
-{
- // Statics:
- public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
- public:
- /* ctor */ CMICmdCmdVarSetFormat();
-
- // Overridden:
- public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdVarSetFormat() override;
-
- // Attributes:
- private:
- CMIUtilString m_varObjName;
- const CMIUtilString m_constStrArgName;
- const CMIUtilString m_constStrArgFormatSpec;
+class CMICmdCmdVarSetFormat : public CMICmdBase {
+ // Statics:
+public:
+ // Required by the CMICmdFactory when registering *this command
+ static CMICmdBase *CreateSelf();
+
+ // Methods:
+public:
+ /* ctor */ CMICmdCmdVarSetFormat();
+
+ // Overridden:
+public:
+ // From CMICmdInvoker::ICmd
+ bool Execute() override;
+ bool Acknowledge() override;
+ bool ParseArgs() override;
+ // From CMICmnBase
+ /* dtor */ ~CMICmdCmdVarSetFormat() override;
+
+ // Attributes:
+private:
+ CMIUtilString m_varObjName;
+ const CMIUtilString m_constStrArgName;
+ const CMIUtilString m_constStrArgFormatSpec;
};
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI command class. MI commands derived from the command base class.
// *this class implements MI command "var-list-children".
//--
-class CMICmdCmdVarListChildren : public CMICmdBase
-{
- // Statics:
- public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
- public:
- /* ctor */ CMICmdCmdVarListChildren();
-
- // Overridden:
- public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdVarListChildren() override;
-
- // Attributes:
- private:
- const CMIUtilString m_constStrArgPrintValues;
- const CMIUtilString m_constStrArgName;
- const CMIUtilString m_constStrArgFrom;
- const CMIUtilString m_constStrArgTo;
- bool m_bValueValid; // True = yes SBValue object is valid, false = not valid
- MIuint m_nChildren;
- CMICmnMIValueList m_miValueList;
- bool m_bHasMore;
+class CMICmdCmdVarListChildren : public CMICmdBase {
+ // Statics:
+public:
+ // Required by the CMICmdFactory when registering *this command
+ static CMICmdBase *CreateSelf();
+
+ // Methods:
+public:
+ /* ctor */ CMICmdCmdVarListChildren();
+
+ // Overridden:
+public:
+ // From CMICmdInvoker::ICmd
+ bool Execute() override;
+ bool Acknowledge() override;
+ bool ParseArgs() override;
+ // From CMICmnBase
+ /* dtor */ ~CMICmdCmdVarListChildren() override;
+
+ // Attributes:
+private:
+ const CMIUtilString m_constStrArgPrintValues;
+ const CMIUtilString m_constStrArgName;
+ const CMIUtilString m_constStrArgFrom;
+ const CMIUtilString m_constStrArgTo;
+ bool m_bValueValid; // True = yes SBValue object is valid, false = not valid
+ MIuint m_nChildren;
+ CMICmnMIValueList m_miValueList;
+ bool m_bHasMore;
};
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI command class. MI commands derived from the command base class.
// *this class implements MI command "var-evaluate-expression".
//--
-class CMICmdCmdVarEvaluateExpression : public CMICmdBase
-{
- // Statics:
- public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
- public:
- /* ctor */ CMICmdCmdVarEvaluateExpression();
-
- // Overridden:
- public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdVarEvaluateExpression() override;
-
- // Attributes:
- private:
- bool m_bValueValid; // True = yes SBValue object is valid, false = not valid
- CMIUtilString m_varObjName;
- const CMIUtilString m_constStrArgFormatSpec; // Not handled by *this command
- const CMIUtilString m_constStrArgName;
+class CMICmdCmdVarEvaluateExpression : public CMICmdBase {
+ // Statics:
+public:
+ // Required by the CMICmdFactory when registering *this command
+ static CMICmdBase *CreateSelf();
+
+ // Methods:
+public:
+ /* ctor */ CMICmdCmdVarEvaluateExpression();
+
+ // Overridden:
+public:
+ // From CMICmdInvoker::ICmd
+ bool Execute() override;
+ bool Acknowledge() override;
+ bool ParseArgs() override;
+ // From CMICmnBase
+ /* dtor */ ~CMICmdCmdVarEvaluateExpression() override;
+
+ // Attributes:
+private:
+ bool m_bValueValid; // True = yes SBValue object is valid, false = not valid
+ CMIUtilString m_varObjName;
+ const CMIUtilString m_constStrArgFormatSpec; // Not handled by *this command
+ const CMIUtilString m_constStrArgName;
};
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI command class. MI commands derived from the command base class.
// *this class implements MI command "var-info-path-expression".
//--
-class CMICmdCmdVarInfoPathExpression : public CMICmdBase
-{
- // Statics:
- public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
- public:
- /* ctor */ CMICmdCmdVarInfoPathExpression();
-
- // Overridden:
- public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdVarInfoPathExpression() override;
-
- // Attributes:
- private:
- bool m_bValueValid; // True = yes SBValue object is valid, false = not valid
- CMIUtilString m_strPathExpression;
- const CMIUtilString m_constStrArgName;
+class CMICmdCmdVarInfoPathExpression : public CMICmdBase {
+ // Statics:
+public:
+ // Required by the CMICmdFactory when registering *this command
+ static CMICmdBase *CreateSelf();
+
+ // Methods:
+public:
+ /* ctor */ CMICmdCmdVarInfoPathExpression();
+
+ // Overridden:
+public:
+ // From CMICmdInvoker::ICmd
+ bool Execute() override;
+ bool Acknowledge() override;
+ bool ParseArgs() override;
+ // From CMICmnBase
+ /* dtor */ ~CMICmdCmdVarInfoPathExpression() override;
+
+ // Attributes:
+private:
+ bool m_bValueValid; // True = yes SBValue object is valid, false = not valid
+ CMIUtilString m_strPathExpression;
+ const CMIUtilString m_constStrArgName;
};
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI command class. MI commands derived from the command base class.
// *this class implements MI command "var-show-attributes".
//--
-class CMICmdCmdVarShowAttributes : public CMICmdBase
-{
- // Statics:
- public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
- public:
- /* ctor */ CMICmdCmdVarShowAttributes();
-
- // Overridden:
- public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdVarShowAttributes() override;
-
- // Attributes:
- private:
- const CMIUtilString m_constStrArgName;
+class CMICmdCmdVarShowAttributes : public CMICmdBase {
+ // Statics:
+public:
+ // Required by the CMICmdFactory when registering *this command
+ static CMICmdBase *CreateSelf();
+
+ // Methods:
+public:
+ /* ctor */ CMICmdCmdVarShowAttributes();
+
+ // Overridden:
+public:
+ // From CMICmdInvoker::ICmd
+ bool Execute() override;
+ bool Acknowledge() override;
+ bool ParseArgs() override;
+ // From CMICmnBase
+ /* dtor */ ~CMICmdCmdVarShowAttributes() override;
+
+ // Attributes:
+private:
+ const CMIUtilString m_constStrArgName;
};
Modified: lldb/trunk/tools/lldb-mi/MICmdCommands.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCommands.cpp?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCommands.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCommands.cpp Tue Sep 6 15:57:50 2016
@@ -9,8 +9,10 @@
// Overview: MI command are registered with the MI command factory.
//
-// To implement new MI commands derive a new command class from the command base
-// class. To enable the new command for interpretation add the new command class
+// To implement new MI commands derive a new command class from the
+// command base
+// class. To enable the new command for interpretation add the new
+// command class
// to the command factory. The files of relevance are:
// MICmdCommands.cpp
// MICmdBase.h / .cpp
@@ -18,7 +20,6 @@
// In-house headers:
#include "MICmdCommands.h"
-#include "MICmdFactory.h"
#include "MICmdCmd.h"
#include "MICmdCmdBreak.h"
#include "MICmdCmdData.h"
@@ -38,30 +39,30 @@
#include "MICmdCmdThread.h"
#include "MICmdCmdTrace.h"
#include "MICmdCmdVar.h"
+#include "MICmdFactory.h"
-namespace MICmnCommands
-{
+namespace MICmnCommands {
template <typename T> static bool Register();
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Command to command factory registration function.
// Type: Template function.
// Args: typename T - A command type class.
-// Return: bool - True = yes command is registered, false = command failed to register.
+// Return: bool - True = yes command is registered, false = command failed to
+// register.
// Throws: None.
//--
-template <typename T>
-static bool
-MICmnCommands::Register()
-{
- static CMICmdFactory &rCmdFactory = CMICmdFactory::Instance();
- const CMIUtilString strMiCmd = T().GetMiCmd();
- CMICmdFactory::CmdCreatorFnPtr fn = T().GetCmdCreatorFn();
- return rCmdFactory.CmdRegister(strMiCmd, fn);
+template <typename T> static bool MICmnCommands::Register() {
+ static CMICmdFactory &rCmdFactory = CMICmdFactory::Instance();
+ const CMIUtilString strMiCmd = T().GetMiCmd();
+ CMICmdFactory::CmdCreatorFnPtr fn = T().GetCmdCreatorFn();
+ return rCmdFactory.CmdRegister(strMiCmd, fn);
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Register commands with MI command factory
// Type: Function.
// Args: None.
@@ -69,70 +70,68 @@ MICmnCommands::Register()
// false = one or more commands failed to register.
// Throws: None.
//--
-bool
-MICmnCommands::RegisterAll()
-{
- bool bOk = MIstatus::success;
-
- bOk &= Register<CMICmdCmdSupportInfoMiCmdQuery>();
- bOk &= Register<CMICmdCmdBreakAfter>();
- bOk &= Register<CMICmdCmdBreakCondition>();
- bOk &= Register<CMICmdCmdBreakDelete>();
- bOk &= Register<CMICmdCmdBreakDisable>();
- bOk &= Register<CMICmdCmdBreakEnable>();
- bOk &= Register<CMICmdCmdBreakInsert>();
- bOk &= Register<CMICmdCmdDataDisassemble>();
- bOk &= Register<CMICmdCmdDataEvaluateExpression>();
- bOk &= Register<CMICmdCmdDataInfoLine>();
- bOk &= Register<CMICmdCmdDataReadMemoryBytes>();
- bOk &= Register<CMICmdCmdDataReadMemory>();
- bOk &= Register<CMICmdCmdDataListRegisterNames>();
- bOk &= Register<CMICmdCmdDataListRegisterValues>();
- bOk &= Register<CMICmdCmdDataWriteMemory>();
- bOk &= Register<CMICmdCmdEnablePrettyPrinting>();
- bOk &= Register<CMICmdCmdEnvironmentCd>();
- bOk &= Register<CMICmdCmdExecAbort>();
- bOk &= Register<CMICmdCmdExecArguments>();
- bOk &= Register<CMICmdCmdExecContinue>();
- bOk &= Register<CMICmdCmdExecInterrupt>();
- bOk &= Register<CMICmdCmdExecFinish>();
- bOk &= Register<CMICmdCmdExecNext>();
- bOk &= Register<CMICmdCmdExecNextInstruction>();
- bOk &= Register<CMICmdCmdExecRun>();
- bOk &= Register<CMICmdCmdExecStep>();
- bOk &= Register<CMICmdCmdExecStepInstruction>();
- bOk &= Register<CMICmdCmdFileExecAndSymbols>();
- bOk &= Register<CMICmdCmdGdbExit>();
- bOk &= Register<CMICmdCmdGdbInfo>();
- bOk &= Register<CMICmdCmdGdbSet>();
- bOk &= Register<CMICmdCmdGdbShow>();
- bOk &= Register<CMICmdCmdGdbThread>();
- bOk &= Register<CMICmdCmdInferiorTtySet>();
- bOk &= Register<CMICmdCmdInterpreterExec>();
- bOk &= Register<CMICmdCmdListThreadGroups>();
- bOk &= Register<CMICmdCmdSource>();
- bOk &= Register<CMICmdCmdStackInfoDepth>();
- bOk &= Register<CMICmdCmdStackInfoFrame>();
- bOk &= Register<CMICmdCmdStackListFrames>();
- bOk &= Register<CMICmdCmdStackListArguments>();
- bOk &= Register<CMICmdCmdStackListLocals>();
- bOk &= Register<CMICmdCmdStackListVariables>();
- bOk &= Register<CMICmdCmdStackSelectFrame>();
- bOk &= Register<CMICmdCmdSupportListFeatures>();
- bOk &= Register<CMICmdCmdSymbolListLines>();
- bOk &= Register<CMICmdCmdTargetSelect>();
- bOk &= Register<CMICmdCmdTargetAttach>();
- bOk &= Register<CMICmdCmdTargetDetach>();
- bOk &= Register<CMICmdCmdThreadInfo>();
- bOk &= Register<CMICmdCmdVarAssign>();
- bOk &= Register<CMICmdCmdVarCreate>();
- bOk &= Register<CMICmdCmdVarDelete>();
- bOk &= Register<CMICmdCmdVarEvaluateExpression>();
- bOk &= Register<CMICmdCmdVarInfoPathExpression>();
- bOk &= Register<CMICmdCmdVarListChildren>();
- bOk &= Register<CMICmdCmdVarSetFormat>();
- bOk &= Register<CMICmdCmdVarShowAttributes>();
- bOk &= Register<CMICmdCmdVarUpdate>();
+bool MICmnCommands::RegisterAll() {
+ bool bOk = MIstatus::success;
+
+ bOk &= Register<CMICmdCmdSupportInfoMiCmdQuery>();
+ bOk &= Register<CMICmdCmdBreakAfter>();
+ bOk &= Register<CMICmdCmdBreakCondition>();
+ bOk &= Register<CMICmdCmdBreakDelete>();
+ bOk &= Register<CMICmdCmdBreakDisable>();
+ bOk &= Register<CMICmdCmdBreakEnable>();
+ bOk &= Register<CMICmdCmdBreakInsert>();
+ bOk &= Register<CMICmdCmdDataDisassemble>();
+ bOk &= Register<CMICmdCmdDataEvaluateExpression>();
+ bOk &= Register<CMICmdCmdDataInfoLine>();
+ bOk &= Register<CMICmdCmdDataReadMemoryBytes>();
+ bOk &= Register<CMICmdCmdDataReadMemory>();
+ bOk &= Register<CMICmdCmdDataListRegisterNames>();
+ bOk &= Register<CMICmdCmdDataListRegisterValues>();
+ bOk &= Register<CMICmdCmdDataWriteMemory>();
+ bOk &= Register<CMICmdCmdEnablePrettyPrinting>();
+ bOk &= Register<CMICmdCmdEnvironmentCd>();
+ bOk &= Register<CMICmdCmdExecAbort>();
+ bOk &= Register<CMICmdCmdExecArguments>();
+ bOk &= Register<CMICmdCmdExecContinue>();
+ bOk &= Register<CMICmdCmdExecInterrupt>();
+ bOk &= Register<CMICmdCmdExecFinish>();
+ bOk &= Register<CMICmdCmdExecNext>();
+ bOk &= Register<CMICmdCmdExecNextInstruction>();
+ bOk &= Register<CMICmdCmdExecRun>();
+ bOk &= Register<CMICmdCmdExecStep>();
+ bOk &= Register<CMICmdCmdExecStepInstruction>();
+ bOk &= Register<CMICmdCmdFileExecAndSymbols>();
+ bOk &= Register<CMICmdCmdGdbExit>();
+ bOk &= Register<CMICmdCmdGdbInfo>();
+ bOk &= Register<CMICmdCmdGdbSet>();
+ bOk &= Register<CMICmdCmdGdbShow>();
+ bOk &= Register<CMICmdCmdGdbThread>();
+ bOk &= Register<CMICmdCmdInferiorTtySet>();
+ bOk &= Register<CMICmdCmdInterpreterExec>();
+ bOk &= Register<CMICmdCmdListThreadGroups>();
+ bOk &= Register<CMICmdCmdSource>();
+ bOk &= Register<CMICmdCmdStackInfoDepth>();
+ bOk &= Register<CMICmdCmdStackInfoFrame>();
+ bOk &= Register<CMICmdCmdStackListFrames>();
+ bOk &= Register<CMICmdCmdStackListArguments>();
+ bOk &= Register<CMICmdCmdStackListLocals>();
+ bOk &= Register<CMICmdCmdStackListVariables>();
+ bOk &= Register<CMICmdCmdStackSelectFrame>();
+ bOk &= Register<CMICmdCmdSupportListFeatures>();
+ bOk &= Register<CMICmdCmdSymbolListLines>();
+ bOk &= Register<CMICmdCmdTargetSelect>();
+ bOk &= Register<CMICmdCmdTargetAttach>();
+ bOk &= Register<CMICmdCmdTargetDetach>();
+ bOk &= Register<CMICmdCmdThreadInfo>();
+ bOk &= Register<CMICmdCmdVarAssign>();
+ bOk &= Register<CMICmdCmdVarCreate>();
+ bOk &= Register<CMICmdCmdVarDelete>();
+ bOk &= Register<CMICmdCmdVarEvaluateExpression>();
+ bOk &= Register<CMICmdCmdVarInfoPathExpression>();
+ bOk &= Register<CMICmdCmdVarListChildren>();
+ bOk &= Register<CMICmdCmdVarSetFormat>();
+ bOk &= Register<CMICmdCmdVarShowAttributes>();
+ bOk &= Register<CMICmdCmdVarUpdate>();
- return bOk;
+ return bOk;
}
Modified: lldb/trunk/tools/lldb-mi/MICmdCommands.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCommands.h?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCommands.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCommands.h Tue Sep 6 15:57:50 2016
@@ -9,10 +9,10 @@
#pragma once
-namespace MICmnCommands
-{
+namespace MICmnCommands {
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI Command are instantiated and registered automatically with the
// Command Factory
//--
Modified: lldb/trunk/tools/lldb-mi/MICmdData.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdData.h?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdData.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdData.h Tue Sep 6 15:57:50 2016
@@ -12,47 +12,48 @@
// In-house headers:
#include "MICmnResources.h"
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI command metadata. Holds the command's name, MI number and options
-// as found on stdin. Holds the command's MI output (written to stdout).
+// as found on stdin. Holds the command's MI output (written to
+// stdout).
//--
-struct SMICmdData
-{
- SMICmdData()
- : id(0)
- , bCmdValid(false)
- , bCmdExecutedSuccessfully(false)
- , bMIOldStyle(false)
- , bHasResultRecordExtra(false){}
+struct SMICmdData {
+ SMICmdData()
+ : id(0), bCmdValid(false), bCmdExecutedSuccessfully(false),
+ bMIOldStyle(false), bHasResultRecordExtra(false) {}
- MIuint id; // A command's unique ID i.e. GUID
- CMIUtilString strMiCmdToken; // The command's MI token (a number)
- CMIUtilString strMiCmd; // The command's name
- CMIUtilString strMiCmdOption; // The command's arguments or options
- CMIUtilString strMiCmdAll; // The text as received from the client
- CMIUtilString strMiCmdResultRecord; // Each command forms 1 response to its input
- CMIUtilString strMiCmdResultRecordExtra; // Hack command produce more response text to help the client because of using LLDB
- bool bCmdValid; // True = Valid MI format command, false = invalid
- bool bCmdExecutedSuccessfully; // True = Command finished successfully, false = Did not start/did not complete
- CMIUtilString strErrorDescription; // Command failed this is why
- bool bMIOldStyle; // True = format "3thread", false = format "3-thread"
- bool
- bHasResultRecordExtra; // True = Yes command produced additional MI output to its 1 line response, false = no extra MI output formed
+ MIuint id; // A command's unique ID i.e. GUID
+ CMIUtilString strMiCmdToken; // The command's MI token (a number)
+ CMIUtilString strMiCmd; // The command's name
+ CMIUtilString strMiCmdOption; // The command's arguments or options
+ CMIUtilString strMiCmdAll; // The text as received from the client
+ CMIUtilString
+ strMiCmdResultRecord; // Each command forms 1 response to its input
+ CMIUtilString strMiCmdResultRecordExtra; // Hack command produce more response
+ // text to help the client because of
+ // using LLDB
+ bool bCmdValid; // True = Valid MI format command, false = invalid
+ bool bCmdExecutedSuccessfully; // True = Command finished successfully, false
+ // = Did not start/did not complete
+ CMIUtilString strErrorDescription; // Command failed this is why
+ bool bMIOldStyle; // True = format "3thread", false = format "3-thread"
+ bool bHasResultRecordExtra; // True = Yes command produced additional MI
+ // output to its 1 line response, false = no extra
+ // MI output formed
- void
- Clear()
- {
- id = 0;
- strMiCmdToken.clear();
- strMiCmd = MIRSRC(IDS_CMD_ERR_CMD_RUN_BUT_NO_ACTION);
- strMiCmdOption.clear();
- strMiCmdAll.clear();
- strMiCmdResultRecord.clear();
- strMiCmdResultRecordExtra.clear();
- bCmdValid = false;
- bCmdExecutedSuccessfully = false;
- strErrorDescription.clear();
- bMIOldStyle = false;
- bHasResultRecordExtra = false;
- }
+ void Clear() {
+ id = 0;
+ strMiCmdToken.clear();
+ strMiCmd = MIRSRC(IDS_CMD_ERR_CMD_RUN_BUT_NO_ACTION);
+ strMiCmdOption.clear();
+ strMiCmdAll.clear();
+ strMiCmdResultRecord.clear();
+ strMiCmdResultRecordExtra.clear();
+ bCmdValid = false;
+ bCmdExecutedSuccessfully = false;
+ strErrorDescription.clear();
+ bMIOldStyle = false;
+ bHasResultRecordExtra = false;
+ }
};
Modified: lldb/trunk/tools/lldb-mi/MICmdFactory.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdFactory.cpp?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdFactory.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdFactory.cpp Tue Sep 6 15:57:50 2016
@@ -9,35 +9,33 @@
// In-house headers:
#include "MICmdFactory.h"
-#include "MICmnResources.h"
-#include "MICmdData.h"
#include "MICmdBase.h"
#include "MICmdCommands.h"
+#include "MICmdData.h"
+#include "MICmnResources.h"
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdFactory constructor.
// Type: Method.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmdFactory::CMICmdFactory()
-{
-}
+CMICmdFactory::CMICmdFactory() {}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdFactory destructor.
// Type: Overridable.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmdFactory::~CMICmdFactory()
-{
- Shutdown();
-}
+CMICmdFactory::~CMICmdFactory() { Shutdown(); }
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Initialize resources for *this Command factory.
// Type: Method.
// Args: None.
@@ -45,22 +43,21 @@ CMICmdFactory::~CMICmdFactory()
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmdFactory::Initialize()
-{
- m_clientUsageRefCnt++;
+bool CMICmdFactory::Initialize() {
+ m_clientUsageRefCnt++;
- if (m_bInitialized)
- return MIstatus::success;
+ if (m_bInitialized)
+ return MIstatus::success;
- m_bInitialized = true;
+ m_bInitialized = true;
- MICmnCommands::RegisterAll();
+ MICmnCommands::RegisterAll();
- return MIstatus::success;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Release resources for *this Command Factory.
// Type: Method.
// Args: None.
@@ -68,24 +65,24 @@ CMICmdFactory::Initialize()
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmdFactory::Shutdown()
-{
- if (--m_clientUsageRefCnt > 0)
- return MIstatus::success;
+bool CMICmdFactory::Shutdown() {
+ if (--m_clientUsageRefCnt > 0)
+ return MIstatus::success;
- if (!m_bInitialized)
- return MIstatus::success;
+ if (!m_bInitialized)
+ return MIstatus::success;
- m_mapMiCmdToCmdCreatorFn.clear();
+ m_mapMiCmdToCmdCreatorFn.clear();
- m_bInitialized = false;
+ m_bInitialized = false;
- return MIstatus::success;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
-// Details: Register a command's creator function with the command identifier the MI
+//++
+//------------------------------------------------------------------------------------
+// Details: Register a command's creator function with the command identifier
+// the MI
// command name i.e. 'file-exec-and-symbols'.
// Type: Method.
// Args: vMiCmd - (R) Command's name, the MI command.
@@ -94,33 +91,33 @@ CMICmdFactory::Shutdown()
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmdFactory::CmdRegister(const CMIUtilString &vMiCmd, CmdCreatorFnPtr vCmdCreateFn)
-{
- if (!IsValid(vMiCmd))
- {
- SetErrorDescription(CMIUtilString::Format(MIRSRC(IDS_CMDFACTORY_ERR_INVALID_CMD_NAME), vMiCmd.c_str()));
- return MIstatus::failure;
- }
- if (vCmdCreateFn == nullptr)
- {
- SetErrorDescription(CMIUtilString::Format(MIRSRC(IDS_CMDFACTORY_ERR_INVALID_CMD_CR8FN), vMiCmd.c_str()));
- return MIstatus::failure;
- }
-
- if (HaveAlready(vMiCmd))
- {
- SetErrorDescription(CMIUtilString::Format(MIRSRC(IDS_CMDFACTORY_ERR_CMD_ALREADY_REGED), vMiCmd.c_str()));
- return MIstatus::failure;
- }
+bool CMICmdFactory::CmdRegister(const CMIUtilString &vMiCmd,
+ CmdCreatorFnPtr vCmdCreateFn) {
+ if (!IsValid(vMiCmd)) {
+ SetErrorDescription(CMIUtilString::Format(
+ MIRSRC(IDS_CMDFACTORY_ERR_INVALID_CMD_NAME), vMiCmd.c_str()));
+ return MIstatus::failure;
+ }
+ if (vCmdCreateFn == nullptr) {
+ SetErrorDescription(CMIUtilString::Format(
+ MIRSRC(IDS_CMDFACTORY_ERR_INVALID_CMD_CR8FN), vMiCmd.c_str()));
+ return MIstatus::failure;
+ }
+
+ if (HaveAlready(vMiCmd)) {
+ SetErrorDescription(CMIUtilString::Format(
+ MIRSRC(IDS_CMDFACTORY_ERR_CMD_ALREADY_REGED), vMiCmd.c_str()));
+ return MIstatus::failure;
+ }
- MapPairMiCmdToCmdCreatorFn_t pr(vMiCmd, vCmdCreateFn);
- m_mapMiCmdToCmdCreatorFn.insert(pr);
+ MapPairMiCmdToCmdCreatorFn_t pr(vMiCmd, vCmdCreateFn);
+ m_mapMiCmdToCmdCreatorFn.insert(pr);
- return MIstatus::success;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Check a command is already registered.
// Type: Method.
// Args: vMiCmd - (R) Command's name, the MI command.
@@ -128,17 +125,17 @@ CMICmdFactory::CmdRegister(const CMIUtil
// False - not found.
// Throws: None.
//--
-bool
-CMICmdFactory::HaveAlready(const CMIUtilString &vMiCmd) const
-{
- const MapMiCmdToCmdCreatorFn_t::const_iterator it = m_mapMiCmdToCmdCreatorFn.find(vMiCmd);
- if (it != m_mapMiCmdToCmdCreatorFn.end())
- return true;
+bool CMICmdFactory::HaveAlready(const CMIUtilString &vMiCmd) const {
+ const MapMiCmdToCmdCreatorFn_t::const_iterator it =
+ m_mapMiCmdToCmdCreatorFn.find(vMiCmd);
+ if (it != m_mapMiCmdToCmdCreatorFn.end())
+ return true;
- return false;
+ return false;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Check a command's name is valid:
// - name is not empty
// - name does not have spaces
@@ -148,25 +145,23 @@ CMICmdFactory::HaveAlready(const CMIUtil
// False - not valid.
// Throws: None.
//--
-bool
-CMICmdFactory::IsValid(const CMIUtilString &vMiCmd) const
-{
- bool bValid = true;
+bool CMICmdFactory::IsValid(const CMIUtilString &vMiCmd) const {
+ bool bValid = true;
- if (vMiCmd.empty())
- {
- bValid = false;
- return false;
- }
+ if (vMiCmd.empty()) {
+ bValid = false;
+ return false;
+ }
- const size_t nPos = vMiCmd.find(' ');
- if (nPos != std::string::npos)
- bValid = false;
+ const size_t nPos = vMiCmd.find(' ');
+ if (nPos != std::string::npos)
+ bValid = false;
- return bValid;
+ return bValid;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Check a command is already registered.
// Type: Method.
// Args: vMiCmd - (R) Command's name, the MI command.
@@ -174,49 +169,51 @@ CMICmdFactory::IsValid(const CMIUtilStri
// False - not found.
// Throws: None.
//--
-bool
-CMICmdFactory::CmdExist(const CMIUtilString &vMiCmd) const
-{
- return HaveAlready(vMiCmd);
+bool CMICmdFactory::CmdExist(const CMIUtilString &vMiCmd) const {
+ return HaveAlready(vMiCmd);
}
-//++ ------------------------------------------------------------------------------------
-// Details: Create a command given the specified MI command name. The command data object
+//++
+//------------------------------------------------------------------------------------
+// Details: Create a command given the specified MI command name. The command
+// data object
// contains the options for the command.
// Type: Method.
// Args: vMiCmd - (R) Command's name, the MI command.
-// vCmdData - (RW) Command's metadata status/information/result object.
+// vCmdData - (RW) Command's metadata status/information/result
+// object.
// vpNewCmd - (W) New command instance.
// Return: MIstatus::success - Functionality succeeded.
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmdFactory::CmdCreate(const CMIUtilString &vMiCmd, const SMICmdData &vCmdData, CMICmdBase *&vpNewCmd)
-{
- vpNewCmd = nullptr;
-
- if (!IsValid(vMiCmd))
- {
- SetErrorDescription(CMIUtilString::Format(MIRSRC(IDS_CMDFACTORY_ERR_INVALID_CMD_NAME), vMiCmd.c_str()));
- return MIstatus::failure;
- }
- if (!HaveAlready(vMiCmd))
- {
- SetErrorDescription(CMIUtilString::Format(MIRSRC(IDS_CMDFACTORY_ERR_CMD_NOT_REGISTERED), vMiCmd.c_str()));
- return MIstatus::failure;
- }
-
- const MapMiCmdToCmdCreatorFn_t::const_iterator it = m_mapMiCmdToCmdCreatorFn.find(vMiCmd);
- const CMIUtilString &rMiCmd((*it).first);
- MIunused(rMiCmd);
- CmdCreatorFnPtr pFn = (*it).second;
- CMICmdBase *pCmd = (*pFn)();
-
- SMICmdData cmdData(vCmdData);
- cmdData.id = pCmd->GetGUID();
- pCmd->SetCmdData(cmdData);
- vpNewCmd = pCmd;
+bool CMICmdFactory::CmdCreate(const CMIUtilString &vMiCmd,
+ const SMICmdData &vCmdData,
+ CMICmdBase *&vpNewCmd) {
+ vpNewCmd = nullptr;
+
+ if (!IsValid(vMiCmd)) {
+ SetErrorDescription(CMIUtilString::Format(
+ MIRSRC(IDS_CMDFACTORY_ERR_INVALID_CMD_NAME), vMiCmd.c_str()));
+ return MIstatus::failure;
+ }
+ if (!HaveAlready(vMiCmd)) {
+ SetErrorDescription(CMIUtilString::Format(
+ MIRSRC(IDS_CMDFACTORY_ERR_CMD_NOT_REGISTERED), vMiCmd.c_str()));
+ return MIstatus::failure;
+ }
+
+ const MapMiCmdToCmdCreatorFn_t::const_iterator it =
+ m_mapMiCmdToCmdCreatorFn.find(vMiCmd);
+ const CMIUtilString &rMiCmd((*it).first);
+ MIunused(rMiCmd);
+ CmdCreatorFnPtr pFn = (*it).second;
+ CMICmdBase *pCmd = (*pFn)();
+
+ SMICmdData cmdData(vCmdData);
+ cmdData.id = pCmd->GetGUID();
+ pCmd->SetCmdData(cmdData);
+ vpNewCmd = pCmd;
- return MIstatus::success;
+ return MIstatus::success;
}
Modified: lldb/trunk/tools/lldb-mi/MICmdFactory.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdFactory.h?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdFactory.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdFactory.h Tue Sep 6 15:57:50 2016
@@ -20,64 +20,66 @@
class CMICmdBase;
struct SMICmdData;
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI Command Factory. Holds a list of registered MI commands that
// MI application understands to interpret. Creates commands objects.
// The Command Factory is carried out in the main thread.
// A singleton class.
//--
-class CMICmdFactory : public CMICmnBase, public MI::ISingleton<CMICmdFactory>
-{
- friend class MI::ISingleton<CMICmdFactory>;
+class CMICmdFactory : public CMICmnBase, public MI::ISingleton<CMICmdFactory> {
+ friend class MI::ISingleton<CMICmdFactory>;
- // Typedefs:
+ // Typedefs:
+public:
+ typedef CMICmdBase *(*CmdCreatorFnPtr)();
+
+ // Class:
+public:
+ //++
+ // Description: Command's factory's interface for commands to implement.
+ //--
+ class ICmd {
public:
- typedef CMICmdBase *(*CmdCreatorFnPtr)();
-
- // Class:
- public:
- //++
- // Description: Command's factory's interface for commands to implement.
- //--
- class ICmd
- {
- public:
- virtual const CMIUtilString &GetMiCmd() const = 0;
- virtual CmdCreatorFnPtr GetCmdCreatorFn() const = 0;
- // virtual CMICmdBase * CreateSelf( void ) = 0; // Not possible as require a static creator
- // function in the command class, here for awareness
-
- /* dtor */ virtual ~ICmd(){}
- };
-
- // Methods:
- public:
- bool Initialize() override;
- bool Shutdown() override;
- bool CmdRegister(const CMIUtilString &vMiCmd, CmdCreatorFnPtr vCmdCreateFn);
- bool CmdCreate(const CMIUtilString &vMiCmd, const SMICmdData &vCmdData, CMICmdBase *&vpNewCmd);
- bool CmdExist(const CMIUtilString &vMiCmd) const;
-
- // Methods:
- private:
- /* ctor */ CMICmdFactory();
- /* ctor */ CMICmdFactory(const CMICmdFactory &);
- void operator=(const CMICmdFactory &);
-
- bool HaveAlready(const CMIUtilString &vMiCmd) const;
- bool IsValid(const CMIUtilString &vMiCmd) const;
-
- // Overridden:
- private:
- // From CMICmnBase
- /* dtor */ ~CMICmdFactory() override;
-
- // Typedefs:
- private:
- typedef std::map<CMIUtilString, CmdCreatorFnPtr> MapMiCmdToCmdCreatorFn_t;
- typedef std::pair<CMIUtilString, CmdCreatorFnPtr> MapPairMiCmdToCmdCreatorFn_t;
-
- // Attributes:
- private:
- MapMiCmdToCmdCreatorFn_t m_mapMiCmdToCmdCreatorFn;
+ virtual const CMIUtilString &GetMiCmd() const = 0;
+ virtual CmdCreatorFnPtr GetCmdCreatorFn() const = 0;
+ // virtual CMICmdBase * CreateSelf( void ) = 0; // Not
+ // possible as require a static creator
+ // function in the command class, here for awareness
+
+ /* dtor */ virtual ~ICmd() {}
+ };
+
+ // Methods:
+public:
+ bool Initialize() override;
+ bool Shutdown() override;
+ bool CmdRegister(const CMIUtilString &vMiCmd, CmdCreatorFnPtr vCmdCreateFn);
+ bool CmdCreate(const CMIUtilString &vMiCmd, const SMICmdData &vCmdData,
+ CMICmdBase *&vpNewCmd);
+ bool CmdExist(const CMIUtilString &vMiCmd) const;
+
+ // Methods:
+private:
+ /* ctor */ CMICmdFactory();
+ /* ctor */ CMICmdFactory(const CMICmdFactory &);
+ void operator=(const CMICmdFactory &);
+
+ bool HaveAlready(const CMIUtilString &vMiCmd) const;
+ bool IsValid(const CMIUtilString &vMiCmd) const;
+
+ // Overridden:
+private:
+ // From CMICmnBase
+ /* dtor */ ~CMICmdFactory() override;
+
+ // Typedefs:
+private:
+ typedef std::map<CMIUtilString, CmdCreatorFnPtr> MapMiCmdToCmdCreatorFn_t;
+ typedef std::pair<CMIUtilString, CmdCreatorFnPtr>
+ MapPairMiCmdToCmdCreatorFn_t;
+
+ // Attributes:
+private:
+ MapMiCmdToCmdCreatorFn_t m_mapMiCmdToCmdCreatorFn;
};
Modified: lldb/trunk/tools/lldb-mi/MICmdInterpreter.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdInterpreter.cpp?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdInterpreter.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdInterpreter.cpp Tue Sep 6 15:57:50 2016
@@ -11,7 +11,8 @@
#include "MICmdInterpreter.h"
#include "MICmdFactory.h"
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdInterpreter constructor.
// Type: Method.
// Args: None.
@@ -19,23 +20,20 @@
// Throws: None.
//--
CMICmdInterpreter::CMICmdInterpreter()
- : m_rCmdFactory(CMICmdFactory::Instance())
-{
-}
+ : m_rCmdFactory(CMICmdFactory::Instance()) {}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdInterpreter destructor.
// Type: Overridable.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmdInterpreter::~CMICmdInterpreter()
-{
- Shutdown();
-}
+CMICmdInterpreter::~CMICmdInterpreter() { Shutdown(); }
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Initialize resources for *this Command Interpreter.
// Type: Method.
// Args: None.
@@ -43,20 +41,19 @@ CMICmdInterpreter::~CMICmdInterpreter()
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdInterpreter::Initialize()
-{
- m_clientUsageRefCnt++;
+bool CMICmdInterpreter::Initialize() {
+ m_clientUsageRefCnt++;
- if (m_bInitialized)
- return MIstatus::success;
+ if (m_bInitialized)
+ return MIstatus::success;
- m_bInitialized = true;
+ m_bInitialized = true;
- return MIstatus::success;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Release resources for *this Command Interpreter.
// Type: Method.
// Args: None.
@@ -64,147 +61,157 @@ CMICmdInterpreter::Initialize()
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdInterpreter::Shutdown()
-{
- if (--m_clientUsageRefCnt > 0)
- return MIstatus::success;
+bool CMICmdInterpreter::Shutdown() {
+ if (--m_clientUsageRefCnt > 0)
+ return MIstatus::success;
- if (!m_bInitialized)
- return MIstatus::success;
+ if (!m_bInitialized)
+ return MIstatus::success;
- m_bInitialized = false;
+ m_bInitialized = false;
- return MIstatus::success;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Establish whether the text data is an MI format type command.
// Type: Method.
// Args: vTextLine - (R) Text data to interpret.
-// vwbYesValid - (W) True = MI type command, false = not recognised.
-// vwbCmdNotInCmdFactor - (W) True = MI command not found in the command factory, false = recognised.
+// vwbYesValid - (W) True = MI type command, false = not
+// recognised.
+// vwbCmdNotInCmdFactor - (W) True = MI command not found in the
+// command factory, false = recognised.
// Return: MIstatus::success - Functional succeeded.
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdInterpreter::ValidateIsMi(const CMIUtilString &vTextLine, bool &vwbYesValid, bool &vwbCmdNotInCmdFactor, SMICmdData &rwCmdData)
-{
- vwbYesValid = false;
- vwbCmdNotInCmdFactor = false;
- rwCmdData.Clear();
-
- if (vTextLine.empty())
- return MIstatus::success;
-
- // MI format is [cmd #]-[command name]<space>[command arg(s)]
- // i.e. 1-file-exec-and-symbols --thread-group i1 DEVICE_EXECUTABLE
- // 5-data-evaluate-expression --thread 1 --frame 0 *(argv)
-
- m_miCmdData.Clear();
- m_miCmdData.strMiCmd = vTextLine;
-
- // The following change m_miCmdData as valid parts are identified
- vwbYesValid = (MiHasCmdTokenEndingHyphen(vTextLine) || MiHasCmdTokenEndingAlpha(vTextLine));
- vwbYesValid = vwbYesValid && MiHasCmd(vTextLine);
- if (vwbYesValid)
- {
- vwbCmdNotInCmdFactor = !HasCmdFactoryGotMiCmd(MiGetCmdData());
- vwbYesValid = !vwbCmdNotInCmdFactor;
- }
-
- // Update command's meta data valid state
- m_miCmdData.bCmdValid = vwbYesValid;
-
- // Ok to return new updated command information
- rwCmdData = MiGetCmdData();
+bool CMICmdInterpreter::ValidateIsMi(const CMIUtilString &vTextLine,
+ bool &vwbYesValid,
+ bool &vwbCmdNotInCmdFactor,
+ SMICmdData &rwCmdData) {
+ vwbYesValid = false;
+ vwbCmdNotInCmdFactor = false;
+ rwCmdData.Clear();
+ if (vTextLine.empty())
return MIstatus::success;
-}
-//++ ------------------------------------------------------------------------------------
-// Details: Establish whether the command name entered on the stdin stream is recognised by
+ // MI format is [cmd #]-[command name]<space>[command arg(s)]
+ // i.e. 1-file-exec-and-symbols --thread-group i1 DEVICE_EXECUTABLE
+ // 5-data-evaluate-expression --thread 1 --frame 0 *(argv)
+
+ m_miCmdData.Clear();
+ m_miCmdData.strMiCmd = vTextLine;
+
+ // The following change m_miCmdData as valid parts are identified
+ vwbYesValid = (MiHasCmdTokenEndingHyphen(vTextLine) ||
+ MiHasCmdTokenEndingAlpha(vTextLine));
+ vwbYesValid = vwbYesValid && MiHasCmd(vTextLine);
+ if (vwbYesValid) {
+ vwbCmdNotInCmdFactor = !HasCmdFactoryGotMiCmd(MiGetCmdData());
+ vwbYesValid = !vwbCmdNotInCmdFactor;
+ }
+
+ // Update command's meta data valid state
+ m_miCmdData.bCmdValid = vwbYesValid;
+
+ // Ok to return new updated command information
+ rwCmdData = MiGetCmdData();
+
+ return MIstatus::success;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: Establish whether the command name entered on the stdin stream is
+// recognised by
// the MI driver.
// Type: Method.
// Args: vCmd - (R) Command information structure.
-// Return: bool - True = yes command is recognised, false = command not recognised.
+// Return: bool - True = yes command is recognised, false = command not
+// recognised.
// Throws: None.
//--
-bool
-CMICmdInterpreter::HasCmdFactoryGotMiCmd(const SMICmdData &vCmd) const
-{
- return m_rCmdFactory.CmdExist(vCmd.strMiCmd);
+bool CMICmdInterpreter::HasCmdFactoryGotMiCmd(const SMICmdData &vCmd) const {
+ return m_rCmdFactory.CmdExist(vCmd.strMiCmd);
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Does the command entered match the criteria for a MI command format.
-// The format to validate against is 'nn-' where there can be 1 to n digits.
+// The format to validate against is 'nn-' where there can be 1 to n
+// digits.
// I.e. '2-gdb-exit'.
-// Is the execution token present? The command token is entered into the
-// command meta data structure whether correct or not for reporting or later
+// Is the execution token present? The command token is entered into
+// the
+// command meta data structure whether correct or not for reporting or
+// later
// command execution purposes.
// Type: Method.
// Args: vTextLine - (R) Text data to interpret.
-// Return: bool - True = yes command token present, false = command not recognised.
+// Return: bool - True = yes command token present, false = command not
+// recognised.
// Throws: None.
//--
-bool
-CMICmdInterpreter::MiHasCmdTokenEndingHyphen(const CMIUtilString &vTextLine)
-{
- // The hyphen is mandatory
- const size_t nPos = vTextLine.find('-', 0);
- if ((nPos == std::string::npos))
- return false;
-
- if (MiHasCmdTokenPresent(vTextLine))
- {
- const std::string strNum = vTextLine.substr(0, nPos);
- if (!CMIUtilString(strNum).IsNumber())
- return false;
+bool CMICmdInterpreter::MiHasCmdTokenEndingHyphen(
+ const CMIUtilString &vTextLine) {
+ // The hyphen is mandatory
+ const size_t nPos = vTextLine.find('-', 0);
+ if ((nPos == std::string::npos))
+ return false;
- m_miCmdData.strMiCmdToken = strNum;
- }
+ if (MiHasCmdTokenPresent(vTextLine)) {
+ const std::string strNum = vTextLine.substr(0, nPos);
+ if (!CMIUtilString(strNum).IsNumber())
+ return false;
+
+ m_miCmdData.strMiCmdToken = strNum;
+ }
- m_miCmdData.bMIOldStyle = false;
+ m_miCmdData.bMIOldStyle = false;
- return true;
+ return true;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Does the command entered match the criteria for a MI command format.
-// The format to validate against is 'nnA' where there can be 1 to n digits.
+// The format to validate against is 'nnA' where there can be 1 to n
+// digits.
// 'A' represents any non numeric token. I.e. '1source .gdbinit'.
-// Is the execution token present? The command token is entered into the
-// command meta data structure whether correct or not for reporting or later
+// Is the execution token present? The command token is entered into
+// the
+// command meta data structure whether correct or not for reporting or
+// later
// command execution purposes.
// Type: Method.
// Args: vTextLine - (R) Text data to interpret.
-// Return: bool - True = yes command token present, false = command not recognised.
+// Return: bool - True = yes command token present, false = command not
+// recognised.
// Throws: None.
//--
-bool
-CMICmdInterpreter::MiHasCmdTokenEndingAlpha(const CMIUtilString &vTextLine)
-{
- char cChar = vTextLine[0];
- MIuint i = 0;
- while (::isdigit(cChar) != 0)
- {
- cChar = vTextLine[++i];
- }
- if (::isalpha(cChar) == 0)
- return false;
- if (i == 0)
- return false;
-
- const std::string strNum = vTextLine.substr(0, i);
- m_miCmdData.strMiCmdToken = strNum.c_str();
- m_miCmdData.bMIOldStyle = true;
+bool CMICmdInterpreter::MiHasCmdTokenEndingAlpha(
+ const CMIUtilString &vTextLine) {
+ char cChar = vTextLine[0];
+ MIuint i = 0;
+ while (::isdigit(cChar) != 0) {
+ cChar = vTextLine[++i];
+ }
+ if (::isalpha(cChar) == 0)
+ return false;
+ if (i == 0)
+ return false;
+
+ const std::string strNum = vTextLine.substr(0, i);
+ m_miCmdData.strMiCmdToken = strNum.c_str();
+ m_miCmdData.bMIOldStyle = true;
- return true;
+ return true;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Does the command entered match the criteria for a MI command format.
// Is the command token present before the hyphen?
// Type: Method.
@@ -212,86 +219,84 @@ CMICmdInterpreter::MiHasCmdTokenEndingAl
// Return: bool - True = yes command token present, false = token not present.
// Throws: None.
//--
-bool
-CMICmdInterpreter::MiHasCmdTokenPresent(const CMIUtilString &vTextLine)
-{
- const size_t nPos = vTextLine.find('-', 0);
- return (nPos > 0);
+bool CMICmdInterpreter::MiHasCmdTokenPresent(const CMIUtilString &vTextLine) {
+ const size_t nPos = vTextLine.find('-', 0);
+ return (nPos > 0);
}
-//++ ------------------------------------------------------------------------------------
-// Details: Does the command name entered match the criteria for a MI command format.
-// Is a recognised command present? The command name is entered into the
-// command meta data structure whether correct or not for reporting or later
-// command execution purposes. Command options is present are also put into the
+//++
+//------------------------------------------------------------------------------------
+// Details: Does the command name entered match the criteria for a MI command
+// format.
+// Is a recognised command present? The command name is entered into
+// the
+// command meta data structure whether correct or not for reporting or
+// later
+// command execution purposes. Command options is present are also put
+// into the
// command meta data structure.
// Type: Method.
// Args: vTextLine - (R) Command information structure.
-// Return: bool - True = yes command name present, false = command not recognised.
+// Return: bool - True = yes command name present, false = command not
+// recognised.
// Throws: None.
//--
-bool
-CMICmdInterpreter::MiHasCmd(const CMIUtilString &vTextLine)
-{
- size_t nPos = 0;
- if (m_miCmdData.bMIOldStyle)
- {
- char cChar = vTextLine[0];
- size_t i = 0;
- while (::isdigit(cChar) != 0)
- {
- cChar = vTextLine[++i];
- }
- nPos = --i;
- }
- else
- {
- nPos = vTextLine.find('-', 0);
- }
-
- bool bFoundCmd = false;
- const size_t nLen = vTextLine.length();
- const size_t nPos2 = vTextLine.find(' ', nPos);
- if (nPos2 != std::string::npos)
- {
- if (nPos2 == nLen)
- return false;
- const CMIUtilString cmd = CMIUtilString(vTextLine.substr(nPos + 1, nPos2 - nPos - 1));
- if (cmd.empty())
- return false;
-
- m_miCmdData.strMiCmd = cmd;
-
- if (nPos2 < nLen)
- m_miCmdData.strMiCmdOption = CMIUtilString(vTextLine.substr(nPos2 + 1, nLen - nPos2 - 1));
-
- bFoundCmd = true;
- }
- else
- {
- const CMIUtilString cmd = CMIUtilString(vTextLine.substr(nPos + 1, nLen - nPos - 1));
- if (cmd.empty())
- return false;
- m_miCmdData.strMiCmd = cmd;
- bFoundCmd = true;
+bool CMICmdInterpreter::MiHasCmd(const CMIUtilString &vTextLine) {
+ size_t nPos = 0;
+ if (m_miCmdData.bMIOldStyle) {
+ char cChar = vTextLine[0];
+ size_t i = 0;
+ while (::isdigit(cChar) != 0) {
+ cChar = vTextLine[++i];
}
-
- if (bFoundCmd)
- m_miCmdData.strMiCmdAll = vTextLine;
-
- return bFoundCmd;
-}
-
-//++ ------------------------------------------------------------------------------------
-// Details: Retrieve the just entered new command from stdin. It contains the command
+ nPos = --i;
+ } else {
+ nPos = vTextLine.find('-', 0);
+ }
+
+ bool bFoundCmd = false;
+ const size_t nLen = vTextLine.length();
+ const size_t nPos2 = vTextLine.find(' ', nPos);
+ if (nPos2 != std::string::npos) {
+ if (nPos2 == nLen)
+ return false;
+ const CMIUtilString cmd =
+ CMIUtilString(vTextLine.substr(nPos + 1, nPos2 - nPos - 1));
+ if (cmd.empty())
+ return false;
+
+ m_miCmdData.strMiCmd = cmd;
+
+ if (nPos2 < nLen)
+ m_miCmdData.strMiCmdOption =
+ CMIUtilString(vTextLine.substr(nPos2 + 1, nLen - nPos2 - 1));
+
+ bFoundCmd = true;
+ } else {
+ const CMIUtilString cmd =
+ CMIUtilString(vTextLine.substr(nPos + 1, nLen - nPos - 1));
+ if (cmd.empty())
+ return false;
+ m_miCmdData.strMiCmd = cmd;
+ bFoundCmd = true;
+ }
+
+ if (bFoundCmd)
+ m_miCmdData.strMiCmdAll = vTextLine;
+
+ return bFoundCmd;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: Retrieve the just entered new command from stdin. It contains the
+// command
// name, number and any options.
// Type: Method.
// Args: vTextLine - (R) Command information structure.
// Return: SMICmdData & - Command meta data information/result/status.
// Throws: None.
//--
-const SMICmdData &
-CMICmdInterpreter::MiGetCmdData() const
-{
- return m_miCmdData;
+const SMICmdData &CMICmdInterpreter::MiGetCmdData() const {
+ return m_miCmdData;
}
Modified: lldb/trunk/tools/lldb-mi/MICmdInterpreter.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdInterpreter.h?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdInterpreter.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdInterpreter.h Tue Sep 6 15:57:50 2016
@@ -10,52 +10,54 @@
#pragma once
// In-house headers:
-#include "MICmnBase.h"
#include "MICmdData.h"
+#include "MICmnBase.h"
#include "MIUtilSingletonBase.h"
// Declarations:
class CMICmdFactory;
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI command interpreter. It takes text data from the MI driver
// (which got it from Stdin singleton) and validate the text to see if
// matches Machine Interface (MI) format and commands defined in the
// MI application.
// A singleton class.
//--
-class CMICmdInterpreter : public CMICmnBase, public MI::ISingleton<CMICmdInterpreter>
-{
- friend MI::ISingleton<CMICmdInterpreter>;
-
- // Methods:
- public:
- // Methods:
- public:
- bool Initialize() override;
- bool Shutdown() override;
- bool ValidateIsMi(const CMIUtilString &vTextLine, bool &vwbYesValid, bool &vwbCmdNotInCmdFactor, SMICmdData &rwCmdData);
-
- // Methods:
- private:
- /* ctor */ CMICmdInterpreter();
- /* ctor */ CMICmdInterpreter(const CMICmdInterpreter &);
- void operator=(const CMICmdInterpreter &);
-
- bool HasCmdFactoryGotMiCmd(const SMICmdData &vCmdData) const;
- bool MiHasCmdTokenEndingHyphen(const CMIUtilString &vTextLine);
- bool MiHasCmdTokenEndingAlpha(const CMIUtilString &vTextLine);
- bool MiHasCmd(const CMIUtilString &vTextLine);
- bool MiHasCmdTokenPresent(const CMIUtilString &vTextLine);
- const SMICmdData &MiGetCmdData() const;
-
- // Overridden:
- private:
- // From CMICmnBase
- /* dtor */ ~CMICmdInterpreter() override;
-
- // Attributes:
- private:
- SMICmdData m_miCmdData; // Filled in on each new line being interpreted
- CMICmdFactory &m_rCmdFactory;
+class CMICmdInterpreter : public CMICmnBase,
+ public MI::ISingleton<CMICmdInterpreter> {
+ friend MI::ISingleton<CMICmdInterpreter>;
+
+ // Methods:
+public:
+ // Methods:
+public:
+ bool Initialize() override;
+ bool Shutdown() override;
+ bool ValidateIsMi(const CMIUtilString &vTextLine, bool &vwbYesValid,
+ bool &vwbCmdNotInCmdFactor, SMICmdData &rwCmdData);
+
+ // Methods:
+private:
+ /* ctor */ CMICmdInterpreter();
+ /* ctor */ CMICmdInterpreter(const CMICmdInterpreter &);
+ void operator=(const CMICmdInterpreter &);
+
+ bool HasCmdFactoryGotMiCmd(const SMICmdData &vCmdData) const;
+ bool MiHasCmdTokenEndingHyphen(const CMIUtilString &vTextLine);
+ bool MiHasCmdTokenEndingAlpha(const CMIUtilString &vTextLine);
+ bool MiHasCmd(const CMIUtilString &vTextLine);
+ bool MiHasCmdTokenPresent(const CMIUtilString &vTextLine);
+ const SMICmdData &MiGetCmdData() const;
+
+ // Overridden:
+private:
+ // From CMICmnBase
+ /* dtor */ ~CMICmdInterpreter() override;
+
+ // Attributes:
+private:
+ SMICmdData m_miCmdData; // Filled in on each new line being interpreted
+ CMICmdFactory &m_rCmdFactory;
};
Modified: lldb/trunk/tools/lldb-mi/MICmdInvoker.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdInvoker.cpp?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdInvoker.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdInvoker.cpp Tue Sep 6 15:57:50 2016
@@ -15,31 +15,28 @@
#include "MICmnStreamStdout.h"
#include "MIDriver.h"
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdInvoker constructor.
// Type: Method.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmdInvoker::CMICmdInvoker()
- : m_rStreamOut(CMICmnStreamStdout::Instance())
-{
-}
+CMICmdInvoker::CMICmdInvoker() : m_rStreamOut(CMICmnStreamStdout::Instance()) {}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdInvoker destructor.
// Type: Overridable.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmdInvoker::~CMICmdInvoker()
-{
- Shutdown();
-}
+CMICmdInvoker::~CMICmdInvoker() { Shutdown(); }
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Initialize resources for *this Command Invoker.
// Type: Method.
// Args: None.
@@ -47,20 +44,19 @@ CMICmdInvoker::~CMICmdInvoker()
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdInvoker::Initialize()
-{
- m_clientUsageRefCnt++;
+bool CMICmdInvoker::Initialize() {
+ m_clientUsageRefCnt++;
- if (m_bInitialized)
- return MIstatus::success;
+ if (m_bInitialized)
+ return MIstatus::success;
- m_bInitialized = true;
+ m_bInitialized = true;
- return MIstatus::success;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Release resources for *this Stdin stream.
// Type: Method.
// Args: None.
@@ -68,115 +64,114 @@ CMICmdInvoker::Initialize()
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdInvoker::Shutdown()
-{
- if (--m_clientUsageRefCnt > 0)
- return MIstatus::success;
+bool CMICmdInvoker::Shutdown() {
+ if (--m_clientUsageRefCnt > 0)
+ return MIstatus::success;
- if (!m_bInitialized)
- return MIstatus::success;
+ if (!m_bInitialized)
+ return MIstatus::success;
- CmdDeleteAll();
+ CmdDeleteAll();
- m_bInitialized = false;
+ m_bInitialized = false;
- return MIstatus::success;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
-// Details: Empty the map of invoked commands doing work. Command objects are deleted too.
+//++
+//------------------------------------------------------------------------------------
+// Details: Empty the map of invoked commands doing work. Command objects are
+// deleted too.
// Type: Method.
// Args: None.
// Return: None.
// Throws: None.
//--
-void
-CMICmdInvoker::CmdDeleteAll()
-{
- CMICmdMgr &rMgr = CMICmdMgr::Instance();
- MapCmdIdToCmd_t::const_iterator it = m_mapCmdIdToCmd.begin();
- while (it != m_mapCmdIdToCmd.end())
- {
- const MIuint cmdId((*it).first);
- MIunused(cmdId);
- CMICmdBase *pCmd = (*it).second;
- const CMIUtilString &rCmdName(pCmd->GetCmdData().strMiCmd);
- MIunused(rCmdName);
- rMgr.CmdDelete(pCmd->GetCmdData());
-
- // Next
- ++it;
- }
- m_mapCmdIdToCmd.clear();
-}
-
-//++ ------------------------------------------------------------------------------------
-// Details: Remove from the map of invoked commands doing work a command that has finished
+void CMICmdInvoker::CmdDeleteAll() {
+ CMICmdMgr &rMgr = CMICmdMgr::Instance();
+ MapCmdIdToCmd_t::const_iterator it = m_mapCmdIdToCmd.begin();
+ while (it != m_mapCmdIdToCmd.end()) {
+ const MIuint cmdId((*it).first);
+ MIunused(cmdId);
+ CMICmdBase *pCmd = (*it).second;
+ const CMIUtilString &rCmdName(pCmd->GetCmdData().strMiCmd);
+ MIunused(rCmdName);
+ rMgr.CmdDelete(pCmd->GetCmdData());
+
+ // Next
+ ++it;
+ }
+ m_mapCmdIdToCmd.clear();
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: Remove from the map of invoked commands doing work a command that
+// has finished
// its work. The command object is deleted too.
// Type: Method.
// Args: vId - (R) Command object's unique ID.
-// vbYesDeleteCmd - (R) True = Delete command object, false = delete via the Command Manager.
+// vbYesDeleteCmd - (R) True = Delete command object, false = delete
+// via the Command Manager.
// Return: None.
// Throws: None.
//--
-bool
-CMICmdInvoker::CmdDelete(const MIuint vId, const bool vbYesDeleteCmd /*= false*/)
-{
- CMICmdMgr &rMgr = CMICmdMgr::Instance();
- MapCmdIdToCmd_t::const_iterator it = m_mapCmdIdToCmd.find(vId);
- if (it != m_mapCmdIdToCmd.end())
- {
- CMICmdBase *pCmd = (*it).second;
- if (vbYesDeleteCmd)
- {
- // Via registered interest command manager callback *this object to delete the command
- m_mapCmdIdToCmd.erase(it);
- delete pCmd;
- }
- else
- // Notify other interested object of this command's pending deletion
- rMgr.CmdDelete(pCmd->GetCmdData());
- }
-
- if (m_mapCmdIdToCmd.empty())
- rMgr.CmdUnregisterForDeleteNotification(*this);
-
- return MIstatus::success;
-}
-
-//++ ------------------------------------------------------------------------------------
-// Details: Add to the map of invoked commands doing work a command that is about to
+bool CMICmdInvoker::CmdDelete(const MIuint vId,
+ const bool vbYesDeleteCmd /*= false*/) {
+ CMICmdMgr &rMgr = CMICmdMgr::Instance();
+ MapCmdIdToCmd_t::const_iterator it = m_mapCmdIdToCmd.find(vId);
+ if (it != m_mapCmdIdToCmd.end()) {
+ CMICmdBase *pCmd = (*it).second;
+ if (vbYesDeleteCmd) {
+ // Via registered interest command manager callback *this object to delete
+ // the command
+ m_mapCmdIdToCmd.erase(it);
+ delete pCmd;
+ } else
+ // Notify other interested object of this command's pending deletion
+ rMgr.CmdDelete(pCmd->GetCmdData());
+ }
+
+ if (m_mapCmdIdToCmd.empty())
+ rMgr.CmdUnregisterForDeleteNotification(*this);
+
+ return MIstatus::success;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: Add to the map of invoked commands doing work a command that is
+// about to
// start to do work.
// Type: Method.
// Args: vCmd - (R) Command object.
// Return: None.
// Throws: None.
//--
-bool
-CMICmdInvoker::CmdAdd(const CMICmdBase &vCmd)
-{
- if (m_mapCmdIdToCmd.empty())
- {
- CMICmdMgr &rMgr = CMICmdMgr::Instance();
- rMgr.CmdRegisterForDeleteNotification(*this);
- }
+bool CMICmdInvoker::CmdAdd(const CMICmdBase &vCmd) {
+ if (m_mapCmdIdToCmd.empty()) {
+ CMICmdMgr &rMgr = CMICmdMgr::Instance();
+ rMgr.CmdRegisterForDeleteNotification(*this);
+ }
- const MIuint &cmdId(vCmd.GetCmdData().id);
- MapCmdIdToCmd_t::const_iterator it = m_mapCmdIdToCmd.find(cmdId);
- if (it != m_mapCmdIdToCmd.end())
- return MIstatus::success;
+ const MIuint &cmdId(vCmd.GetCmdData().id);
+ MapCmdIdToCmd_t::const_iterator it = m_mapCmdIdToCmd.find(cmdId);
+ if (it != m_mapCmdIdToCmd.end())
+ return MIstatus::success;
- MapPairCmdIdToCmd_t pr(cmdId, const_cast<CMICmdBase *>(&vCmd));
- m_mapCmdIdToCmd.insert(pr);
+ MapPairCmdIdToCmd_t pr(cmdId, const_cast<CMICmdBase *>(&vCmd));
+ m_mapCmdIdToCmd.insert(pr);
- return MIstatus::success;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
-// Details: Having previously had the potential command validated and found valid now
+//++
+//------------------------------------------------------------------------------------
+// Details: Having previously had the potential command validated and found
+// valid now
// get the command executed.
-// If the Functionality returns MIstatus::failure call GetErrorDescription().
+// If the Functionality returns MIstatus::failure call
+// GetErrorDescription().
// This function is used by the application's main thread.
// Type: Method.
// Args: vCmd - (RW) Command object.
@@ -184,49 +179,49 @@ CMICmdInvoker::CmdAdd(const CMICmdBase &
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmdInvoker::CmdExecute(CMICmdBase &vCmd)
-{
- bool bOk = CmdAdd(vCmd);
-
- if (bOk)
- {
- vCmd.AddCommonArgs();
- if (!vCmd.ParseArgs())
- {
- // Report command execution failed
- const SMICmdData cmdData(vCmd.GetCmdData());
- CmdStdout(cmdData);
- CmdCauseAppExit(vCmd);
- CmdDelete(cmdData.id);
-
- // Proceed to wait or execute next command
- return MIstatus::success;
- }
- }
+bool CMICmdInvoker::CmdExecute(CMICmdBase &vCmd) {
+ bool bOk = CmdAdd(vCmd);
- if (bOk && !vCmd.Execute())
- {
- // Report command execution failed
- const SMICmdData cmdData(vCmd.GetCmdData());
- CmdStdout(cmdData);
- CmdCauseAppExit(vCmd);
- CmdDelete(cmdData.id);
+ if (bOk) {
+ vCmd.AddCommonArgs();
+ if (!vCmd.ParseArgs()) {
+ // Report command execution failed
+ const SMICmdData cmdData(vCmd.GetCmdData());
+ CmdStdout(cmdData);
+ CmdCauseAppExit(vCmd);
+ CmdDelete(cmdData.id);
- // Proceed to wait or execute next command
- return MIstatus::success;
+ // Proceed to wait or execute next command
+ return MIstatus::success;
}
+ }
+
+ if (bOk && !vCmd.Execute()) {
+ // Report command execution failed
+ const SMICmdData cmdData(vCmd.GetCmdData());
+ CmdStdout(cmdData);
+ CmdCauseAppExit(vCmd);
+ CmdDelete(cmdData.id);
- bOk = CmdExecuteFinished(vCmd);
+ // Proceed to wait or execute next command
+ return MIstatus::success;
+ }
+
+ bOk = CmdExecuteFinished(vCmd);
- return bOk;
+ return bOk;
}
-//++ ------------------------------------------------------------------------------------
-// Details: Called when a command has finished its Execution() work either synchronously
-// because the command executed was the type a non event type or asynchronously
-// via the command's callback (because of an SB Listener event). Needs to be called
-// so that *this invoker call do some house keeping and then proceed to call
+//++
+//------------------------------------------------------------------------------------
+// Details: Called when a command has finished its Execution() work either
+// synchronously
+// because the command executed was the type a non event type or
+// asynchronously
+// via the command's callback (because of an SB Listener event). Needs
+// to be called
+// so that *this invoker call do some house keeping and then proceed to
+// call
// the command's Acknowledge() function.
// Type: Method.
// Args: vCmd - (R) Command object.
@@ -234,67 +229,69 @@ CMICmdInvoker::CmdExecute(CMICmdBase &vC
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmdInvoker::CmdExecuteFinished(CMICmdBase &vCmd)
-{
- // Command finished now get the command to gather it's information and form the MI
- // Result record
- if (!vCmd.Acknowledge())
- {
- // Report command acknowledge functionality failed
- const SMICmdData cmdData(vCmd.GetCmdData());
- CmdStdout(cmdData);
- CmdCauseAppExit(vCmd);
- CmdDelete(cmdData.id);
-
- // Proceed to wait or execute next command
- return MIstatus::success;
- }
-
- // Retrieve the command's latest data/information. Needed for commands of the event type so have
- // a record of commands pending finishing execution.
- const CMIUtilString &rMIResultRecord(vCmd.GetMIResultRecord());
- SMICmdData cmdData(vCmd.GetCmdData()); // Make a copy as the command will be deleted soon
- cmdData.strMiCmdResultRecord = rMIResultRecord; // Precautionary copy as the command might forget to do this
- if (vCmd.HasMIResultRecordExtra())
- {
- cmdData.bHasResultRecordExtra = true;
- const CMIUtilString &rMIExtra(vCmd.GetMIResultRecordExtra());
- cmdData.strMiCmdResultRecordExtra = rMIExtra; // Precautionary copy as the command might forget to do this
- }
-
- // Send command's MI response to the client
- bool bOk = CmdStdout(cmdData);
-
- // Delete the command object as do not require anymore
- bOk = bOk && CmdDelete(vCmd.GetCmdData().id);
+bool CMICmdInvoker::CmdExecuteFinished(CMICmdBase &vCmd) {
+ // Command finished now get the command to gather it's information and form
+ // the MI
+ // Result record
+ if (!vCmd.Acknowledge()) {
+ // Report command acknowledge functionality failed
+ const SMICmdData cmdData(vCmd.GetCmdData());
+ CmdStdout(cmdData);
+ CmdCauseAppExit(vCmd);
+ CmdDelete(cmdData.id);
- return bOk;
-}
+ // Proceed to wait or execute next command
+ return MIstatus::success;
+ }
-//++ ------------------------------------------------------------------------------------
-// Details: If the MI Driver is not operating via a client i.e. Eclipse check the command
-// on failure suggests the application exits. A command can be such that a
+ // Retrieve the command's latest data/information. Needed for commands of the
+ // event type so have
+ // a record of commands pending finishing execution.
+ const CMIUtilString &rMIResultRecord(vCmd.GetMIResultRecord());
+ SMICmdData cmdData(
+ vCmd.GetCmdData()); // Make a copy as the command will be deleted soon
+ cmdData.strMiCmdResultRecord = rMIResultRecord; // Precautionary copy as the
+ // command might forget to do
+ // this
+ if (vCmd.HasMIResultRecordExtra()) {
+ cmdData.bHasResultRecordExtra = true;
+ const CMIUtilString &rMIExtra(vCmd.GetMIResultRecordExtra());
+ cmdData.strMiCmdResultRecordExtra =
+ rMIExtra; // Precautionary copy as the command might forget to do this
+ }
+
+ // Send command's MI response to the client
+ bool bOk = CmdStdout(cmdData);
+
+ // Delete the command object as do not require anymore
+ bOk = bOk && CmdDelete(vCmd.GetCmdData().id);
+
+ return bOk;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: If the MI Driver is not operating via a client i.e. Eclipse check
+// the command
+// on failure suggests the application exits. A command can be such
+// that a
// failure cannot the allow the application to continue operating.
// Args: vCmd - (R) Command object.
// Return: None.
// Return: None.
// Throws: None.
//--
-void
-CMICmdInvoker::CmdCauseAppExit(const CMICmdBase &vCmd) const
-{
- if (vCmd.GetExitAppOnCommandFailure())
- {
- CMIDriver &rDriver(CMIDriver::Instance());
- if (rDriver.IsDriverDebuggingArgExecutable())
- {
- rDriver.SetExitApplicationFlag(true);
- }
+void CMICmdInvoker::CmdCauseAppExit(const CMICmdBase &vCmd) const {
+ if (vCmd.GetExitAppOnCommandFailure()) {
+ CMIDriver &rDriver(CMIDriver::Instance());
+ if (rDriver.IsDriverDebuggingArgExecutable()) {
+ rDriver.SetExitApplicationFlag(true);
}
+ }
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Write to stdout and the Log file the command's MI formatted result.
// Type: vCmdData - (R) A command's information.
// Return: MIstatus::success - Functionality succeeded.
@@ -302,36 +299,36 @@ CMICmdInvoker::CmdCauseAppExit(const CMI
// Return: None.
// Throws: None.
//--
-bool
-CMICmdInvoker::CmdStdout(const SMICmdData &vCmdData) const
-{
- bool bOk = m_pLog->WriteLog(vCmdData.strMiCmdAll);
- const bool bLock = bOk && m_rStreamOut.Lock();
- bOk = bOk && bLock && m_rStreamOut.WriteMIResponse(vCmdData.strMiCmdResultRecord);
- if (bOk && vCmdData.bHasResultRecordExtra)
- {
- bOk = m_rStreamOut.WriteMIResponse(vCmdData.strMiCmdResultRecordExtra);
- }
- bOk = bLock && m_rStreamOut.Unlock();
-
- return bOk;
-}
-
-//++ ------------------------------------------------------------------------------------
-// Details: Required by the CMICmdMgr::ICmdDeleteCallback. *this object is registered
-// with the Command Manager to receive callbacks when a command is being deleted.
-// An object, *this invoker, does not delete a command object itself but calls
-// the Command Manager to delete a command object. This function is the Invoker's
+bool CMICmdInvoker::CmdStdout(const SMICmdData &vCmdData) const {
+ bool bOk = m_pLog->WriteLog(vCmdData.strMiCmdAll);
+ const bool bLock = bOk && m_rStreamOut.Lock();
+ bOk = bOk && bLock &&
+ m_rStreamOut.WriteMIResponse(vCmdData.strMiCmdResultRecord);
+ if (bOk && vCmdData.bHasResultRecordExtra) {
+ bOk = m_rStreamOut.WriteMIResponse(vCmdData.strMiCmdResultRecordExtra);
+ }
+ bOk = bLock && m_rStreamOut.Unlock();
+
+ return bOk;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: Required by the CMICmdMgr::ICmdDeleteCallback. *this object is
+// registered
+// with the Command Manager to receive callbacks when a command is
+// being deleted.
+// An object, *this invoker, does not delete a command object itself
+// but calls
+// the Command Manager to delete a command object. This function is the
+// Invoker's
// called.
-// The Invoker owns the command objects and so can delete them but must do it
+// The Invoker owns the command objects and so can delete them but must
+// do it
// via the manager so other objects can be notified of the deletion.
// Type: Method.
// Args: vCmd - (RW) Command.
// Return: None.
// Throws: None.
//--
-void
-CMICmdInvoker::Delete(SMICmdData &vCmd)
-{
- CmdDelete(vCmd.id, true);
-}
+void CMICmdInvoker::Delete(SMICmdData &vCmd) { CmdDelete(vCmd.id, true); }
Modified: lldb/trunk/tools/lldb-mi/MICmdInvoker.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdInvoker.h?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdInvoker.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdInvoker.h Tue Sep 6 15:57:50 2016
@@ -13,20 +13,23 @@
#include <map>
// In-house headers:
-#include "MICmnBase.h"
#include "MICmdData.h"
#include "MICmdMgrSetCmdDeleteCallback.h"
+#include "MICmnBase.h"
#include "MIUtilSingletonBase.h"
// Declarations:
class CMICmdBase;
class CMICmnStreamStdout;
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI Command Invoker. The Invoker works on the command pattern design.
// There two main jobs; action command Execute() function, followed by
-// the command's Acknowledge() function. When a command has finished its
-// execute function it returns to the invoker. The invoker then calls the
+// the command's Acknowledge() function. When a command has finished
+// its
+// execute function it returns to the invoker. The invoker then calls
+// the
// command's Acknowledge() function to do more work, form and give
// back a MI result. In the meantime the Command Monitor is monitoring
// the each command doing their Execute() function work so they do not
@@ -34,67 +37,68 @@ class CMICmnStreamStdout;
// stop work.
// The work by the Invoker is carried out in the main thread.
// The Invoker takes ownership of any commands created which means it
-// is the only object to delete them when a command is finished working.
+// is the only object to delete them when a command is finished
+// working.
// A singleton class.
//--
-class CMICmdInvoker : public CMICmnBase, public CMICmdMgrSetCmdDeleteCallback::ICallback, public MI::ISingleton<CMICmdInvoker>
-{
- friend class MI::ISingleton<CMICmdInvoker>;
-
- // Class:
- public:
- //++
- // Description: Invoker's interface for commands to implement.
- //--
- class ICmd
- {
- public:
- virtual bool Acknowledge() = 0;
- virtual bool Execute() = 0;
- virtual bool ParseArgs() = 0;
- virtual void SetCmdData(const SMICmdData &vCmdData) = 0;
- virtual const SMICmdData &GetCmdData() const = 0;
- virtual const CMIUtilString &GetErrorDescription() const = 0;
- virtual void CmdFinishedTellInvoker() const = 0;
- virtual const CMIUtilString &GetMIResultRecord() const = 0;
- virtual const CMIUtilString &GetMIResultRecordExtra() const = 0;
- virtual bool HasMIResultRecordExtra() const = 0;
-
- /* dtor */ virtual ~ICmd(){}
- };
-
- // Methods:
+class CMICmdInvoker : public CMICmnBase,
+ public CMICmdMgrSetCmdDeleteCallback::ICallback,
+ public MI::ISingleton<CMICmdInvoker> {
+ friend class MI::ISingleton<CMICmdInvoker>;
+
+ // Class:
+public:
+ //++
+ // Description: Invoker's interface for commands to implement.
+ //--
+ class ICmd {
public:
- bool Initialize() override;
- bool Shutdown() override;
- bool CmdExecute(CMICmdBase &vCmd);
- bool CmdExecuteFinished(CMICmdBase &vCmd);
-
- // Typedefs:
- private:
- typedef std::map<MIuint, CMICmdBase *> MapCmdIdToCmd_t;
- typedef std::pair<MIuint, CMICmdBase *> MapPairCmdIdToCmd_t;
-
- // Methods:
- private:
- /* ctor */ CMICmdInvoker();
- /* ctor */ CMICmdInvoker(const CMICmdInvoker &);
- void operator=(const CMICmdInvoker &);
- void CmdDeleteAll();
- bool CmdDelete(const MIuint vCmdId, const bool vbYesDeleteCmd = false);
- bool CmdAdd(const CMICmdBase &vCmd);
- bool CmdStdout(const SMICmdData &vCmdData) const;
- void CmdCauseAppExit(const CMICmdBase &vCmd) const;
-
- // Overridden:
- private:
- // From CMICmnBase
- /* dtor */ ~CMICmdInvoker() override;
- // From CMICmdMgrSetCmdDeleteCallback::ICallback
- void Delete(SMICmdData &vCmd) override;
-
- // Attributes:
- private:
- MapCmdIdToCmd_t m_mapCmdIdToCmd;
- CMICmnStreamStdout &m_rStreamOut;
+ virtual bool Acknowledge() = 0;
+ virtual bool Execute() = 0;
+ virtual bool ParseArgs() = 0;
+ virtual void SetCmdData(const SMICmdData &vCmdData) = 0;
+ virtual const SMICmdData &GetCmdData() const = 0;
+ virtual const CMIUtilString &GetErrorDescription() const = 0;
+ virtual void CmdFinishedTellInvoker() const = 0;
+ virtual const CMIUtilString &GetMIResultRecord() const = 0;
+ virtual const CMIUtilString &GetMIResultRecordExtra() const = 0;
+ virtual bool HasMIResultRecordExtra() const = 0;
+
+ /* dtor */ virtual ~ICmd() {}
+ };
+
+ // Methods:
+public:
+ bool Initialize() override;
+ bool Shutdown() override;
+ bool CmdExecute(CMICmdBase &vCmd);
+ bool CmdExecuteFinished(CMICmdBase &vCmd);
+
+ // Typedefs:
+private:
+ typedef std::map<MIuint, CMICmdBase *> MapCmdIdToCmd_t;
+ typedef std::pair<MIuint, CMICmdBase *> MapPairCmdIdToCmd_t;
+
+ // Methods:
+private:
+ /* ctor */ CMICmdInvoker();
+ /* ctor */ CMICmdInvoker(const CMICmdInvoker &);
+ void operator=(const CMICmdInvoker &);
+ void CmdDeleteAll();
+ bool CmdDelete(const MIuint vCmdId, const bool vbYesDeleteCmd = false);
+ bool CmdAdd(const CMICmdBase &vCmd);
+ bool CmdStdout(const SMICmdData &vCmdData) const;
+ void CmdCauseAppExit(const CMICmdBase &vCmd) const;
+
+ // Overridden:
+private:
+ // From CMICmnBase
+ /* dtor */ ~CMICmdInvoker() override;
+ // From CMICmdMgrSetCmdDeleteCallback::ICallback
+ void Delete(SMICmdData &vCmd) override;
+
+ // Attributes:
+private:
+ MapCmdIdToCmd_t m_mapCmdIdToCmd;
+ CMICmnStreamStdout &m_rStreamOut;
};
Modified: lldb/trunk/tools/lldb-mi/MICmdMgr.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdMgr.cpp?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdMgr.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdMgr.cpp Tue Sep 6 15:57:50 2016
@@ -9,16 +9,17 @@
// In-house headers:
#include "MICmdMgr.h"
-#include "MICmnResources.h"
-#include "MICmnLog.h"
-#include "MICmdInterpreter.h"
+#include "MICmdBase.h"
#include "MICmdFactory.h"
+#include "MICmdInterpreter.h"
#include "MICmdInvoker.h"
-#include "MICmdBase.h"
+#include "MICmnLog.h"
+#include "MICmnResources.h"
#include "MIUtilSingletonBase.h"
#include "MIUtilSingletonHelper.h"
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdMgr constructor.
// Type: Method.
// Args: None.
@@ -26,25 +27,22 @@
// Throws: None.
//--
CMICmdMgr::CMICmdMgr()
- : m_interpretor(CMICmdInterpreter::Instance())
- , m_factory(CMICmdFactory::Instance())
- , m_invoker(CMICmdInvoker::Instance())
-{
-}
+ : m_interpretor(CMICmdInterpreter::Instance()),
+ m_factory(CMICmdFactory::Instance()),
+ m_invoker(CMICmdInvoker::Instance()) {}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdMgr destructor.
// Type: Overridable.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmdMgr::~CMICmdMgr()
-{
- Shutdown();
-}
+CMICmdMgr::~CMICmdMgr() { Shutdown(); }
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Initialize resources for *this Command Manager.
// Type: Method.
// Args: None.
@@ -52,48 +50,48 @@ CMICmdMgr::~CMICmdMgr()
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmdMgr::Initialize()
-{
- m_clientUsageRefCnt++;
-
- if (m_bInitialized)
- return MIstatus::success;
-
- bool bOk = MIstatus::success;
- CMIUtilString errMsg;
-
- // Note initialization order is important here as some resources depend on previous
- MI::ModuleInit<CMICmnLog>(IDS_MI_INIT_ERR_LOG, bOk, errMsg);
- MI::ModuleInit<CMICmnResources>(IDS_MI_INIT_ERR_RESOURCES, bOk, errMsg);
- if (bOk && !m_interpretor.Initialize())
- {
- bOk = false;
- errMsg = CMIUtilString::Format(MIRSRC(IDS_MI_INIT_ERR_CMDINTERPRETER), m_interpretor.GetErrorDescription().c_str());
- }
- if (bOk && !m_factory.Initialize())
- {
- bOk = false;
- errMsg = CMIUtilString::Format(MIRSRC(IDS_MI_INIT_ERR_CMDFACTORY), m_factory.GetErrorDescription().c_str());
- }
- if (bOk && !m_invoker.Initialize())
- {
- bOk = false;
- errMsg = CMIUtilString::Format(MIRSRC(IDS_MI_INIT_ERR_CMDINVOKER), m_invoker.GetErrorDescription().c_str());
- }
- m_bInitialized = bOk;
-
- if (!bOk)
- {
- CMIUtilString strInitError(CMIUtilString::Format(MIRSRC(IDS_MI_INIT_ERR_CMDMGR), errMsg.c_str()));
- SetErrorDescription(strInitError);
- return MIstatus::failure;
- }
+bool CMICmdMgr::Initialize() {
+ m_clientUsageRefCnt++;
+ if (m_bInitialized)
return MIstatus::success;
+
+ bool bOk = MIstatus::success;
+ CMIUtilString errMsg;
+
+ // Note initialization order is important here as some resources depend on
+ // previous
+ MI::ModuleInit<CMICmnLog>(IDS_MI_INIT_ERR_LOG, bOk, errMsg);
+ MI::ModuleInit<CMICmnResources>(IDS_MI_INIT_ERR_RESOURCES, bOk, errMsg);
+ if (bOk && !m_interpretor.Initialize()) {
+ bOk = false;
+ errMsg = CMIUtilString::Format(MIRSRC(IDS_MI_INIT_ERR_CMDINTERPRETER),
+ m_interpretor.GetErrorDescription().c_str());
+ }
+ if (bOk && !m_factory.Initialize()) {
+ bOk = false;
+ errMsg = CMIUtilString::Format(MIRSRC(IDS_MI_INIT_ERR_CMDFACTORY),
+ m_factory.GetErrorDescription().c_str());
+ }
+ if (bOk && !m_invoker.Initialize()) {
+ bOk = false;
+ errMsg = CMIUtilString::Format(MIRSRC(IDS_MI_INIT_ERR_CMDINVOKER),
+ m_invoker.GetErrorDescription().c_str());
+ }
+ m_bInitialized = bOk;
+
+ if (!bOk) {
+ CMIUtilString strInitError(
+ CMIUtilString::Format(MIRSRC(IDS_MI_INIT_ERR_CMDMGR), errMsg.c_str()));
+ SetErrorDescription(strInitError);
+ return MIstatus::failure;
+ }
+
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Release resources for *this Command Manager.
// Type: Method.
// Args: None.
@@ -101,76 +99,81 @@ CMICmdMgr::Initialize()
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmdMgr::Shutdown()
-{
- if (--m_clientUsageRefCnt > 0)
- return MIstatus::success;
-
- if (!m_bInitialized)
- return MIstatus::success;
-
- m_bInitialized = false;
-
- ClrErrorDescription();
-
- bool bOk = MIstatus::success;
- CMIUtilString errMsg;
-
- // Tidy up
- m_setCmdDeleteCallback.clear();
-
- // Note shutdown order is important here
- if (!m_invoker.Shutdown())
- {
- bOk = false;
- errMsg += CMIUtilString::Format(MIRSRC(IDS_MI_SHTDWN_ERR_CMDINVOKER), m_invoker.GetErrorDescription().c_str());
- }
- if (!m_factory.Shutdown())
- {
- bOk = false;
- if (!errMsg.empty())
- errMsg += ", ";
- errMsg += CMIUtilString::Format(MIRSRC(IDS_MI_SHTDWN_ERR_CMDFACTORY), m_factory.GetErrorDescription().c_str());
- }
- if (!m_interpretor.Shutdown())
- {
- bOk = false;
- if (!errMsg.empty())
- errMsg += ", ";
- errMsg += CMIUtilString::Format(MIRSRC(IDS_MI_SHTDWN_ERR_CMDINTERPRETER), m_interpretor.GetErrorDescription().c_str());
- }
- MI::ModuleShutdown<CMICmnResources>(IDS_MI_INIT_ERR_RESOURCES, bOk, errMsg);
- MI::ModuleShutdown<CMICmnLog>(IDS_MI_INIT_ERR_LOG, bOk, errMsg);
-
- if (!bOk)
- {
- SetErrorDescriptionn(MIRSRC(IDS_MI_SHUTDOWN_ERR), errMsg.c_str());
- }
+bool CMICmdMgr::Shutdown() {
+ if (--m_clientUsageRefCnt > 0)
+ return MIstatus::success;
+ if (!m_bInitialized)
return MIstatus::success;
+
+ m_bInitialized = false;
+
+ ClrErrorDescription();
+
+ bool bOk = MIstatus::success;
+ CMIUtilString errMsg;
+
+ // Tidy up
+ m_setCmdDeleteCallback.clear();
+
+ // Note shutdown order is important here
+ if (!m_invoker.Shutdown()) {
+ bOk = false;
+ errMsg += CMIUtilString::Format(MIRSRC(IDS_MI_SHTDWN_ERR_CMDINVOKER),
+ m_invoker.GetErrorDescription().c_str());
+ }
+ if (!m_factory.Shutdown()) {
+ bOk = false;
+ if (!errMsg.empty())
+ errMsg += ", ";
+ errMsg += CMIUtilString::Format(MIRSRC(IDS_MI_SHTDWN_ERR_CMDFACTORY),
+ m_factory.GetErrorDescription().c_str());
+ }
+ if (!m_interpretor.Shutdown()) {
+ bOk = false;
+ if (!errMsg.empty())
+ errMsg += ", ";
+ errMsg +=
+ CMIUtilString::Format(MIRSRC(IDS_MI_SHTDWN_ERR_CMDINTERPRETER),
+ m_interpretor.GetErrorDescription().c_str());
+ }
+ MI::ModuleShutdown<CMICmnResources>(IDS_MI_INIT_ERR_RESOURCES, bOk, errMsg);
+ MI::ModuleShutdown<CMICmnLog>(IDS_MI_INIT_ERR_LOG, bOk, errMsg);
+
+ if (!bOk) {
+ SetErrorDescriptionn(MIRSRC(IDS_MI_SHUTDOWN_ERR), errMsg.c_str());
+ }
+
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Establish whether the text data is an MI format type command.
// Type: Method.
// Args: vTextLine - (R) Text data to interpret.
-// vwbYesValid - (W) True = MI type command, false = not recognised.
-// vwbCmdNotInCmdFactor - (W) True = MI command not found in the command factor, false = recognised.
+// vwbYesValid - (W) True = MI type command, false = not
+// recognised.
+// vwbCmdNotInCmdFactor - (W) True = MI command not found in the
+// command factor, false = recognised.
// Return: MIstatus::success - Functionality succeeded.
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmdMgr::CmdInterpret(const CMIUtilString &vTextLine, bool &vwbYesValid, bool &vwbCmdNotInCmdFactor, SMICmdData &rwCmdData)
-{
- return m_interpretor.ValidateIsMi(vTextLine, vwbYesValid, vwbCmdNotInCmdFactor, rwCmdData);
+bool CMICmdMgr::CmdInterpret(const CMIUtilString &vTextLine, bool &vwbYesValid,
+ bool &vwbCmdNotInCmdFactor,
+ SMICmdData &rwCmdData) {
+ return m_interpretor.ValidateIsMi(vTextLine, vwbYesValid,
+ vwbCmdNotInCmdFactor, rwCmdData);
}
-//++ ------------------------------------------------------------------------------------
-// Details: Having previously had the potential command validated and found valid now
+//++
+//------------------------------------------------------------------------------------
+// Details: Having previously had the potential command validated and found
+// valid now
// get the command executed.
-// If the Functionality returns MIstatus::failure call GetErrorDescription().
+// If the Functionality returns MIstatus::failure call
+// GetErrorDescription().
// This function is used by the application's main thread.
// Type: Method.
// Args: vCmdData - (RW) Command meta data.
@@ -178,55 +181,55 @@ CMICmdMgr::CmdInterpret(const CMIUtilStr
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmdMgr::CmdExecute(const SMICmdData &vCmdData)
-{
- bool bOk = MIstatus::success;
-
- // Pass the command's meta data structure to the command
- // so it can update it if required. (Need to copy it out of the
- // command before the command is deleted)
- CMICmdBase *pCmd = nullptr;
- bOk = m_factory.CmdCreate(vCmdData.strMiCmd, vCmdData, pCmd);
- if (!bOk)
- {
- const CMIUtilString errMsg(
- CMIUtilString::Format(MIRSRC(IDS_CMDMGR_ERR_CMD_FAILED_CREATE), m_factory.GetErrorDescription().c_str()));
- SetErrorDescription(errMsg);
- return MIstatus::failure;
- }
-
- bOk = m_invoker.CmdExecute(*pCmd);
- if (!bOk)
- {
- const CMIUtilString errMsg(CMIUtilString::Format(MIRSRC(IDS_CMDMGR_ERR_CMD_INVOKER), m_invoker.GetErrorDescription().c_str()));
- SetErrorDescription(errMsg);
- return MIstatus::failure;
- }
+bool CMICmdMgr::CmdExecute(const SMICmdData &vCmdData) {
+ bool bOk = MIstatus::success;
- return bOk;
-}
-
-//++ ------------------------------------------------------------------------------------
-// Details: Iterate all interested clients and tell them a command is being deleted.
+ // Pass the command's meta data structure to the command
+ // so it can update it if required. (Need to copy it out of the
+ // command before the command is deleted)
+ CMICmdBase *pCmd = nullptr;
+ bOk = m_factory.CmdCreate(vCmdData.strMiCmd, vCmdData, pCmd);
+ if (!bOk) {
+ const CMIUtilString errMsg(
+ CMIUtilString::Format(MIRSRC(IDS_CMDMGR_ERR_CMD_FAILED_CREATE),
+ m_factory.GetErrorDescription().c_str()));
+ SetErrorDescription(errMsg);
+ return MIstatus::failure;
+ }
+
+ bOk = m_invoker.CmdExecute(*pCmd);
+ if (!bOk) {
+ const CMIUtilString errMsg(
+ CMIUtilString::Format(MIRSRC(IDS_CMDMGR_ERR_CMD_INVOKER),
+ m_invoker.GetErrorDescription().c_str()));
+ SetErrorDescription(errMsg);
+ return MIstatus::failure;
+ }
+
+ return bOk;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: Iterate all interested clients and tell them a command is being
+// deleted.
// Type: Method.
// Args: vCmdData - (RW) The command to be deleted.
// Return: MIstatus::success - Functional succeeded.
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdMgr::CmdDelete(SMICmdData vCmdData)
-{
- // Note vCmdData is a copy! The command holding its copy will be deleted soon
- // we still need to iterate callback clients after a command object is deleted
+bool CMICmdMgr::CmdDelete(SMICmdData vCmdData) {
+ // Note vCmdData is a copy! The command holding its copy will be deleted soon
+ // we still need to iterate callback clients after a command object is deleted
- m_setCmdDeleteCallback.Delete(vCmdData);
+ m_setCmdDeleteCallback.Delete(vCmdData);
- return MIstatus::success;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Register an object to be called when a command object is deleted.
// Type: Method.
// Args: vObject - (R) A new interested client.
@@ -234,22 +237,22 @@ CMICmdMgr::CmdDelete(SMICmdData vCmdData
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdMgr::CmdRegisterForDeleteNotification(CMICmdMgrSetCmdDeleteCallback::ICallback &vObject)
-{
- return m_setCmdDeleteCallback.Register(vObject);
+bool CMICmdMgr::CmdRegisterForDeleteNotification(
+ CMICmdMgrSetCmdDeleteCallback::ICallback &vObject) {
+ return m_setCmdDeleteCallback.Register(vObject);
}
-//++ ------------------------------------------------------------------------------------
-// Details: Unregister an object from being called when a command object is deleted.
+//++
+//------------------------------------------------------------------------------------
+// Details: Unregister an object from being called when a command object is
+// deleted.
// Type: Method.
// Args: vObject - (R) The was interested client.
// Return: MIstatus::success - Functional succeeded.
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdMgr::CmdUnregisterForDeleteNotification(CMICmdMgrSetCmdDeleteCallback::ICallback &vObject)
-{
- return m_setCmdDeleteCallback.Unregister(vObject);
+bool CMICmdMgr::CmdUnregisterForDeleteNotification(
+ CMICmdMgrSetCmdDeleteCallback::ICallback &vObject) {
+ return m_setCmdDeleteCallback.Unregister(vObject);
}
Modified: lldb/trunk/tools/lldb-mi/MICmdMgr.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdMgr.h?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdMgr.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdMgr.h Tue Sep 6 15:57:50 2016
@@ -13,9 +13,9 @@
#include <set>
// In-house headers:
-#include "MICmnBase.h"
#include "MICmdBase.h"
#include "MICmdMgrSetCmdDeleteCallback.h"
+#include "MICmnBase.h"
#include "MIUtilSingletonBase.h"
// Declarations:
@@ -24,43 +24,47 @@ class CMICmdFactory;
class CMICmdInvoker;
class CMICmdBase;
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI command manager. Oversees command operations, controls command
// production and the running of commands.
-// Command Invoker, Command Factory and Command Monitor while independent
+// Command Invoker, Command Factory and Command Monitor while
+// independent
// units are overseen/managed by *this manager.
// A singleton class.
//--
-class CMICmdMgr : public CMICmnBase, public MI::ISingleton<CMICmdMgr>
-{
- friend class MI::ISingleton<CMICmdMgr>;
-
- // Methods:
- public:
- bool Initialize() override;
- bool Shutdown() override;
-
- bool CmdInterpret(const CMIUtilString &vTextLine, bool &vwbYesValid, bool &vwbCmdNotInCmdFactor, SMICmdData &rwCmdData);
- bool CmdExecute(const SMICmdData &vCmdData);
- bool CmdDelete(SMICmdData vCmdData);
- bool CmdRegisterForDeleteNotification(CMICmdMgrSetCmdDeleteCallback::ICallback &vObject);
- bool CmdUnregisterForDeleteNotification(CMICmdMgrSetCmdDeleteCallback::ICallback &vObject);
-
- // Methods:
- private:
- /* ctor */ CMICmdMgr();
- /* ctor */ CMICmdMgr(const CMICmdMgr &);
- void operator=(const CMICmdMgr &);
-
- // Overridden:
- public:
- // From CMICmnBase
- /* dtor */ ~CMICmdMgr() override;
-
- // Attributes:
- private:
- CMICmdInterpreter &m_interpretor;
- CMICmdFactory &m_factory;
- CMICmdInvoker &m_invoker;
- CMICmdMgrSetCmdDeleteCallback::CSetClients m_setCmdDeleteCallback;
+class CMICmdMgr : public CMICmnBase, public MI::ISingleton<CMICmdMgr> {
+ friend class MI::ISingleton<CMICmdMgr>;
+
+ // Methods:
+public:
+ bool Initialize() override;
+ bool Shutdown() override;
+
+ bool CmdInterpret(const CMIUtilString &vTextLine, bool &vwbYesValid,
+ bool &vwbCmdNotInCmdFactor, SMICmdData &rwCmdData);
+ bool CmdExecute(const SMICmdData &vCmdData);
+ bool CmdDelete(SMICmdData vCmdData);
+ bool CmdRegisterForDeleteNotification(
+ CMICmdMgrSetCmdDeleteCallback::ICallback &vObject);
+ bool CmdUnregisterForDeleteNotification(
+ CMICmdMgrSetCmdDeleteCallback::ICallback &vObject);
+
+ // Methods:
+private:
+ /* ctor */ CMICmdMgr();
+ /* ctor */ CMICmdMgr(const CMICmdMgr &);
+ void operator=(const CMICmdMgr &);
+
+ // Overridden:
+public:
+ // From CMICmnBase
+ /* dtor */ ~CMICmdMgr() override;
+
+ // Attributes:
+private:
+ CMICmdInterpreter &m_interpretor;
+ CMICmdFactory &m_factory;
+ CMICmdInvoker &m_invoker;
+ CMICmdMgrSetCmdDeleteCallback::CSetClients m_setCmdDeleteCallback;
};
Modified: lldb/trunk/tools/lldb-mi/MICmdMgrSetCmdDeleteCallback.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdMgrSetCmdDeleteCallback.cpp?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdMgrSetCmdDeleteCallback.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdMgrSetCmdDeleteCallback.cpp Tue Sep 6 15:57:50 2016
@@ -10,33 +10,30 @@
// In-house headers:
#include "MICmdMgrSetCmdDeleteCallback.h"
-namespace CMICmdMgrSetCmdDeleteCallback
-{
+namespace CMICmdMgrSetCmdDeleteCallback {
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CSetClients constructor.
// Type: Method.
// Args: None.
// Return: None.
// Throws: None.
//--
-CSetClients::CSetClients()
- : m_bClientUnregistered(false)
-{
-}
+CSetClients::CSetClients() : m_bClientUnregistered(false) {}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CSetClients destructor.
// Type: Method.
// Args: None.
// Return: None.
// Throws: None.
//--
-CSetClients::~CSetClients()
-{
-}
+CSetClients::~CSetClients() {}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Register an object to be called when a command object is deleted.
// Type: Method.
// Args: vObject - (R) A new interested client.
@@ -44,58 +41,53 @@ CSetClients::~CSetClients()
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CSetClients::Register(ICallback &vObject)
-{
- insert(&vObject);
+bool CSetClients::Register(ICallback &vObject) {
+ insert(&vObject);
- return MIstatus::success;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
-// Details: Unregister an object from being called when a command object is deleted.
+//++
+//------------------------------------------------------------------------------------
+// Details: Unregister an object from being called when a command object is
+// deleted.
// Type: Method.
// Args: vObject - (R) The was interested client.
// Return: MIstatus::success - Functional succeeded.
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CSetClients::Unregister(ICallback &vObject)
-{
- m_bClientUnregistered = true;
- erase(&vObject);
+bool CSetClients::Unregister(ICallback &vObject) {
+ m_bClientUnregistered = true;
+ erase(&vObject);
- return MIstatus::success;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
-// Details: Iterate all interested clients and tell them a command is being deleted.
+//++
+//------------------------------------------------------------------------------------
+// Details: Iterate all interested clients and tell them a command is being
+// deleted.
// Type: Method.
// Args: vCmd - (RW) The command to be deleted.
// Return: MIstatus::success - Functional succeeded.
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-void
-CSetClients::Delete(SMICmdData &vCmd)
-{
- m_bClientUnregistered = false; // Reset
- iterator it = begin();
- while (it != end())
- {
- ICallback *pObj = *it;
- pObj->Delete(vCmd);
-
- if (m_bClientUnregistered)
- {
- m_bClientUnregistered = false; // Reset
- it = begin();
- }
- else
- // Next
- ++it;
- }
+void CSetClients::Delete(SMICmdData &vCmd) {
+ m_bClientUnregistered = false; // Reset
+ iterator it = begin();
+ while (it != end()) {
+ ICallback *pObj = *it;
+ pObj->Delete(vCmd);
+
+ if (m_bClientUnregistered) {
+ m_bClientUnregistered = false; // Reset
+ it = begin();
+ } else
+ // Next
+ ++it;
+ }
}
} // namespace CMICmdMgrSetCmdDeleteCallback
Modified: lldb/trunk/tools/lldb-mi/MICmdMgrSetCmdDeleteCallback.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdMgrSetCmdDeleteCallback.h?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdMgrSetCmdDeleteCallback.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdMgrSetCmdDeleteCallback.h Tue Sep 6 15:57:50 2016
@@ -19,50 +19,55 @@
// Declarations:
struct SMICmdData;
-namespace CMICmdMgrSetCmdDeleteCallback
-{
+namespace CMICmdMgrSetCmdDeleteCallback {
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI Command Manager interface for client call back.
// Objects that want to be notified of a command being deleted
// inherit this interface and register interest in command object
-// deletion. An object deleting a command must not do it itself but call
+// deletion. An object deleting a command must not do it itself but
+// call
// the Command Manager CmdDelete() function to delete a command object.
//--
-class ICallback
-{
- public:
- virtual void Delete(SMICmdData &vCmd) = 0;
+class ICallback {
+public:
+ virtual void Delete(SMICmdData &vCmd) = 0;
- /* dtor */ virtual ~ICallback(){}
+ /* dtor */ virtual ~ICallback() {}
};
-//++ ============================================================================
-// Details: MI Command Manager container for clients registered interest in command
-// objects being deleted. Objects register an interest so when a command
+//++
+//============================================================================
+// Details: MI Command Manager container for clients registered interest in
+// command
+// objects being deleted. Objects register an interest so when a
+// command
// is to be deleted that object wanting the delete calls the Command
// Manager to delete the command object. In so do all other registered
-// objects get called to about the deletion including the object wanting
+// objects get called to about the deletion including the object
+// wanting
// to do the delete in the first place.
//--
-class CSetClients : public std::set<class ICallback *>, public CMICmnBase
-{
- // Methods:
- public:
- /* ctor */ CSetClients();
-
- bool Register(class ICallback &vObject);
- bool Unregister(class ICallback &vObject);
- void Delete(SMICmdData &vCmdData);
-
- // Overridden:
- public:
- // From CMICmnBase
- /* dtor */ ~CSetClients() override;
-
- // Attributes:
- private:
- bool m_bClientUnregistered; // True = yes while deleting a client unregistered, false = no client unregistered during deletion
+class CSetClients : public std::set<class ICallback *>, public CMICmnBase {
+ // Methods:
+public:
+ /* ctor */ CSetClients();
+
+ bool Register(class ICallback &vObject);
+ bool Unregister(class ICallback &vObject);
+ void Delete(SMICmdData &vCmdData);
+
+ // Overridden:
+public:
+ // From CMICmnBase
+ /* dtor */ ~CSetClients() override;
+
+ // Attributes:
+private:
+ bool m_bClientUnregistered; // True = yes while deleting a client
+ // unregistered, false = no client unregistered
+ // during deletion
};
} // namespace CMICmdMgrSetCmdDeleteCallback
Modified: lldb/trunk/tools/lldb-mi/MICmnBase.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnBase.cpp?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnBase.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmnBase.cpp Tue Sep 6 15:57:50 2016
@@ -15,7 +15,8 @@
#include "MICmnLog.h"
#include "MICmnStreamStderr.h"
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmnBase constructor.
// Type: Method.
// Args: None.
@@ -23,102 +24,97 @@
// Throws: None.
//--
CMICmnBase::CMICmnBase()
- : m_strMILastErrorDescription(CMIUtilString())
- , m_bInitialized(false)
- , m_pLog(&CMICmnLog::Instance())
- , m_clientUsageRefCnt(0)
-{
-}
+ : m_strMILastErrorDescription(CMIUtilString()), m_bInitialized(false),
+ m_pLog(&CMICmnLog::Instance()), m_clientUsageRefCnt(0) {}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmnBase destructor.
// Type: Overrideable.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmnBase::~CMICmnBase()
-{
- m_pLog = NULL;
-}
+CMICmnBase::~CMICmnBase() { m_pLog = NULL; }
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Retrieve whether *this object has an error description set.
// Type: Method.
// Args: None.
// Return: bool - True = Yes already defined, false = empty description.
// Throws: None.
//--
-bool
-CMICmnBase::HaveErrorDescription() const
-{
- return m_strMILastErrorDescription.empty();
+bool CMICmnBase::HaveErrorDescription() const {
+ return m_strMILastErrorDescription.empty();
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Retrieve MI's last error condition.
// Type: Method.
// Args: None.
// Return: CMIUtilString & - Text description.
// Throws: None.
//--
-const CMIUtilString &
-CMICmnBase::GetErrorDescription() const
-{
- return m_strMILastErrorDescription;
+const CMIUtilString &CMICmnBase::GetErrorDescription() const {
+ return m_strMILastErrorDescription;
}
-//++ ------------------------------------------------------------------------------------
-// Details: Set MI's error condition description. This may be accessed by clients and
-// seen by users. Message is available to the client using the server and sent
+//++
+//------------------------------------------------------------------------------------
+// Details: Set MI's error condition description. This may be accessed by
+// clients and
+// seen by users. Message is available to the client using the server
+// and sent
// to the Logger.
// Type: Method.
// Args: vrTxt - (R) Text description.
// Return: None.
// Throws: None.
//--
-void
-CMICmnBase::SetErrorDescription(const CMIUtilString &vrTxt) const
-{
- m_strMILastErrorDescription = vrTxt;
- if (!vrTxt.empty())
- {
- const CMIUtilString txt(CMIUtilString::Format("Error: %s", vrTxt.c_str()));
- CMICmnStreamStderr::Instance().Write(txt);
- }
+void CMICmnBase::SetErrorDescription(const CMIUtilString &vrTxt) const {
+ m_strMILastErrorDescription = vrTxt;
+ if (!vrTxt.empty()) {
+ const CMIUtilString txt(CMIUtilString::Format("Error: %s", vrTxt.c_str()));
+ CMICmnStreamStderr::Instance().Write(txt);
+ }
}
-//++ ------------------------------------------------------------------------------------
-// Details: Set MI's error condition description. This may be accessed by clients and
-// seen by users. Message is available to the client using the server and sent
+//++
+//------------------------------------------------------------------------------------
+// Details: Set MI's error condition description. This may be accessed by
+// clients and
+// seen by users. Message is available to the client using the server
+// and sent
// to the Logger.
// Type: Method.
// Args: vrTxt - (R) Text description.
// Return: None.
// Throws: None.
//--
-void
-CMICmnBase::SetErrorDescriptionNoLog(const CMIUtilString &vrTxt) const
-{
- m_strMILastErrorDescription = vrTxt;
+void CMICmnBase::SetErrorDescriptionNoLog(const CMIUtilString &vrTxt) const {
+ m_strMILastErrorDescription = vrTxt;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Clear MI's error condition description.
// Type: Method.
// Args: None.
// Return: None.
// Throws: None.
//--
-void
-CMICmnBase::ClrErrorDescription() const
-{
- m_strMILastErrorDescription.clear();
+void CMICmnBase::ClrErrorDescription() const {
+ m_strMILastErrorDescription.clear();
}
-//++ ------------------------------------------------------------------------------------
-// Details: Set MI's error condition description. This may be accessed by clients and
-// seen by users. Message is available to the client using the server and sent
+//++
+//------------------------------------------------------------------------------------
+// Details: Set MI's error condition description. This may be accessed by
+// clients and
+// seen by users. Message is available to the client using the server
+// and sent
// to the Logger.
// Type: Method.
// Args: vFormat - (R) Format string.
@@ -126,13 +122,11 @@ CMICmnBase::ClrErrorDescription() const
// Return: None.
// Throws: None.
//--
-void
-CMICmnBase::SetErrorDescriptionn(const CMIUtilString vFormat, ...) const
-{
- va_list args;
- va_start(args, vFormat);
- CMIUtilString strResult = CMIUtilString::FormatValist(vFormat, args);
- va_end(args);
+void CMICmnBase::SetErrorDescriptionn(const CMIUtilString vFormat, ...) const {
+ va_list args;
+ va_start(args, vFormat);
+ CMIUtilString strResult = CMIUtilString::FormatValist(vFormat, args);
+ va_end(args);
- SetErrorDescription(strResult);
+ SetErrorDescription(strResult);
}
Modified: lldb/trunk/tools/lldb-mi/MICmnBase.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnBase.h?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnBase.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmnBase.h Tue Sep 6 15:57:50 2016
@@ -16,30 +16,32 @@
// Declarations:
class CMICmnLog;
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI common code implementation base class.
//--
-class CMICmnBase
-{
- // Methods:
- public:
- /* ctor */ CMICmnBase();
+class CMICmnBase {
+ // Methods:
+public:
+ /* ctor */ CMICmnBase();
- bool HaveErrorDescription() const;
- const CMIUtilString &GetErrorDescription() const;
- void SetErrorDescription(const CMIUtilString &vrTxt) const;
- void SetErrorDescriptionn(const CMIUtilString vFormat, ...) const;
- void SetErrorDescriptionNoLog(const CMIUtilString &vrTxt) const;
- void ClrErrorDescription() const;
+ bool HaveErrorDescription() const;
+ const CMIUtilString &GetErrorDescription() const;
+ void SetErrorDescription(const CMIUtilString &vrTxt) const;
+ void SetErrorDescriptionn(const CMIUtilString vFormat, ...) const;
+ void SetErrorDescriptionNoLog(const CMIUtilString &vrTxt) const;
+ void ClrErrorDescription() const;
- // Overrideable:
- public:
- /* dtor */ virtual ~CMICmnBase();
+ // Overrideable:
+public:
+ /* dtor */ virtual ~CMICmnBase();
- // Attributes:
- protected:
- mutable CMIUtilString m_strMILastErrorDescription;
- bool m_bInitialized; // True = yes successfully initialized, false = no yet or failed
- CMICmnLog *m_pLog; // Allow all derived classes to use the logger
- MIint m_clientUsageRefCnt; // Count of client using *this object so not shutdown() object to early
+ // Attributes:
+protected:
+ mutable CMIUtilString m_strMILastErrorDescription;
+ bool m_bInitialized; // True = yes successfully initialized, false = no yet or
+ // failed
+ CMICmnLog *m_pLog; // Allow all derived classes to use the logger
+ MIint m_clientUsageRefCnt; // Count of client using *this object so not
+ // shutdown() object to early
};
Modified: lldb/trunk/tools/lldb-mi/MICmnConfig.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnConfig.h?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnConfig.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmnConfig.h Tue Sep 6 15:57:50 2016
@@ -10,9 +10,11 @@
#pragma once
// 1 = Show debug process attach modal dialog, 0 = do not show
-// For windows only ATM, other OS's code is an infinite loop which a debugger must change a value to continue
+// For windows only ATM, other OS's code is an infinite loop which a debugger
+// must change a value to continue
#define MICONFIG_DEBUG_SHOW_ATTACH_DBG_DLG 0
-// 1 = Write to MI's Log file warnings about commands that did not handle arguments or
+// 1 = Write to MI's Log file warnings about commands that did not handle
+// arguments or
// options present to them by the driver's client, 0 = no warnings given
#define MICONFIG_GIVE_WARNING_CMD_ARGS_NOT_HANDLED 1
Modified: lldb/trunk/tools/lldb-mi/MICmnLLDBBroadcaster.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnLLDBBroadcaster.cpp?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnLLDBBroadcaster.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmnLLDBBroadcaster.cpp Tue Sep 6 15:57:50 2016
@@ -10,7 +10,8 @@
// In-house headers:
#include "MICmnLLDBBroadcaster.h"
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmnLLDBBroadcaster constructor.
// Type: Method.
// Args: None.
@@ -18,23 +19,20 @@
// Throws: None.
//--
CMICmnLLDBBroadcaster::CMICmnLLDBBroadcaster()
- : lldb::SBBroadcaster("MI driver")
-{
-}
+ : lldb::SBBroadcaster("MI driver") {}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmnLLDBBroadcaster destructor.
// Type: Overridable.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmnLLDBBroadcaster::~CMICmnLLDBBroadcaster()
-{
- Shutdown();
-}
+CMICmnLLDBBroadcaster::~CMICmnLLDBBroadcaster() { Shutdown(); }
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Initialize resources for *this broadcaster object.
// Type: Method.
// Args: None.
@@ -42,20 +40,19 @@ CMICmnLLDBBroadcaster::~CMICmnLLDBBroadc
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBBroadcaster::Initialize()
-{
- m_clientUsageRefCnt++;
+bool CMICmnLLDBBroadcaster::Initialize() {
+ m_clientUsageRefCnt++;
- if (m_bInitialized)
- return MIstatus::success;
+ if (m_bInitialized)
+ return MIstatus::success;
- m_bInitialized = MIstatus::success;
+ m_bInitialized = MIstatus::success;
- return m_bInitialized;
+ return m_bInitialized;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Release resources for *this broadcaster object.
// Type: Method.
// Args: None.
@@ -63,16 +60,14 @@ CMICmnLLDBBroadcaster::Initialize()
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBBroadcaster::Shutdown()
-{
- if (--m_clientUsageRefCnt > 0)
- return MIstatus::success;
+bool CMICmnLLDBBroadcaster::Shutdown() {
+ if (--m_clientUsageRefCnt > 0)
+ return MIstatus::success;
- if (!m_bInitialized)
- return MIstatus::success;
+ if (!m_bInitialized)
+ return MIstatus::success;
- m_bInitialized = false;
+ m_bInitialized = false;
- return MIstatus::success;
+ return MIstatus::success;
}
Modified: lldb/trunk/tools/lldb-mi/MICmnLLDBBroadcaster.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnLLDBBroadcaster.h?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnLLDBBroadcaster.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmnLLDBBroadcaster.h Tue Sep 6 15:57:50 2016
@@ -10,11 +10,12 @@
#pragma once
// In-house headers:
-#include "lldb/API/SBBroadcaster.h"
#include "MICmnBase.h"
#include "MIUtilSingletonBase.h"
+#include "lldb/API/SBBroadcaster.h"
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI derived class from LLDB SBBroadcaster API.
//
// *** This class (files) is a place holder until we know we need it or
@@ -22,22 +23,23 @@
//
// A singleton class.
//--
-class CMICmnLLDBBroadcaster : public CMICmnBase, public lldb::SBBroadcaster, public MI::ISingleton<CMICmnLLDBBroadcaster>
-{
- friend MI::ISingleton<CMICmnLLDBBroadcaster>;
+class CMICmnLLDBBroadcaster : public CMICmnBase,
+ public lldb::SBBroadcaster,
+ public MI::ISingleton<CMICmnLLDBBroadcaster> {
+ friend MI::ISingleton<CMICmnLLDBBroadcaster>;
- // Methods:
- public:
- bool Initialize() override;
- bool Shutdown() override;
- // Methods:
- private:
- /* ctor */ CMICmnLLDBBroadcaster();
- /* ctor */ CMICmnLLDBBroadcaster(const CMICmnLLDBBroadcaster &);
- void operator=(const CMICmnLLDBBroadcaster &);
+ // Methods:
+public:
+ bool Initialize() override;
+ bool Shutdown() override;
+ // Methods:
+private:
+ /* ctor */ CMICmnLLDBBroadcaster();
+ /* ctor */ CMICmnLLDBBroadcaster(const CMICmnLLDBBroadcaster &);
+ void operator=(const CMICmnLLDBBroadcaster &);
- // Overridden:
- private:
- // From CMICmnBase
- /* dtor */ ~CMICmnLLDBBroadcaster() override;
+ // Overridden:
+private:
+ // From CMICmnBase
+ /* dtor */ ~CMICmnLLDBBroadcaster() override;
};
Modified: lldb/trunk/tools/lldb-mi/MICmnLLDBDebugSessionInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnLLDBDebugSessionInfo.cpp?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnLLDBDebugSessionInfo.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmnLLDBDebugSessionInfo.cpp Tue Sep 6 15:57:50 2016
@@ -8,8 +8,8 @@
//===----------------------------------------------------------------------===//
// Third party headers:
-#include <inttypes.h> // For PRIx64
#include "lldb/API/SBThread.h"
+#include <inttypes.h> // For PRIx64
#ifdef _WIN32
#include <io.h> // For the ::_access()
#else
@@ -29,7 +29,8 @@
#include "MICmnResources.h"
#include "Platform.h"
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmnLLDBDebugSessionInfo constructor.
// Type: Method.
// Args: None.
@@ -37,29 +38,26 @@
// Throws: None.
//--
CMICmnLLDBDebugSessionInfo::CMICmnLLDBDebugSessionInfo()
- : m_nBrkPointCntMax(INT32_MAX)
- , m_currentSelectedThread(LLDB_INVALID_THREAD_ID)
- , m_constStrSharedDataKeyWkDir("Working Directory")
- , m_constStrSharedDataSolibPath("Solib Path")
- , m_constStrPrintCharArrayAsString("Print CharArrayAsString")
- , m_constStrPrintExpandAggregates("Print ExpandAggregates")
- , m_constStrPrintAggregateFieldNames("Print AggregateFieldNames")
-{
-}
+ : m_nBrkPointCntMax(INT32_MAX),
+ m_currentSelectedThread(LLDB_INVALID_THREAD_ID),
+ m_constStrSharedDataKeyWkDir("Working Directory"),
+ m_constStrSharedDataSolibPath("Solib Path"),
+ m_constStrPrintCharArrayAsString("Print CharArrayAsString"),
+ m_constStrPrintExpandAggregates("Print ExpandAggregates"),
+ m_constStrPrintAggregateFieldNames("Print AggregateFieldNames") {}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmnLLDBDebugSessionInfo destructor.
// Type: Overridable.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmnLLDBDebugSessionInfo::~CMICmnLLDBDebugSessionInfo()
-{
- Shutdown();
-}
+CMICmnLLDBDebugSessionInfo::~CMICmnLLDBDebugSessionInfo() { Shutdown(); }
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Initialize resources for *this object.
// Type: Method.
// Args: None.
@@ -67,23 +65,22 @@ CMICmnLLDBDebugSessionInfo::~CMICmnLLDBD
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebugSessionInfo::Initialize()
-{
- m_clientUsageRefCnt++;
+bool CMICmnLLDBDebugSessionInfo::Initialize() {
+ m_clientUsageRefCnt++;
- if (m_bInitialized)
- return MIstatus::success;
+ if (m_bInitialized)
+ return MIstatus::success;
- m_currentSelectedThread = LLDB_INVALID_THREAD_ID;
- CMICmnLLDBDebugSessionInfoVarObj::VarObjIdResetToZero();
+ m_currentSelectedThread = LLDB_INVALID_THREAD_ID;
+ CMICmnLLDBDebugSessionInfoVarObj::VarObjIdResetToZero();
- m_bInitialized = MIstatus::success;
+ m_bInitialized = MIstatus::success;
- return m_bInitialized;
+ return m_bInitialized;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Release resources for *this object.
// Type: Method.
// Args: None.
@@ -91,47 +88,50 @@ CMICmnLLDBDebugSessionInfo::Initialize()
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebugSessionInfo::Shutdown()
-{
- if (--m_clientUsageRefCnt > 0)
- return MIstatus::success;
-
- if (!m_bInitialized)
- return MIstatus::success;
+bool CMICmnLLDBDebugSessionInfo::Shutdown() {
+ if (--m_clientUsageRefCnt > 0)
+ return MIstatus::success;
+
+ if (!m_bInitialized)
+ return MIstatus::success;
- // Tidy up
- SharedDataDestroy();
+ // Tidy up
+ SharedDataDestroy();
- m_vecActiveThreadId.clear();
- CMICmnLLDBDebugSessionInfoVarObj::VarObjClear();
+ m_vecActiveThreadId.clear();
+ CMICmnLLDBDebugSessionInfoVarObj::VarObjClear();
- m_bInitialized = false;
+ m_bInitialized = false;
- return MIstatus::success;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
-// Details: Command instances can create and share data between other instances of commands.
-// Data can also be assigned by a command and retrieved by LLDB event handler.
-// This function takes down those resources build up over the use of the commands.
-// This function should be called when the creation and running of command has
+//++
+//------------------------------------------------------------------------------------
+// Details: Command instances can create and share data between other instances
+// of commands.
+// Data can also be assigned by a command and retrieved by LLDB event
+// handler.
+// This function takes down those resources build up over the use of
+// the commands.
+// This function should be called when the creation and running of
+// command has
// stopped i.e. application shutdown.
// Type: Method.
// Args: None.
// Return: None.
// Throws: None.
//--
-void
-CMICmnLLDBDebugSessionInfo::SharedDataDestroy()
-{
- m_mapIdToSessionData.Clear();
- m_vecVarObj.clear();
- m_mapBrkPtIdToBrkPtInfo.clear();
+void CMICmnLLDBDebugSessionInfo::SharedDataDestroy() {
+ m_mapIdToSessionData.Clear();
+ m_vecVarObj.clear();
+ m_mapBrkPtIdToBrkPtInfo.clear();
}
-//++ ------------------------------------------------------------------------------------
-// Details: Record information about a LLDB break point so that is can be recalled in other
+//++
+//------------------------------------------------------------------------------------
+// Details: Record information about a LLDB break point so that is can be
+// recalled in other
// commands or LLDB event handling functions.
// Type: Method.
// Args: vBrkPtId - (R) LLDB break point ID.
@@ -140,17 +140,18 @@ CMICmnLLDBDebugSessionInfo::SharedDataDe
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebugSessionInfo::RecordBrkPtInfo(const MIuint vnBrkPtId, const SBrkPtInfo &vrBrkPtInfo)
-{
- MapPairBrkPtIdToBrkPtInfo_t pr(vnBrkPtId, vrBrkPtInfo);
- m_mapBrkPtIdToBrkPtInfo.insert(pr);
-
- return MIstatus::success;
+bool CMICmnLLDBDebugSessionInfo::RecordBrkPtInfo(
+ const MIuint vnBrkPtId, const SBrkPtInfo &vrBrkPtInfo) {
+ MapPairBrkPtIdToBrkPtInfo_t pr(vnBrkPtId, vrBrkPtInfo);
+ m_mapBrkPtIdToBrkPtInfo.insert(pr);
+
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
-// Details: Retrieve information about a LLDB break point previous recorded either by
+//++
+//------------------------------------------------------------------------------------
+// Details: Retrieve information about a LLDB break point previous recorded
+// either by
// commands or LLDB event handling functions.
// Type: Method.
// Args: vBrkPtId - (R) LLDB break point ID.
@@ -159,21 +160,22 @@ CMICmnLLDBDebugSessionInfo::RecordBrkPtI
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebugSessionInfo::RecordBrkPtInfoGet(const MIuint vnBrkPtId, SBrkPtInfo &vrwBrkPtInfo) const
-{
- const MapBrkPtIdToBrkPtInfo_t::const_iterator it = m_mapBrkPtIdToBrkPtInfo.find(vnBrkPtId);
- if (it != m_mapBrkPtIdToBrkPtInfo.end())
- {
- vrwBrkPtInfo = (*it).second;
- return MIstatus::success;
- }
-
- return MIstatus::failure;
-}
-
-//++ ------------------------------------------------------------------------------------
-// Details: Delete information about a specific LLDB break point object. This function
+bool CMICmnLLDBDebugSessionInfo::RecordBrkPtInfoGet(
+ const MIuint vnBrkPtId, SBrkPtInfo &vrwBrkPtInfo) const {
+ const MapBrkPtIdToBrkPtInfo_t::const_iterator it =
+ m_mapBrkPtIdToBrkPtInfo.find(vnBrkPtId);
+ if (it != m_mapBrkPtIdToBrkPtInfo.end()) {
+ vrwBrkPtInfo = (*it).second;
+ return MIstatus::success;
+ }
+
+ return MIstatus::failure;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: Delete information about a specific LLDB break point object. This
+// function
// should be called when a LLDB break point is deleted.
// Type: Method.
// Args: vBrkPtId - (R) LLDB break point ID.
@@ -181,20 +183,19 @@ CMICmnLLDBDebugSessionInfo::RecordBrkPtI
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebugSessionInfo::RecordBrkPtInfoDelete(const MIuint vnBrkPtId)
-{
- const MapBrkPtIdToBrkPtInfo_t::const_iterator it = m_mapBrkPtIdToBrkPtInfo.find(vnBrkPtId);
- if (it != m_mapBrkPtIdToBrkPtInfo.end())
- {
- m_mapBrkPtIdToBrkPtInfo.erase(it);
- return MIstatus::success;
- }
+bool CMICmnLLDBDebugSessionInfo::RecordBrkPtInfoDelete(const MIuint vnBrkPtId) {
+ const MapBrkPtIdToBrkPtInfo_t::const_iterator it =
+ m_mapBrkPtIdToBrkPtInfo.find(vnBrkPtId);
+ if (it != m_mapBrkPtIdToBrkPtInfo.end()) {
+ m_mapBrkPtIdToBrkPtInfo.erase(it);
+ return MIstatus::success;
+ }
- return MIstatus::failure;
+ return MIstatus::failure;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Retrieve the specified thread's frame information.
// Type: Method.
// Args: vCmdData - (R) A command's information.
@@ -204,43 +205,44 @@ CMICmnLLDBDebugSessionInfo::RecordBrkPtI
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebugSessionInfo::GetThreadFrames(const SMICmdData &vCmdData, const MIuint vThreadIdx, const FrameInfoFormat_e veFrameInfoFormat,
- CMIUtilString &vwrThreadFrames)
-{
- lldb::SBThread thread = GetProcess().GetThreadByIndexID(vThreadIdx);
- const uint32_t nFrames = thread.GetNumFrames();
- if (nFrames == 0)
- {
- // MI print "frame={}"
- CMICmnMIValueTuple miValueTuple;
- CMICmnMIValueResult miValueResult("frame", miValueTuple);
- vwrThreadFrames = miValueResult.GetString();
- return MIstatus::success;
- }
+bool CMICmnLLDBDebugSessionInfo::GetThreadFrames(
+ const SMICmdData &vCmdData, const MIuint vThreadIdx,
+ const FrameInfoFormat_e veFrameInfoFormat, CMIUtilString &vwrThreadFrames) {
+ lldb::SBThread thread = GetProcess().GetThreadByIndexID(vThreadIdx);
+ const uint32_t nFrames = thread.GetNumFrames();
+ if (nFrames == 0) {
+ // MI print "frame={}"
+ CMICmnMIValueTuple miValueTuple;
+ CMICmnMIValueResult miValueResult("frame", miValueTuple);
+ vwrThreadFrames = miValueResult.GetString();
+ return MIstatus::success;
+ }
+
+ // MI print
+ // "frame={level=\"%d\",addr=\"0x%016" PRIx64
+ // "\",func=\"%s\",args=[%s],file=\"%s\",fullname=\"%s\",line=\"%d\"},frame={level=\"%d\",addr=\"0x%016"
+ // PRIx64 "\",func=\"%s\",args=[%s],file=\"%s\",fullname=\"%s\",line=\"%d\"},
+ // ..."
+ CMIUtilString strListCommaSeparated;
+ for (MIuint nLevel = 0; nLevel < nFrames; nLevel++) {
+ CMICmnMIValueTuple miValueTuple;
+ if (!MIResponseFormFrameInfo(thread, nLevel, veFrameInfoFormat,
+ miValueTuple))
+ return MIstatus::failure;
+
+ const CMICmnMIValueResult miValueResult2("frame", miValueTuple);
+ if (nLevel != 0)
+ strListCommaSeparated += ",";
+ strListCommaSeparated += miValueResult2.GetString();
+ }
- // MI print
- // "frame={level=\"%d\",addr=\"0x%016" PRIx64 "\",func=\"%s\",args=[%s],file=\"%s\",fullname=\"%s\",line=\"%d\"},frame={level=\"%d\",addr=\"0x%016" PRIx64 "\",func=\"%s\",args=[%s],file=\"%s\",fullname=\"%s\",line=\"%d\"},
- // ..."
- CMIUtilString strListCommaSeparated;
- for (MIuint nLevel = 0; nLevel < nFrames; nLevel++)
- {
- CMICmnMIValueTuple miValueTuple;
- if (!MIResponseFormFrameInfo(thread, nLevel, veFrameInfoFormat, miValueTuple))
- return MIstatus::failure;
-
- const CMICmnMIValueResult miValueResult2("frame", miValueTuple);
- if (nLevel != 0)
- strListCommaSeparated += ",";
- strListCommaSeparated += miValueResult2.GetString();
- }
+ vwrThreadFrames = strListCommaSeparated;
- vwrThreadFrames = strListCommaSeparated;
-
- return MIstatus::success;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Return the resolved file's path for the given file.
// Type: Method.
// Args: vCmdData - (R) A command's information.
@@ -250,99 +252,100 @@ CMICmnLLDBDebugSessionInfo::GetThreadFra
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebugSessionInfo::ResolvePath(const SMICmdData &vCmdData, const CMIUtilString &vPath, CMIUtilString &vwrResolvedPath)
-{
- // ToDo: Verify this code as it does not work as vPath is always empty
-
- CMIUtilString strResolvedPath;
- if (!SharedDataRetrieve<CMIUtilString>(m_constStrSharedDataKeyWkDir, strResolvedPath))
- {
- vwrResolvedPath = "";
- SetErrorDescription(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_SHARED_DATA_NOT_FOUND), vCmdData.strMiCmd.c_str(),
- m_constStrSharedDataKeyWkDir.c_str()));
- return MIstatus::failure;
- }
+bool CMICmnLLDBDebugSessionInfo::ResolvePath(const SMICmdData &vCmdData,
+ const CMIUtilString &vPath,
+ CMIUtilString &vwrResolvedPath) {
+ // ToDo: Verify this code as it does not work as vPath is always empty
+
+ CMIUtilString strResolvedPath;
+ if (!SharedDataRetrieve<CMIUtilString>(m_constStrSharedDataKeyWkDir,
+ strResolvedPath)) {
+ vwrResolvedPath = "";
+ SetErrorDescription(CMIUtilString::Format(
+ MIRSRC(IDS_CMD_ERR_SHARED_DATA_NOT_FOUND), vCmdData.strMiCmd.c_str(),
+ m_constStrSharedDataKeyWkDir.c_str()));
+ return MIstatus::failure;
+ }
- vwrResolvedPath = vPath;
+ vwrResolvedPath = vPath;
- return ResolvePath(strResolvedPath, vwrResolvedPath);
+ return ResolvePath(strResolvedPath, vwrResolvedPath);
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Return the resolved file's path for the given file.
// Type: Method.
-// Args: vstrUnknown - (R) String assigned to path when resolved path is empty.
-// vwrResolvedPath - (RW) The original path overwritten with resolved path.
+// Args: vstrUnknown - (R) String assigned to path when resolved path
+// is empty.
+// vwrResolvedPath - (RW) The original path overwritten with resolved
+// path.
// Return: MIstatus::success - Functional succeeded.
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebugSessionInfo::ResolvePath(const CMIUtilString &vstrUnknown, CMIUtilString &vwrResolvedPath)
-{
- if (vwrResolvedPath.size() < 1)
- {
- vwrResolvedPath = vstrUnknown;
- return MIstatus::success;
- }
+bool CMICmnLLDBDebugSessionInfo::ResolvePath(const CMIUtilString &vstrUnknown,
+ CMIUtilString &vwrResolvedPath) {
+ if (vwrResolvedPath.size() < 1) {
+ vwrResolvedPath = vstrUnknown;
+ return MIstatus::success;
+ }
- bool bOk = MIstatus::success;
+ bool bOk = MIstatus::success;
- CMIUtilString::VecString_t vecPathFolders;
- const MIuint nSplits = vwrResolvedPath.Split("/", vecPathFolders);
- MIunused(nSplits);
- MIuint nFoldersBack = 1; // 1 is just the file (last element of vector)
- while (bOk && (vecPathFolders.size() >= nFoldersBack))
- {
- CMIUtilString strTestPath;
- MIuint nFoldersToAdd = nFoldersBack;
- while (nFoldersToAdd > 0)
- {
- strTestPath += "/";
- strTestPath += vecPathFolders[vecPathFolders.size() - nFoldersToAdd];
- nFoldersToAdd--;
- }
- bool bYesAccessible = false;
- bOk = AccessPath(strTestPath, bYesAccessible);
- if (bYesAccessible)
- {
- vwrResolvedPath = strTestPath;
- return MIstatus::success;
- }
- else
- nFoldersBack++;
+ CMIUtilString::VecString_t vecPathFolders;
+ const MIuint nSplits = vwrResolvedPath.Split("/", vecPathFolders);
+ MIunused(nSplits);
+ MIuint nFoldersBack = 1; // 1 is just the file (last element of vector)
+ while (bOk && (vecPathFolders.size() >= nFoldersBack)) {
+ CMIUtilString strTestPath;
+ MIuint nFoldersToAdd = nFoldersBack;
+ while (nFoldersToAdd > 0) {
+ strTestPath += "/";
+ strTestPath += vecPathFolders[vecPathFolders.size() - nFoldersToAdd];
+ nFoldersToAdd--;
}
+ bool bYesAccessible = false;
+ bOk = AccessPath(strTestPath, bYesAccessible);
+ if (bYesAccessible) {
+ vwrResolvedPath = strTestPath;
+ return MIstatus::success;
+ } else
+ nFoldersBack++;
+ }
- // No files exist in the union of working directory and debuginfo path
- // Simply use the debuginfo path and let the IDE handle it.
+ // No files exist in the union of working directory and debuginfo path
+ // Simply use the debuginfo path and let the IDE handle it.
- return bOk;
+ return bOk;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Determine the given file path exists or not.
// Type: Method.
// Args: vPath - (R) File name path.
-// vwbYesAccessible - (W) True - file exists, false = does not exist.
+// vwbYesAccessible - (W) True - file exists, false = does not
+// exist.
// Return: MIstatus::success - Functional succeeded.
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebugSessionInfo::AccessPath(const CMIUtilString &vPath, bool &vwbYesAccessible)
-{
+bool CMICmnLLDBDebugSessionInfo::AccessPath(const CMIUtilString &vPath,
+ bool &vwbYesAccessible) {
#ifdef _WIN32
- vwbYesAccessible = (::_access(vPath.c_str(), 0) == 0);
+ vwbYesAccessible = (::_access(vPath.c_str(), 0) == 0);
#else
- vwbYesAccessible = (::access(vPath.c_str(), 0) == 0);
+ vwbYesAccessible = (::access(vPath.c_str(), 0) == 0);
#endif // _WIN32
- return MIstatus::success;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
-// Details: Form MI partial response by appending more MI value type objects to the
+//++
+//------------------------------------------------------------------------------------
+// Details: Form MI partial response by appending more MI value type objects to
+// the
// tuple type object past in.
// Type: Method.
// Args: vCmdData - (R) A command's information.
@@ -352,184 +355,192 @@ CMICmnLLDBDebugSessionInfo::AccessPath(c
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebugSessionInfo::MIResponseFormThreadInfo(const SMICmdData &vCmdData, const lldb::SBThread &vrThread,
- const ThreadInfoFormat_e veThreadInfoFormat, CMICmnMIValueTuple &vwrMIValueTuple)
-{
- lldb::SBThread &rThread = const_cast<lldb::SBThread &>(vrThread);
-
- const bool bSuspended = rThread.IsSuspended();
- const lldb::StopReason eReason = rThread.GetStopReason();
- const bool bValidReason = !((eReason == lldb::eStopReasonNone) || (eReason == lldb::eStopReasonInvalid));
- const CMIUtilString strState((bSuspended || bValidReason) ? "stopped" : "running");
-
- // Add "id"
- const CMIUtilString strId(CMIUtilString::Format("%d", rThread.GetIndexID()));
- const CMICmnMIValueConst miValueConst1(strId);
- const CMICmnMIValueResult miValueResult1("id", miValueConst1);
- vwrMIValueTuple.Add(miValueResult1);
-
- // Add "target-id"
- const char *pThreadName = rThread.GetName();
- const MIuint len = (pThreadName != nullptr) ? CMIUtilString(pThreadName).length() : 0;
- const bool bHaveName = ((pThreadName != nullptr) && (len > 0) && (len < 32) &&
- CMIUtilString::IsAllValidAlphaAndNumeric(pThreadName)); // 32 is arbitrary number
- const char *pThrdFmt = bHaveName ? "%s" : "Thread %d";
- CMIUtilString strThread;
- if (bHaveName)
- strThread = CMIUtilString::Format(pThrdFmt, pThreadName);
- else
- strThread = CMIUtilString::Format(pThrdFmt, rThread.GetIndexID());
- const CMICmnMIValueConst miValueConst2(strThread);
- const CMICmnMIValueResult miValueResult2("target-id", miValueConst2);
- vwrMIValueTuple.Add(miValueResult2);
-
- // Add "frame"
- if (veThreadInfoFormat != eThreadInfoFormat_NoFrames)
- {
- CMIUtilString strFrames;
- if (!GetThreadFrames(vCmdData, rThread.GetIndexID(), eFrameInfoFormat_AllArgumentsInSimpleForm, strFrames))
- return MIstatus::failure;
-
- const CMICmnMIValueConst miValueConst3(strFrames, true);
- vwrMIValueTuple.Add(miValueConst3, false);
- }
-
- // Add "state"
- const CMICmnMIValueConst miValueConst4(strState);
- const CMICmnMIValueResult miValueResult4("state", miValueConst4);
- vwrMIValueTuple.Add(miValueResult4);
-
- return MIstatus::success;
-}
-
-//++ ------------------------------------------------------------------------------------
-// Details: Form MI partial response by appending more MI value type objects to the
+bool CMICmnLLDBDebugSessionInfo::MIResponseFormThreadInfo(
+ const SMICmdData &vCmdData, const lldb::SBThread &vrThread,
+ const ThreadInfoFormat_e veThreadInfoFormat,
+ CMICmnMIValueTuple &vwrMIValueTuple) {
+ lldb::SBThread &rThread = const_cast<lldb::SBThread &>(vrThread);
+
+ const bool bSuspended = rThread.IsSuspended();
+ const lldb::StopReason eReason = rThread.GetStopReason();
+ const bool bValidReason = !((eReason == lldb::eStopReasonNone) ||
+ (eReason == lldb::eStopReasonInvalid));
+ const CMIUtilString strState((bSuspended || bValidReason) ? "stopped"
+ : "running");
+
+ // Add "id"
+ const CMIUtilString strId(CMIUtilString::Format("%d", rThread.GetIndexID()));
+ const CMICmnMIValueConst miValueConst1(strId);
+ const CMICmnMIValueResult miValueResult1("id", miValueConst1);
+ vwrMIValueTuple.Add(miValueResult1);
+
+ // Add "target-id"
+ const char *pThreadName = rThread.GetName();
+ const MIuint len =
+ (pThreadName != nullptr) ? CMIUtilString(pThreadName).length() : 0;
+ const bool bHaveName = ((pThreadName != nullptr) && (len > 0) && (len < 32) &&
+ CMIUtilString::IsAllValidAlphaAndNumeric(
+ pThreadName)); // 32 is arbitrary number
+ const char *pThrdFmt = bHaveName ? "%s" : "Thread %d";
+ CMIUtilString strThread;
+ if (bHaveName)
+ strThread = CMIUtilString::Format(pThrdFmt, pThreadName);
+ else
+ strThread = CMIUtilString::Format(pThrdFmt, rThread.GetIndexID());
+ const CMICmnMIValueConst miValueConst2(strThread);
+ const CMICmnMIValueResult miValueResult2("target-id", miValueConst2);
+ vwrMIValueTuple.Add(miValueResult2);
+
+ // Add "frame"
+ if (veThreadInfoFormat != eThreadInfoFormat_NoFrames) {
+ CMIUtilString strFrames;
+ if (!GetThreadFrames(vCmdData, rThread.GetIndexID(),
+ eFrameInfoFormat_AllArgumentsInSimpleForm, strFrames))
+ return MIstatus::failure;
+
+ const CMICmnMIValueConst miValueConst3(strFrames, true);
+ vwrMIValueTuple.Add(miValueConst3, false);
+ }
+
+ // Add "state"
+ const CMICmnMIValueConst miValueConst4(strState);
+ const CMICmnMIValueResult miValueResult4("state", miValueConst4);
+ vwrMIValueTuple.Add(miValueResult4);
+
+ return MIstatus::success;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: Form MI partial response by appending more MI value type objects to
+// the
// tuple type object past in.
// Type: Method.
// Args: vrFrame - (R) LLDB thread object.
// vMaskVarTypes - (R) Construed according to VariableType_e.
-// veVarInfoFormat - (R) The type of variable info that should be shown.
+// veVarInfoFormat - (R) The type of variable info that should be
+// shown.
// vwrMIValueList - (W) MI value list object.
// Return: MIstatus::success - Functional succeeded.
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebugSessionInfo::MIResponseFormVariableInfo(const lldb::SBFrame &vrFrame, const MIuint vMaskVarTypes,
- const VariableInfoFormat_e veVarInfoFormat, CMICmnMIValueList &vwrMiValueList,
- const MIuint vnMaxDepth, /* = 10 */
- const bool vbMarkArgs /* = false*/)
-{
- bool bOk = MIstatus::success;
- lldb::SBFrame &rFrame = const_cast<lldb::SBFrame &>(vrFrame);
-
- const bool bArg = (vMaskVarTypes & eVariableType_Arguments);
- const bool bLocals = (vMaskVarTypes & eVariableType_Locals);
- const bool bStatics = (vMaskVarTypes & eVariableType_Statics);
- const bool bInScopeOnly = (vMaskVarTypes & eVariableType_InScope);
-
- // Handle arguments first
- lldb::SBValueList listArg = rFrame.GetVariables(bArg, false, false, false);
- bOk = bOk && MIResponseForVariableInfoInternal(veVarInfoFormat, vwrMiValueList, listArg, vnMaxDepth, true, vbMarkArgs);
-
- // Handle remaining variables
- lldb::SBValueList listVars = rFrame.GetVariables(false, bLocals, bStatics, bInScopeOnly);
- bOk = bOk && MIResponseForVariableInfoInternal(veVarInfoFormat, vwrMiValueList, listVars, vnMaxDepth, false, vbMarkArgs);
-
- return bOk;
-}
-
-bool
-CMICmnLLDBDebugSessionInfo::MIResponseForVariableInfoInternal(const VariableInfoFormat_e veVarInfoFormat,
- CMICmnMIValueList &vwrMiValueList,
- const lldb::SBValueList &vwrSBValueList,
- const MIuint vnMaxDepth,
- const bool vbIsArgs,
- const bool vbMarkArgs)
-{
- const MIuint nArgs = vwrSBValueList.GetSize();
- for (MIuint i = 0; i < nArgs; i++)
- {
- CMICmnMIValueTuple miValueTuple;
- lldb::SBValue value = vwrSBValueList.GetValueAtIndex(i);
- // If one stops inside try block with, which catch clause type is unnamed
- // (e.g std::exception&) then value name will be nullptr as well as value pointer
- const char* name = value.GetName();
- if (name == nullptr)
- continue;
- const CMICmnMIValueConst miValueConst(name);
- const CMICmnMIValueResult miValueResultName("name", miValueConst);
- if (vbMarkArgs && vbIsArgs)
- {
- const CMICmnMIValueConst miValueConstArg("1");
- const CMICmnMIValueResult miValueResultArg("arg", miValueConstArg);
- miValueTuple.Add(miValueResultArg);
- }
- if (veVarInfoFormat != eVariableInfoFormat_NoValues)
- {
- miValueTuple.Add(miValueResultName); // name
- if (veVarInfoFormat == eVariableInfoFormat_SimpleValues)
- {
- const CMICmnMIValueConst miValueConst3(value.GetTypeName());
- const CMICmnMIValueResult miValueResult3("type", miValueConst3);
- miValueTuple.Add(miValueResult3);
- }
- const MIuint nChildren = value.GetNumChildren();
- const bool bIsPointerType = value.GetType().IsPointerType();
- if (nChildren == 0 || // no children
- (bIsPointerType && nChildren == 1) || // pointers
- veVarInfoFormat == eVariableInfoFormat_AllValues) // show all values
- {
- CMIUtilString strValue;
- if (GetVariableInfo(value, vnMaxDepth == 0, strValue))
- {
- const CMICmnMIValueConst miValueConst2(strValue.Escape().AddSlashes());
- const CMICmnMIValueResult miValueResult2("value", miValueConst2);
- miValueTuple.Add(miValueResult2);
- }
- }
- vwrMiValueList.Add(miValueTuple);
- continue;
- }
-
- if (vbMarkArgs)
- {
- // If we are printing names only with vbMarkArgs, we still need to add the name to the value tuple
- miValueTuple.Add(miValueResultName); // name
- vwrMiValueList.Add(miValueTuple);
- }
- else
- {
- // If we are printing name only then no need to put it in the tuple.
- vwrMiValueList.Add(miValueResultName);
+bool CMICmnLLDBDebugSessionInfo::MIResponseFormVariableInfo(
+ const lldb::SBFrame &vrFrame, const MIuint vMaskVarTypes,
+ const VariableInfoFormat_e veVarInfoFormat,
+ CMICmnMIValueList &vwrMiValueList, const MIuint vnMaxDepth, /* = 10 */
+ const bool vbMarkArgs /* = false*/) {
+ bool bOk = MIstatus::success;
+ lldb::SBFrame &rFrame = const_cast<lldb::SBFrame &>(vrFrame);
+
+ const bool bArg = (vMaskVarTypes & eVariableType_Arguments);
+ const bool bLocals = (vMaskVarTypes & eVariableType_Locals);
+ const bool bStatics = (vMaskVarTypes & eVariableType_Statics);
+ const bool bInScopeOnly = (vMaskVarTypes & eVariableType_InScope);
+
+ // Handle arguments first
+ lldb::SBValueList listArg = rFrame.GetVariables(bArg, false, false, false);
+ bOk = bOk && MIResponseForVariableInfoInternal(veVarInfoFormat,
+ vwrMiValueList, listArg,
+ vnMaxDepth, true, vbMarkArgs);
+
+ // Handle remaining variables
+ lldb::SBValueList listVars =
+ rFrame.GetVariables(false, bLocals, bStatics, bInScopeOnly);
+ bOk = bOk && MIResponseForVariableInfoInternal(veVarInfoFormat,
+ vwrMiValueList, listVars,
+ vnMaxDepth, false, vbMarkArgs);
+
+ return bOk;
+}
+
+bool CMICmnLLDBDebugSessionInfo::MIResponseForVariableInfoInternal(
+ const VariableInfoFormat_e veVarInfoFormat,
+ CMICmnMIValueList &vwrMiValueList, const lldb::SBValueList &vwrSBValueList,
+ const MIuint vnMaxDepth, const bool vbIsArgs, const bool vbMarkArgs) {
+ const MIuint nArgs = vwrSBValueList.GetSize();
+ for (MIuint i = 0; i < nArgs; i++) {
+ CMICmnMIValueTuple miValueTuple;
+ lldb::SBValue value = vwrSBValueList.GetValueAtIndex(i);
+ // If one stops inside try block with, which catch clause type is unnamed
+ // (e.g std::exception&) then value name will be nullptr as well as value
+ // pointer
+ const char *name = value.GetName();
+ if (name == nullptr)
+ continue;
+ const CMICmnMIValueConst miValueConst(name);
+ const CMICmnMIValueResult miValueResultName("name", miValueConst);
+ if (vbMarkArgs && vbIsArgs) {
+ const CMICmnMIValueConst miValueConstArg("1");
+ const CMICmnMIValueResult miValueResultArg("arg", miValueConstArg);
+ miValueTuple.Add(miValueResultArg);
+ }
+ if (veVarInfoFormat != eVariableInfoFormat_NoValues) {
+ miValueTuple.Add(miValueResultName); // name
+ if (veVarInfoFormat == eVariableInfoFormat_SimpleValues) {
+ const CMICmnMIValueConst miValueConst3(value.GetTypeName());
+ const CMICmnMIValueResult miValueResult3("type", miValueConst3);
+ miValueTuple.Add(miValueResult3);
+ }
+ const MIuint nChildren = value.GetNumChildren();
+ const bool bIsPointerType = value.GetType().IsPointerType();
+ if (nChildren == 0 || // no children
+ (bIsPointerType && nChildren == 1) || // pointers
+ veVarInfoFormat == eVariableInfoFormat_AllValues) // show all values
+ {
+ CMIUtilString strValue;
+ if (GetVariableInfo(value, vnMaxDepth == 0, strValue)) {
+ const CMICmnMIValueConst miValueConst2(
+ strValue.Escape().AddSlashes());
+ const CMICmnMIValueResult miValueResult2("value", miValueConst2);
+ miValueTuple.Add(miValueResult2);
}
- }
- return MIstatus::success;
-}
-
-//++ ------------------------------------------------------------------------------------
-// Details: Extract the value's name and value or recurse into child value object.
+ }
+ vwrMiValueList.Add(miValueTuple);
+ continue;
+ }
+
+ if (vbMarkArgs) {
+ // If we are printing names only with vbMarkArgs, we still need to add the
+ // name to the value tuple
+ miValueTuple.Add(miValueResultName); // name
+ vwrMiValueList.Add(miValueTuple);
+ } else {
+ // If we are printing name only then no need to put it in the tuple.
+ vwrMiValueList.Add(miValueResultName);
+ }
+ }
+ return MIstatus::success;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: Extract the value's name and value or recurse into child value
+// object.
// Type: Method.
// Args: vrValue - (R) LLDB value object.
-// vbInSimpleForm - (R) True = Get variable info in simple form (i.e. don't expand aggregates).
-// - False = Get variable info (and expand aggregates if any).
+// vbInSimpleForm - (R) True = Get variable info in simple form (i.e.
+// don't expand aggregates).
+// - False = Get variable info (and expand
+// aggregates if any).
// vwrStrValue t - (W) The string representation of this value.
// Return: MIstatus::success - Functional succeeded.
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebugSessionInfo::GetVariableInfo(const lldb::SBValue &vrValue, const bool vbInSimpleForm, CMIUtilString &vwrStrValue)
-{
- const CMICmnLLDBUtilSBValue utilValue(vrValue, true, false);
- const bool bExpandAggregates = vbInSimpleForm ? false : true;
- vwrStrValue = utilValue.GetValue(bExpandAggregates);
- return MIstatus::success;
+bool CMICmnLLDBDebugSessionInfo::GetVariableInfo(const lldb::SBValue &vrValue,
+ const bool vbInSimpleForm,
+ CMIUtilString &vwrStrValue) {
+ const CMICmnLLDBUtilSBValue utilValue(vrValue, true, false);
+ const bool bExpandAggregates = vbInSimpleForm ? false : true;
+ vwrStrValue = utilValue.GetValue(bExpandAggregates);
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
-// Details: Form MI partial response by appending more MI value type objects to the
+//++
+//------------------------------------------------------------------------------------
+// Details: Form MI partial response by appending more MI value type objects to
+// the
// tuple type object past in.
// Type: Method.
// Args: vrThread - (R) LLDB thread object.
@@ -539,64 +550,66 @@ CMICmnLLDBDebugSessionInfo::GetVariableI
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebugSessionInfo::MIResponseFormFrameInfo(const lldb::SBThread &vrThread, const MIuint vnLevel,
- const FrameInfoFormat_e veFrameInfoFormat, CMICmnMIValueTuple &vwrMiValueTuple)
-{
- lldb::SBThread &rThread = const_cast<lldb::SBThread &>(vrThread);
-
- lldb::SBFrame frame = rThread.GetFrameAtIndex(vnLevel);
- lldb::addr_t pc = 0;
- CMIUtilString fnName;
- CMIUtilString fileName;
- CMIUtilString path;
- MIuint nLine = 0;
- if (!GetFrameInfo(frame, pc, fnName, fileName, path, nLine))
- return MIstatus::failure;
-
- // MI print "{level=\"0\",addr=\"0x%016" PRIx64 "\",func=\"%s\",file=\"%s\",fullname=\"%s\",line=\"%d\"}"
- const CMIUtilString strLevel(CMIUtilString::Format("%d", vnLevel));
- const CMICmnMIValueConst miValueConst(strLevel);
- const CMICmnMIValueResult miValueResult("level", miValueConst);
- vwrMiValueTuple.Add(miValueResult);
- const CMIUtilString strAddr(CMIUtilString::Format("0x%016" PRIx64, pc));
- const CMICmnMIValueConst miValueConst2(strAddr);
- const CMICmnMIValueResult miValueResult2("addr", miValueConst2);
- vwrMiValueTuple.Add(miValueResult2);
- const CMICmnMIValueConst miValueConst3(fnName);
- const CMICmnMIValueResult miValueResult3("func", miValueConst3);
- vwrMiValueTuple.Add(miValueResult3);
- if (veFrameInfoFormat != eFrameInfoFormat_NoArguments)
- {
- CMICmnMIValueList miValueList(true);
- const MIuint maskVarTypes = eVariableType_Arguments;
- if (veFrameInfoFormat == eFrameInfoFormat_AllArgumentsInSimpleForm)
- {
- if (!MIResponseFormVariableInfo(frame, maskVarTypes, eVariableInfoFormat_AllValues, miValueList, 0))
- return MIstatus::failure;
- }
- else
- if (!MIResponseFormVariableInfo(frame, maskVarTypes, eVariableInfoFormat_AllValues, miValueList))
- return MIstatus::failure;
+bool CMICmnLLDBDebugSessionInfo::MIResponseFormFrameInfo(
+ const lldb::SBThread &vrThread, const MIuint vnLevel,
+ const FrameInfoFormat_e veFrameInfoFormat,
+ CMICmnMIValueTuple &vwrMiValueTuple) {
+ lldb::SBThread &rThread = const_cast<lldb::SBThread &>(vrThread);
+
+ lldb::SBFrame frame = rThread.GetFrameAtIndex(vnLevel);
+ lldb::addr_t pc = 0;
+ CMIUtilString fnName;
+ CMIUtilString fileName;
+ CMIUtilString path;
+ MIuint nLine = 0;
+ if (!GetFrameInfo(frame, pc, fnName, fileName, path, nLine))
+ return MIstatus::failure;
- const CMICmnMIValueResult miValueResult4("args", miValueList);
- vwrMiValueTuple.Add(miValueResult4);
- }
- const CMICmnMIValueConst miValueConst5(fileName);
- const CMICmnMIValueResult miValueResult5("file", miValueConst5);
- vwrMiValueTuple.Add(miValueResult5);
- const CMICmnMIValueConst miValueConst6(path);
- const CMICmnMIValueResult miValueResult6("fullname", miValueConst6);
- vwrMiValueTuple.Add(miValueResult6);
- const CMIUtilString strLine(CMIUtilString::Format("%d", nLine));
- const CMICmnMIValueConst miValueConst7(strLine);
- const CMICmnMIValueResult miValueResult7("line", miValueConst7);
- vwrMiValueTuple.Add(miValueResult7);
+ // MI print "{level=\"0\",addr=\"0x%016" PRIx64
+ // "\",func=\"%s\",file=\"%s\",fullname=\"%s\",line=\"%d\"}"
+ const CMIUtilString strLevel(CMIUtilString::Format("%d", vnLevel));
+ const CMICmnMIValueConst miValueConst(strLevel);
+ const CMICmnMIValueResult miValueResult("level", miValueConst);
+ vwrMiValueTuple.Add(miValueResult);
+ const CMIUtilString strAddr(CMIUtilString::Format("0x%016" PRIx64, pc));
+ const CMICmnMIValueConst miValueConst2(strAddr);
+ const CMICmnMIValueResult miValueResult2("addr", miValueConst2);
+ vwrMiValueTuple.Add(miValueResult2);
+ const CMICmnMIValueConst miValueConst3(fnName);
+ const CMICmnMIValueResult miValueResult3("func", miValueConst3);
+ vwrMiValueTuple.Add(miValueResult3);
+ if (veFrameInfoFormat != eFrameInfoFormat_NoArguments) {
+ CMICmnMIValueList miValueList(true);
+ const MIuint maskVarTypes = eVariableType_Arguments;
+ if (veFrameInfoFormat == eFrameInfoFormat_AllArgumentsInSimpleForm) {
+ if (!MIResponseFormVariableInfo(frame, maskVarTypes,
+ eVariableInfoFormat_AllValues,
+ miValueList, 0))
+ return MIstatus::failure;
+ } else if (!MIResponseFormVariableInfo(frame, maskVarTypes,
+ eVariableInfoFormat_AllValues,
+ miValueList))
+ return MIstatus::failure;
+
+ const CMICmnMIValueResult miValueResult4("args", miValueList);
+ vwrMiValueTuple.Add(miValueResult4);
+ }
+ const CMICmnMIValueConst miValueConst5(fileName);
+ const CMICmnMIValueResult miValueResult5("file", miValueConst5);
+ vwrMiValueTuple.Add(miValueResult5);
+ const CMICmnMIValueConst miValueConst6(path);
+ const CMICmnMIValueResult miValueResult6("fullname", miValueConst6);
+ vwrMiValueTuple.Add(miValueResult6);
+ const CMIUtilString strLine(CMIUtilString::Format("%d", nLine));
+ const CMICmnMIValueConst miValueConst7(strLine);
+ const CMICmnMIValueResult miValueResult7("line", miValueConst7);
+ vwrMiValueTuple.Add(miValueResult7);
- return MIstatus::success;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Retrieve the frame information from LLDB frame object.
// Type: Method.
// Args: vrFrame - (R) LLDB thread object.
@@ -609,36 +622,38 @@ CMICmnLLDBDebugSessionInfo::MIResponseFo
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebugSessionInfo::GetFrameInfo(const lldb::SBFrame &vrFrame, lldb::addr_t &vwPc, CMIUtilString &vwFnName,
- CMIUtilString &vwFileName, CMIUtilString &vwPath, MIuint &vwnLine)
-{
- lldb::SBFrame &rFrame = const_cast<lldb::SBFrame &>(vrFrame);
-
- static char pBuffer[PATH_MAX];
- const MIuint nBytes = rFrame.GetLineEntry().GetFileSpec().GetPath(&pBuffer[0], sizeof(pBuffer));
- MIunused(nBytes);
- CMIUtilString strResolvedPath(&pBuffer[0]);
- const char *pUnkwn = "??";
- if (!ResolvePath(pUnkwn, strResolvedPath))
- return MIstatus::failure;
- vwPath = strResolvedPath;
+bool CMICmnLLDBDebugSessionInfo::GetFrameInfo(
+ const lldb::SBFrame &vrFrame, lldb::addr_t &vwPc, CMIUtilString &vwFnName,
+ CMIUtilString &vwFileName, CMIUtilString &vwPath, MIuint &vwnLine) {
+ lldb::SBFrame &rFrame = const_cast<lldb::SBFrame &>(vrFrame);
+
+ static char pBuffer[PATH_MAX];
+ const MIuint nBytes =
+ rFrame.GetLineEntry().GetFileSpec().GetPath(&pBuffer[0], sizeof(pBuffer));
+ MIunused(nBytes);
+ CMIUtilString strResolvedPath(&pBuffer[0]);
+ const char *pUnkwn = "??";
+ if (!ResolvePath(pUnkwn, strResolvedPath))
+ return MIstatus::failure;
+ vwPath = strResolvedPath;
- vwPc = rFrame.GetPC();
+ vwPc = rFrame.GetPC();
- const char *pFnName = rFrame.GetFunctionName();
- vwFnName = (pFnName != nullptr) ? pFnName : pUnkwn;
+ const char *pFnName = rFrame.GetFunctionName();
+ vwFnName = (pFnName != nullptr) ? pFnName : pUnkwn;
- const char *pFileName = rFrame.GetLineEntry().GetFileSpec().GetFilename();
- vwFileName = (pFileName != nullptr) ? pFileName : pUnkwn;
+ const char *pFileName = rFrame.GetLineEntry().GetFileSpec().GetFilename();
+ vwFileName = (pFileName != nullptr) ? pFileName : pUnkwn;
- vwnLine = rFrame.GetLineEntry().GetLine();
+ vwnLine = rFrame.GetLineEntry().GetLine();
- return MIstatus::success;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
-// Details: Form MI partial response by appending more MI value type objects to the
+//++
+//------------------------------------------------------------------------------------
+// Details: Form MI partial response by appending more MI value type objects to
+// the
// tuple type object past in.
// Type: Method.
// Args: vrBrkPtInfo - (R) Break point information object.
@@ -646,31 +661,34 @@ CMICmnLLDBDebugSessionInfo::GetFrameInfo
// Return: None.
// Throws: None.
//--
-void
-CMICmnLLDBDebugSessionInfo::MIResponseFormBrkPtFrameInfo(const SBrkPtInfo &vrBrkPtInfo, CMICmnMIValueTuple &vwrMiValueTuple)
-{
- const CMIUtilString strAddr(CMIUtilString::Format("0x%016" PRIx64, vrBrkPtInfo.m_pc));
- const CMICmnMIValueConst miValueConst2(strAddr);
- const CMICmnMIValueResult miValueResult2("addr", miValueConst2);
- vwrMiValueTuple.Add(miValueResult2);
- const CMICmnMIValueConst miValueConst3(vrBrkPtInfo.m_fnName);
- const CMICmnMIValueResult miValueResult3("func", miValueConst3);
- vwrMiValueTuple.Add(miValueResult3);
- const CMICmnMIValueConst miValueConst5(vrBrkPtInfo.m_fileName);
- const CMICmnMIValueResult miValueResult5("file", miValueConst5);
- vwrMiValueTuple.Add(miValueResult5);
- const CMIUtilString strN5 = CMIUtilString::Format("%s/%s", vrBrkPtInfo.m_path.c_str(), vrBrkPtInfo.m_fileName.c_str());
- const CMICmnMIValueConst miValueConst6(strN5);
- const CMICmnMIValueResult miValueResult6("fullname", miValueConst6);
- vwrMiValueTuple.Add(miValueResult6);
- const CMIUtilString strLine(CMIUtilString::Format("%d", vrBrkPtInfo.m_nLine));
- const CMICmnMIValueConst miValueConst7(strLine);
- const CMICmnMIValueResult miValueResult7("line", miValueConst7);
- vwrMiValueTuple.Add(miValueResult7);
-}
-
-//++ ------------------------------------------------------------------------------------
-// Details: Form MI partial response by appending more MI value type objects to the
+void CMICmnLLDBDebugSessionInfo::MIResponseFormBrkPtFrameInfo(
+ const SBrkPtInfo &vrBrkPtInfo, CMICmnMIValueTuple &vwrMiValueTuple) {
+ const CMIUtilString strAddr(
+ CMIUtilString::Format("0x%016" PRIx64, vrBrkPtInfo.m_pc));
+ const CMICmnMIValueConst miValueConst2(strAddr);
+ const CMICmnMIValueResult miValueResult2("addr", miValueConst2);
+ vwrMiValueTuple.Add(miValueResult2);
+ const CMICmnMIValueConst miValueConst3(vrBrkPtInfo.m_fnName);
+ const CMICmnMIValueResult miValueResult3("func", miValueConst3);
+ vwrMiValueTuple.Add(miValueResult3);
+ const CMICmnMIValueConst miValueConst5(vrBrkPtInfo.m_fileName);
+ const CMICmnMIValueResult miValueResult5("file", miValueConst5);
+ vwrMiValueTuple.Add(miValueResult5);
+ const CMIUtilString strN5 = CMIUtilString::Format(
+ "%s/%s", vrBrkPtInfo.m_path.c_str(), vrBrkPtInfo.m_fileName.c_str());
+ const CMICmnMIValueConst miValueConst6(strN5);
+ const CMICmnMIValueResult miValueResult6("fullname", miValueConst6);
+ vwrMiValueTuple.Add(miValueResult6);
+ const CMIUtilString strLine(CMIUtilString::Format("%d", vrBrkPtInfo.m_nLine));
+ const CMICmnMIValueConst miValueConst7(strLine);
+ const CMICmnMIValueResult miValueResult7("line", miValueConst7);
+ vwrMiValueTuple.Add(miValueResult7);
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: Form MI partial response by appending more MI value type objects to
+// the
// tuple type object past in.
// Type: Method.
// Args: vrBrkPtInfo - (R) Break point information object.
@@ -679,89 +697,94 @@ CMICmnLLDBDebugSessionInfo::MIResponseFo
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebugSessionInfo::MIResponseFormBrkPtInfo(const SBrkPtInfo &vrBrkPtInfo, CMICmnMIValueTuple &vwrMiValueTuple)
-{
- // MI print "=breakpoint-modified,bkpt={number=\"%d\",type=\"breakpoint\",disp=\"%s\",enabled=\"%c\",addr=\"0x%016" PRIx64 "\",
- // func=\"%s\",file=\"%s\",fullname=\"%s/%s\",line=\"%d\",times=\"%d\",original-location=\"%s\"}"
-
- // "number="
- const CMICmnMIValueConst miValueConst(CMIUtilString::Format("%d", vrBrkPtInfo.m_id));
- const CMICmnMIValueResult miValueResult("number", miValueConst);
- CMICmnMIValueTuple miValueTuple(miValueResult);
- // "type="
- const CMICmnMIValueConst miValueConst2(vrBrkPtInfo.m_strType);
- const CMICmnMIValueResult miValueResult2("type", miValueConst2);
- miValueTuple.Add(miValueResult2);
- // "disp="
- const CMICmnMIValueConst miValueConst3(vrBrkPtInfo.m_bDisp ? "del" : "keep");
- const CMICmnMIValueResult miValueResult3("disp", miValueConst3);
- miValueTuple.Add(miValueResult3);
- // "enabled="
- const CMICmnMIValueConst miValueConst4(vrBrkPtInfo.m_bEnabled ? "y" : "n");
- const CMICmnMIValueResult miValueResult4("enabled", miValueConst4);
- miValueTuple.Add(miValueResult4);
- // "addr="
- // "func="
- // "file="
- // "fullname="
- // "line="
- MIResponseFormBrkPtFrameInfo(vrBrkPtInfo, miValueTuple);
- // "pending="
- if (vrBrkPtInfo.m_bPending)
- {
- const CMICmnMIValueConst miValueConst(vrBrkPtInfo.m_strOrigLoc);
- const CMICmnMIValueList miValueList(miValueConst);
- const CMICmnMIValueResult miValueResult("pending", miValueList);
- miValueTuple.Add(miValueResult);
- }
- if (vrBrkPtInfo.m_bHaveArgOptionThreadGrp)
- {
- const CMICmnMIValueConst miValueConst(vrBrkPtInfo.m_strOptThrdGrp);
- const CMICmnMIValueList miValueList(miValueConst);
- const CMICmnMIValueResult miValueResult("thread-groups", miValueList);
- miValueTuple.Add(miValueResult);
- }
- // "times="
- const CMICmnMIValueConst miValueConstB(CMIUtilString::Format("%d", vrBrkPtInfo.m_nTimes));
- const CMICmnMIValueResult miValueResultB("times", miValueConstB);
- miValueTuple.Add(miValueResultB);
- // "thread="
- if (vrBrkPtInfo.m_bBrkPtThreadId)
- {
- const CMICmnMIValueConst miValueConst(CMIUtilString::Format("%d", vrBrkPtInfo.m_nBrkPtThreadId));
- const CMICmnMIValueResult miValueResult("thread", miValueConst);
- miValueTuple.Add(miValueResult);
- }
- // "cond="
- if (vrBrkPtInfo.m_bCondition)
- {
- const CMICmnMIValueConst miValueConst(vrBrkPtInfo.m_strCondition);
- const CMICmnMIValueResult miValueResult("cond", miValueConst);
- miValueTuple.Add(miValueResult);
- }
- // "ignore="
- if (vrBrkPtInfo.m_nIgnore != 0)
- {
- const CMICmnMIValueConst miValueConst(CMIUtilString::Format("%d", vrBrkPtInfo.m_nIgnore));
- const CMICmnMIValueResult miValueResult("ignore", miValueConst);
- miValueTuple.Add(miValueResult);
- }
- // "original-location="
- const CMICmnMIValueConst miValueConstC(vrBrkPtInfo.m_strOrigLoc);
- const CMICmnMIValueResult miValueResultC("original-location", miValueConstC);
- miValueTuple.Add(miValueResultC);
-
- vwrMiValueTuple = miValueTuple;
-
- return MIstatus::success;
-}
-
-//++ ------------------------------------------------------------------------------------
-// Details: Retrieve breakpoint information and write into the given breakpoint information
-// object. Note not all possible information is retrieved and so the information
-// object may need to be filled in with more information after calling this
-// function. Mainly breakpoint location information of information that is
+bool CMICmnLLDBDebugSessionInfo::MIResponseFormBrkPtInfo(
+ const SBrkPtInfo &vrBrkPtInfo, CMICmnMIValueTuple &vwrMiValueTuple) {
+ // MI print
+ // "=breakpoint-modified,bkpt={number=\"%d\",type=\"breakpoint\",disp=\"%s\",enabled=\"%c\",addr=\"0x%016"
+ // PRIx64 "\",
+ // func=\"%s\",file=\"%s\",fullname=\"%s/%s\",line=\"%d\",times=\"%d\",original-location=\"%s\"}"
+
+ // "number="
+ const CMICmnMIValueConst miValueConst(
+ CMIUtilString::Format("%d", vrBrkPtInfo.m_id));
+ const CMICmnMIValueResult miValueResult("number", miValueConst);
+ CMICmnMIValueTuple miValueTuple(miValueResult);
+ // "type="
+ const CMICmnMIValueConst miValueConst2(vrBrkPtInfo.m_strType);
+ const CMICmnMIValueResult miValueResult2("type", miValueConst2);
+ miValueTuple.Add(miValueResult2);
+ // "disp="
+ const CMICmnMIValueConst miValueConst3(vrBrkPtInfo.m_bDisp ? "del" : "keep");
+ const CMICmnMIValueResult miValueResult3("disp", miValueConst3);
+ miValueTuple.Add(miValueResult3);
+ // "enabled="
+ const CMICmnMIValueConst miValueConst4(vrBrkPtInfo.m_bEnabled ? "y" : "n");
+ const CMICmnMIValueResult miValueResult4("enabled", miValueConst4);
+ miValueTuple.Add(miValueResult4);
+ // "addr="
+ // "func="
+ // "file="
+ // "fullname="
+ // "line="
+ MIResponseFormBrkPtFrameInfo(vrBrkPtInfo, miValueTuple);
+ // "pending="
+ if (vrBrkPtInfo.m_bPending) {
+ const CMICmnMIValueConst miValueConst(vrBrkPtInfo.m_strOrigLoc);
+ const CMICmnMIValueList miValueList(miValueConst);
+ const CMICmnMIValueResult miValueResult("pending", miValueList);
+ miValueTuple.Add(miValueResult);
+ }
+ if (vrBrkPtInfo.m_bHaveArgOptionThreadGrp) {
+ const CMICmnMIValueConst miValueConst(vrBrkPtInfo.m_strOptThrdGrp);
+ const CMICmnMIValueList miValueList(miValueConst);
+ const CMICmnMIValueResult miValueResult("thread-groups", miValueList);
+ miValueTuple.Add(miValueResult);
+ }
+ // "times="
+ const CMICmnMIValueConst miValueConstB(
+ CMIUtilString::Format("%d", vrBrkPtInfo.m_nTimes));
+ const CMICmnMIValueResult miValueResultB("times", miValueConstB);
+ miValueTuple.Add(miValueResultB);
+ // "thread="
+ if (vrBrkPtInfo.m_bBrkPtThreadId) {
+ const CMICmnMIValueConst miValueConst(
+ CMIUtilString::Format("%d", vrBrkPtInfo.m_nBrkPtThreadId));
+ const CMICmnMIValueResult miValueResult("thread", miValueConst);
+ miValueTuple.Add(miValueResult);
+ }
+ // "cond="
+ if (vrBrkPtInfo.m_bCondition) {
+ const CMICmnMIValueConst miValueConst(vrBrkPtInfo.m_strCondition);
+ const CMICmnMIValueResult miValueResult("cond", miValueConst);
+ miValueTuple.Add(miValueResult);
+ }
+ // "ignore="
+ if (vrBrkPtInfo.m_nIgnore != 0) {
+ const CMICmnMIValueConst miValueConst(
+ CMIUtilString::Format("%d", vrBrkPtInfo.m_nIgnore));
+ const CMICmnMIValueResult miValueResult("ignore", miValueConst);
+ miValueTuple.Add(miValueResult);
+ }
+ // "original-location="
+ const CMICmnMIValueConst miValueConstC(vrBrkPtInfo.m_strOrigLoc);
+ const CMICmnMIValueResult miValueResultC("original-location", miValueConstC);
+ miValueTuple.Add(miValueResultC);
+
+ vwrMiValueTuple = miValueTuple;
+
+ return MIstatus::success;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: Retrieve breakpoint information and write into the given breakpoint
+// information
+// object. Note not all possible information is retrieved and so the
+// information
+// object may need to be filled in with more information after calling
+// this
+// function. Mainly breakpoint location information of information that
+// is
// unlikely to change.
// Type: Method.
// Args: vBrkPt - (R) LLDB break point object.
@@ -770,99 +793,95 @@ CMICmnLLDBDebugSessionInfo::MIResponseFo
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebugSessionInfo::GetBrkPtInfo(const lldb::SBBreakpoint &vBrkPt, SBrkPtInfo &vrwBrkPtInfo) const
-{
- lldb::SBBreakpoint &rBrkPt = const_cast<lldb::SBBreakpoint &>(vBrkPt);
- lldb::SBBreakpointLocation brkPtLoc = rBrkPt.GetLocationAtIndex(0);
- lldb::SBAddress brkPtAddr = brkPtLoc.GetAddress();
- lldb::SBSymbolContext symbolCntxt = brkPtAddr.GetSymbolContext(lldb::eSymbolContextEverything);
- const char *pUnkwn = "??";
- lldb::SBModule rModule = symbolCntxt.GetModule();
- const char *pModule = rModule.IsValid() ? rModule.GetFileSpec().GetFilename() : pUnkwn;
- MIunused(pModule);
- const char *pFile = pUnkwn;
- const char *pFn = pUnkwn;
- const char *pFilePath = pUnkwn;
- size_t nLine = 0;
- lldb::addr_t nAddr = brkPtAddr.GetLoadAddress(GetTarget());
- if (nAddr == LLDB_INVALID_ADDRESS)
- nAddr = brkPtAddr.GetFileAddress();
-
- lldb::SBCompileUnit rCmplUnit = symbolCntxt.GetCompileUnit();
- if (rCmplUnit.IsValid())
- {
- lldb::SBFileSpec rFileSpec = rCmplUnit.GetFileSpec();
- pFile = rFileSpec.GetFilename();
- pFilePath = rFileSpec.GetDirectory();
- lldb::SBFunction rFn = symbolCntxt.GetFunction();
- if (rFn.IsValid())
- pFn = rFn.GetName();
- lldb::SBLineEntry rLnEntry = symbolCntxt.GetLineEntry();
- if (rLnEntry.GetLine() > 0)
- nLine = rLnEntry.GetLine();
- }
+bool CMICmnLLDBDebugSessionInfo::GetBrkPtInfo(const lldb::SBBreakpoint &vBrkPt,
+ SBrkPtInfo &vrwBrkPtInfo) const {
+ lldb::SBBreakpoint &rBrkPt = const_cast<lldb::SBBreakpoint &>(vBrkPt);
+ lldb::SBBreakpointLocation brkPtLoc = rBrkPt.GetLocationAtIndex(0);
+ lldb::SBAddress brkPtAddr = brkPtLoc.GetAddress();
+ lldb::SBSymbolContext symbolCntxt =
+ brkPtAddr.GetSymbolContext(lldb::eSymbolContextEverything);
+ const char *pUnkwn = "??";
+ lldb::SBModule rModule = symbolCntxt.GetModule();
+ const char *pModule =
+ rModule.IsValid() ? rModule.GetFileSpec().GetFilename() : pUnkwn;
+ MIunused(pModule);
+ const char *pFile = pUnkwn;
+ const char *pFn = pUnkwn;
+ const char *pFilePath = pUnkwn;
+ size_t nLine = 0;
+ lldb::addr_t nAddr = brkPtAddr.GetLoadAddress(GetTarget());
+ if (nAddr == LLDB_INVALID_ADDRESS)
+ nAddr = brkPtAddr.GetFileAddress();
+
+ lldb::SBCompileUnit rCmplUnit = symbolCntxt.GetCompileUnit();
+ if (rCmplUnit.IsValid()) {
+ lldb::SBFileSpec rFileSpec = rCmplUnit.GetFileSpec();
+ pFile = rFileSpec.GetFilename();
+ pFilePath = rFileSpec.GetDirectory();
+ lldb::SBFunction rFn = symbolCntxt.GetFunction();
+ if (rFn.IsValid())
+ pFn = rFn.GetName();
+ lldb::SBLineEntry rLnEntry = symbolCntxt.GetLineEntry();
+ if (rLnEntry.GetLine() > 0)
+ nLine = rLnEntry.GetLine();
+ }
+
+ vrwBrkPtInfo.m_id = vBrkPt.GetID();
+ vrwBrkPtInfo.m_strType = "breakpoint";
+ vrwBrkPtInfo.m_pc = nAddr;
+ vrwBrkPtInfo.m_fnName = pFn;
+ vrwBrkPtInfo.m_fileName = pFile;
+ vrwBrkPtInfo.m_path = pFilePath;
+ vrwBrkPtInfo.m_nLine = nLine;
+ vrwBrkPtInfo.m_nTimes = vBrkPt.GetHitCount();
- vrwBrkPtInfo.m_id = vBrkPt.GetID();
- vrwBrkPtInfo.m_strType = "breakpoint";
- vrwBrkPtInfo.m_pc = nAddr;
- vrwBrkPtInfo.m_fnName = pFn;
- vrwBrkPtInfo.m_fileName = pFile;
- vrwBrkPtInfo.m_path = pFilePath;
- vrwBrkPtInfo.m_nLine = nLine;
- vrwBrkPtInfo.m_nTimes = vBrkPt.GetHitCount();
-
- return MIstatus::success;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Get current debugger.
// Type: Method.
// Args: None.
// Return: lldb::SBDebugger - current debugger.
// Throws: None.
//--
-lldb::SBDebugger &
-CMICmnLLDBDebugSessionInfo::GetDebugger() const
-{
- return CMICmnLLDBDebugger::Instance().GetTheDebugger();
+lldb::SBDebugger &CMICmnLLDBDebugSessionInfo::GetDebugger() const {
+ return CMICmnLLDBDebugger::Instance().GetTheDebugger();
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Get current listener.
// Type: Method.
// Args: None.
// Return: lldb::SBListener - current listener.
// Throws: None.
//--
-lldb::SBListener &
-CMICmnLLDBDebugSessionInfo::GetListener() const
-{
- return CMICmnLLDBDebugger::Instance().GetTheListener();
+lldb::SBListener &CMICmnLLDBDebugSessionInfo::GetListener() const {
+ return CMICmnLLDBDebugger::Instance().GetTheListener();
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Get current target.
// Type: Method.
// Args: None.
// Return: lldb::SBTarget - current target.
// Throws: None.
//--
-lldb::SBTarget
-CMICmnLLDBDebugSessionInfo::GetTarget() const
-{
- return GetDebugger().GetSelectedTarget();
+lldb::SBTarget CMICmnLLDBDebugSessionInfo::GetTarget() const {
+ return GetDebugger().GetSelectedTarget();
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Get current process.
// Type: Method.
// Args: None.
// Return: lldb::SBProcess - current process.
// Throws: None.
//--
-lldb::SBProcess
-CMICmnLLDBDebugSessionInfo::GetProcess() const
-{
- return GetTarget().GetProcess();
+lldb::SBProcess CMICmnLLDBDebugSessionInfo::GetProcess() const {
+ return GetTarget().GetProcess();
}
Modified: lldb/trunk/tools/lldb-mi/MICmnLLDBDebugSessionInfo.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnLLDBDebugSessionInfo.h?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnLLDBDebugSessionInfo.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmnLLDBDebugSessionInfo.h Tue Sep 6 15:57:50 2016
@@ -10,19 +10,19 @@
#pragma once
// Third party headers:
-#include <map>
-#include <vector>
#include "lldb/API/SBDebugger.h"
#include "lldb/API/SBListener.h"
#include "lldb/API/SBProcess.h"
#include "lldb/API/SBTarget.h"
+#include <map>
+#include <vector>
// In-house headers:
#include "MICmnBase.h"
-#include "MIUtilSingletonBase.h"
#include "MICmnLLDBDebugSessionInfoVarObj.h"
#include "MICmnMIValueTuple.h"
#include "MIUtilMapIdToVariant.h"
+#include "MIUtilSingletonBase.h"
#include "MIUtilThreadBaseStd.h"
// Declarations:
@@ -31,7 +31,8 @@ struct SMICmdData;
class CMICmnMIValueTuple;
class CMICmnMIValueList;
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI debug session object that holds debugging information between
// instances of MI commands executing their work and producing MI
// result records. Information/data is set by one or many commands then
@@ -39,186 +40,214 @@ class CMICmnMIValueList;
// It primarily holds LLDB type objects.
// A singleton class.
//--
-class CMICmnLLDBDebugSessionInfo : public CMICmnBase, public MI::ISingleton<CMICmnLLDBDebugSessionInfo>
-{
- friend class MI::ISingleton<CMICmnLLDBDebugSessionInfo>;
-
- // Structs:
- public:
- //++ ============================================================================
- // Details: Break point information object. Used to easily pass information about
- // a break around and record break point information to be recalled by
- // other commands or LLDB event handling functions.
- //--
- struct SBrkPtInfo
- {
- SBrkPtInfo()
- : m_id(0)
- , m_bDisp(false)
- , m_bEnabled(false)
- , m_pc(0)
- , m_nLine(0)
- , m_bHaveArgOptionThreadGrp(false)
- , m_nTimes(0)
- , m_bPending(false)
- , m_nIgnore(0)
- , m_bCondition(false)
- , m_bBrkPtThreadId(false)
- , m_nBrkPtThreadId(0)
- {
- }
-
- MIuint m_id; // LLDB break point ID.
- CMIUtilString m_strType; // Break point type.
- bool m_bDisp; // True = "del", false = "keep".
- bool m_bEnabled; // True = enabled, false = disabled break point.
- lldb::addr_t m_pc; // Address number.
- CMIUtilString m_fnName; // Function name.
- CMIUtilString m_fileName; // File name text.
- CMIUtilString m_path; // Full file name and path text.
- MIuint m_nLine; // File line number.
- bool m_bHaveArgOptionThreadGrp; // True = include MI field, false = do not include "thread-groups".
- CMIUtilString m_strOptThrdGrp; // Thread group number.
- MIuint m_nTimes; // The count of the breakpoint existence.
- CMIUtilString m_strOrigLoc; // The name of the break point.
- bool m_bPending; // True = the breakpoint has not been established yet, false = location found
- MIuint m_nIgnore; // The number of time the breakpoint is run over before it is stopped on a hit
- bool m_bCondition; // True = break point is conditional, use condition expression, false = no condition
- CMIUtilString m_strCondition; // Break point condition expression
- bool m_bBrkPtThreadId; // True = break point is specified to work with a specific thread, false = no specified thread given
- MIuint m_nBrkPtThreadId; // Restrict the breakpoint to the specified thread-id
- };
-
- // Enumerations:
- public:
- //++ ===================================================================
- // Details: The type of variable used by MIResponseFormVariableInfo family functions.
- //--
- enum VariableType_e
- {
- eVariableType_InScope = (1u << 0), // In scope only.
- eVariableType_Statics = (1u << 1), // Statics.
- eVariableType_Locals = (1u << 2), // Locals.
- eVariableType_Arguments = (1u << 3) // Arguments.
- };
-
- //++ ===================================================================
- // Details: Determine the information that should be shown by using MIResponseFormVariableInfo family functions.
- //--
- enum VariableInfoFormat_e
- {
- eVariableInfoFormat_NoValues = 0,
- eVariableInfoFormat_AllValues = 1,
- eVariableInfoFormat_SimpleValues = 2
- };
-
- //++ ===================================================================
- // Details: Determine the information that should be shown by using MIResponseFormThreadInfo family functions.
- //--
- enum ThreadInfoFormat_e
- {
- eThreadInfoFormat_NoFrames,
- eThreadInfoFormat_AllFrames
- };
-
- //++ ===================================================================
- // Details: Determine the information that should be shown by using MIResponseFormFrameInfo family functions.
- //--
- enum FrameInfoFormat_e
- {
- eFrameInfoFormat_NoArguments,
- eFrameInfoFormat_AllArguments,
- eFrameInfoFormat_AllArgumentsInSimpleForm
- };
-
- // Typedefs:
- public:
- typedef std::vector<uint32_t> VecActiveThreadId_t;
-
- // Methods:
- public:
- bool Initialize() override;
- bool Shutdown() override;
-
- // Variant type data which can be assigned and retrieved across all command instances
- template <typename T> bool SharedDataAdd(const CMIUtilString &vKey, const T &vData);
- template <typename T> bool SharedDataRetrieve(const CMIUtilString &vKey, T &vwData);
- void SharedDataDestroy();
-
- // Common command required functionality
- bool AccessPath(const CMIUtilString &vPath, bool &vwbYesAccessible);
- bool ResolvePath(const SMICmdData &vCmdData, const CMIUtilString &vPath, CMIUtilString &vwrResolvedPath);
- bool ResolvePath(const CMIUtilString &vstrUnknown, CMIUtilString &vwrResolvedPath);
- bool MIResponseFormFrameInfo(const lldb::SBThread &vrThread, const MIuint vnLevel,
- const FrameInfoFormat_e veFrameInfoFormat, CMICmnMIValueTuple &vwrMiValueTuple);
- bool MIResponseFormThreadInfo(const SMICmdData &vCmdData, const lldb::SBThread &vrThread,
- const ThreadInfoFormat_e veThreadInfoFormat, CMICmnMIValueTuple &vwrMIValueTuple);
- bool MIResponseFormVariableInfo(const lldb::SBFrame &vrFrame, const MIuint vMaskVarTypes,
- const VariableInfoFormat_e veVarInfoFormat, CMICmnMIValueList &vwrMiValueList,
- const MIuint vnMaxDepth = 10, const bool vbMarkArgs = false);
- void MIResponseFormBrkPtFrameInfo(const SBrkPtInfo &vrBrkPtInfo, CMICmnMIValueTuple &vwrMiValueTuple);
- bool MIResponseFormBrkPtInfo(const SBrkPtInfo &vrBrkPtInfo, CMICmnMIValueTuple &vwrMiValueTuple);
- bool GetBrkPtInfo(const lldb::SBBreakpoint &vBrkPt, SBrkPtInfo &vrwBrkPtInfo) const;
- bool RecordBrkPtInfo(const MIuint vnBrkPtId, const SBrkPtInfo &vrBrkPtInfo);
- bool RecordBrkPtInfoGet(const MIuint vnBrkPtId, SBrkPtInfo &vrwBrkPtInfo) const;
- bool RecordBrkPtInfoDelete(const MIuint vnBrkPtId);
- CMIUtilThreadMutex& GetSessionMutex() { return m_sessionMutex;}
- lldb::SBDebugger &GetDebugger() const;
- lldb::SBListener &GetListener() const;
- lldb::SBTarget GetTarget() const;
- lldb::SBProcess GetProcess() const;
-
- // Attributes:
- public:
- // The following are available to all command instances
- const MIuint m_nBrkPointCntMax;
- VecActiveThreadId_t m_vecActiveThreadId;
- lldb::tid_t m_currentSelectedThread;
-
- // These are keys that can be used to access the shared data map
- // Note: This list is expected to grow and will be moved and abstracted in the future.
- const CMIUtilString m_constStrSharedDataKeyWkDir;
- const CMIUtilString m_constStrSharedDataSolibPath;
- const CMIUtilString m_constStrPrintCharArrayAsString;
- const CMIUtilString m_constStrPrintExpandAggregates;
- const CMIUtilString m_constStrPrintAggregateFieldNames;
-
- // Typedefs:
- private:
- typedef std::vector<CMICmnLLDBDebugSessionInfoVarObj> VecVarObj_t;
- typedef std::map<MIuint, SBrkPtInfo> MapBrkPtIdToBrkPtInfo_t;
- typedef std::pair<MIuint, SBrkPtInfo> MapPairBrkPtIdToBrkPtInfo_t;
-
- // Methods:
- private:
- /* ctor */ CMICmnLLDBDebugSessionInfo();
- /* ctor */ CMICmnLLDBDebugSessionInfo(const CMICmnLLDBDebugSessionInfo &);
- void operator=(const CMICmnLLDBDebugSessionInfo &);
- //
- bool GetVariableInfo(const lldb::SBValue &vrValue, const bool vbInSimpleForm, CMIUtilString &vwrStrValue);
- bool GetFrameInfo(const lldb::SBFrame &vrFrame, lldb::addr_t &vwPc, CMIUtilString &vwFnName, CMIUtilString &vwFileName,
- CMIUtilString &vwPath, MIuint &vwnLine);
- bool GetThreadFrames(const SMICmdData &vCmdData, const MIuint vThreadIdx, const FrameInfoFormat_e veFrameInfoFormat,
- CMIUtilString &vwrThreadFrames);
- bool MIResponseForVariableInfoInternal(const VariableInfoFormat_e veVarInfoFormat, CMICmnMIValueList &vwrMiValueList,
- const lldb::SBValueList &vwrSBValueList, const MIuint vnMaxDepth, const bool vbIsArgs, const bool vbMarkArgs);
-
- // Overridden:
- private:
- // From CMICmnBase
- /* dtor */ ~CMICmnLLDBDebugSessionInfo() override;
-
- // Attributes:
- private:
- CMIUtilMapIdToVariant m_mapIdToSessionData; // Hold and retrieve key to value data available across all commands
- VecVarObj_t m_vecVarObj; // Vector of session variable objects
- MapBrkPtIdToBrkPtInfo_t m_mapBrkPtIdToBrkPtInfo;
- CMIUtilThreadMutex m_sessionMutex;
+class CMICmnLLDBDebugSessionInfo
+ : public CMICmnBase,
+ public MI::ISingleton<CMICmnLLDBDebugSessionInfo> {
+ friend class MI::ISingleton<CMICmnLLDBDebugSessionInfo>;
+
+ // Structs:
+public:
+ //++
+ //============================================================================
+ // Details: Break point information object. Used to easily pass information
+ // about
+ // a break around and record break point information to be recalled
+ // by
+ // other commands or LLDB event handling functions.
+ //--
+ struct SBrkPtInfo {
+ SBrkPtInfo()
+ : m_id(0), m_bDisp(false), m_bEnabled(false), m_pc(0), m_nLine(0),
+ m_bHaveArgOptionThreadGrp(false), m_nTimes(0), m_bPending(false),
+ m_nIgnore(0), m_bCondition(false), m_bBrkPtThreadId(false),
+ m_nBrkPtThreadId(0) {}
+
+ MIuint m_id; // LLDB break point ID.
+ CMIUtilString m_strType; // Break point type.
+ bool m_bDisp; // True = "del", false = "keep".
+ bool m_bEnabled; // True = enabled, false = disabled break point.
+ lldb::addr_t m_pc; // Address number.
+ CMIUtilString m_fnName; // Function name.
+ CMIUtilString m_fileName; // File name text.
+ CMIUtilString m_path; // Full file name and path text.
+ MIuint m_nLine; // File line number.
+ bool m_bHaveArgOptionThreadGrp; // True = include MI field, false = do not
+ // include "thread-groups".
+ CMIUtilString m_strOptThrdGrp; // Thread group number.
+ MIuint m_nTimes; // The count of the breakpoint existence.
+ CMIUtilString m_strOrigLoc; // The name of the break point.
+ bool m_bPending; // True = the breakpoint has not been established yet,
+ // false = location found
+ MIuint m_nIgnore; // The number of time the breakpoint is run over before it
+ // is stopped on a hit
+ bool m_bCondition; // True = break point is conditional, use condition
+ // expression, false = no condition
+ CMIUtilString m_strCondition; // Break point condition expression
+ bool m_bBrkPtThreadId; // True = break point is specified to work with a
+ // specific thread, false = no specified thread given
+ MIuint
+ m_nBrkPtThreadId; // Restrict the breakpoint to the specified thread-id
+ };
+
+ // Enumerations:
+public:
+ //++ ===================================================================
+ // Details: The type of variable used by MIResponseFormVariableInfo family
+ // functions.
+ //--
+ enum VariableType_e {
+ eVariableType_InScope = (1u << 0), // In scope only.
+ eVariableType_Statics = (1u << 1), // Statics.
+ eVariableType_Locals = (1u << 2), // Locals.
+ eVariableType_Arguments = (1u << 3) // Arguments.
+ };
+
+ //++ ===================================================================
+ // Details: Determine the information that should be shown by using
+ // MIResponseFormVariableInfo family functions.
+ //--
+ enum VariableInfoFormat_e {
+ eVariableInfoFormat_NoValues = 0,
+ eVariableInfoFormat_AllValues = 1,
+ eVariableInfoFormat_SimpleValues = 2
+ };
+
+ //++ ===================================================================
+ // Details: Determine the information that should be shown by using
+ // MIResponseFormThreadInfo family functions.
+ //--
+ enum ThreadInfoFormat_e {
+ eThreadInfoFormat_NoFrames,
+ eThreadInfoFormat_AllFrames
+ };
+
+ //++ ===================================================================
+ // Details: Determine the information that should be shown by using
+ // MIResponseFormFrameInfo family functions.
+ //--
+ enum FrameInfoFormat_e {
+ eFrameInfoFormat_NoArguments,
+ eFrameInfoFormat_AllArguments,
+ eFrameInfoFormat_AllArgumentsInSimpleForm
+ };
+
+ // Typedefs:
+public:
+ typedef std::vector<uint32_t> VecActiveThreadId_t;
+
+ // Methods:
+public:
+ bool Initialize() override;
+ bool Shutdown() override;
+
+ // Variant type data which can be assigned and retrieved across all command
+ // instances
+ template <typename T>
+ bool SharedDataAdd(const CMIUtilString &vKey, const T &vData);
+ template <typename T>
+ bool SharedDataRetrieve(const CMIUtilString &vKey, T &vwData);
+ void SharedDataDestroy();
+
+ // Common command required functionality
+ bool AccessPath(const CMIUtilString &vPath, bool &vwbYesAccessible);
+ bool ResolvePath(const SMICmdData &vCmdData, const CMIUtilString &vPath,
+ CMIUtilString &vwrResolvedPath);
+ bool ResolvePath(const CMIUtilString &vstrUnknown,
+ CMIUtilString &vwrResolvedPath);
+ bool MIResponseFormFrameInfo(const lldb::SBThread &vrThread,
+ const MIuint vnLevel,
+ const FrameInfoFormat_e veFrameInfoFormat,
+ CMICmnMIValueTuple &vwrMiValueTuple);
+ bool MIResponseFormThreadInfo(const SMICmdData &vCmdData,
+ const lldb::SBThread &vrThread,
+ const ThreadInfoFormat_e veThreadInfoFormat,
+ CMICmnMIValueTuple &vwrMIValueTuple);
+ bool MIResponseFormVariableInfo(const lldb::SBFrame &vrFrame,
+ const MIuint vMaskVarTypes,
+ const VariableInfoFormat_e veVarInfoFormat,
+ CMICmnMIValueList &vwrMiValueList,
+ const MIuint vnMaxDepth = 10,
+ const bool vbMarkArgs = false);
+ void MIResponseFormBrkPtFrameInfo(const SBrkPtInfo &vrBrkPtInfo,
+ CMICmnMIValueTuple &vwrMiValueTuple);
+ bool MIResponseFormBrkPtInfo(const SBrkPtInfo &vrBrkPtInfo,
+ CMICmnMIValueTuple &vwrMiValueTuple);
+ bool GetBrkPtInfo(const lldb::SBBreakpoint &vBrkPt,
+ SBrkPtInfo &vrwBrkPtInfo) const;
+ bool RecordBrkPtInfo(const MIuint vnBrkPtId, const SBrkPtInfo &vrBrkPtInfo);
+ bool RecordBrkPtInfoGet(const MIuint vnBrkPtId,
+ SBrkPtInfo &vrwBrkPtInfo) const;
+ bool RecordBrkPtInfoDelete(const MIuint vnBrkPtId);
+ CMIUtilThreadMutex &GetSessionMutex() { return m_sessionMutex; }
+ lldb::SBDebugger &GetDebugger() const;
+ lldb::SBListener &GetListener() const;
+ lldb::SBTarget GetTarget() const;
+ lldb::SBProcess GetProcess() const;
+
+ // Attributes:
+public:
+ // The following are available to all command instances
+ const MIuint m_nBrkPointCntMax;
+ VecActiveThreadId_t m_vecActiveThreadId;
+ lldb::tid_t m_currentSelectedThread;
+
+ // These are keys that can be used to access the shared data map
+ // Note: This list is expected to grow and will be moved and abstracted in the
+ // future.
+ const CMIUtilString m_constStrSharedDataKeyWkDir;
+ const CMIUtilString m_constStrSharedDataSolibPath;
+ const CMIUtilString m_constStrPrintCharArrayAsString;
+ const CMIUtilString m_constStrPrintExpandAggregates;
+ const CMIUtilString m_constStrPrintAggregateFieldNames;
+
+ // Typedefs:
+private:
+ typedef std::vector<CMICmnLLDBDebugSessionInfoVarObj> VecVarObj_t;
+ typedef std::map<MIuint, SBrkPtInfo> MapBrkPtIdToBrkPtInfo_t;
+ typedef std::pair<MIuint, SBrkPtInfo> MapPairBrkPtIdToBrkPtInfo_t;
+
+ // Methods:
+private:
+ /* ctor */ CMICmnLLDBDebugSessionInfo();
+ /* ctor */ CMICmnLLDBDebugSessionInfo(const CMICmnLLDBDebugSessionInfo &);
+ void operator=(const CMICmnLLDBDebugSessionInfo &);
+ //
+ bool GetVariableInfo(const lldb::SBValue &vrValue, const bool vbInSimpleForm,
+ CMIUtilString &vwrStrValue);
+ bool GetFrameInfo(const lldb::SBFrame &vrFrame, lldb::addr_t &vwPc,
+ CMIUtilString &vwFnName, CMIUtilString &vwFileName,
+ CMIUtilString &vwPath, MIuint &vwnLine);
+ bool GetThreadFrames(const SMICmdData &vCmdData, const MIuint vThreadIdx,
+ const FrameInfoFormat_e veFrameInfoFormat,
+ CMIUtilString &vwrThreadFrames);
+ bool
+ MIResponseForVariableInfoInternal(const VariableInfoFormat_e veVarInfoFormat,
+ CMICmnMIValueList &vwrMiValueList,
+ const lldb::SBValueList &vwrSBValueList,
+ const MIuint vnMaxDepth,
+ const bool vbIsArgs, const bool vbMarkArgs);
+
+ // Overridden:
+private:
+ // From CMICmnBase
+ /* dtor */ ~CMICmnLLDBDebugSessionInfo() override;
+
+ // Attributes:
+private:
+ CMIUtilMapIdToVariant m_mapIdToSessionData; // Hold and retrieve key to value
+ // data available across all
+ // commands
+ VecVarObj_t m_vecVarObj; // Vector of session variable objects
+ MapBrkPtIdToBrkPtInfo_t m_mapBrkPtIdToBrkPtInfo;
+ CMIUtilThreadMutex m_sessionMutex;
};
-//++ ------------------------------------------------------------------------------------
-// Details: Command instances can create and share data between other instances of commands.
-// This function adds new data to the shared data. Using the same ID more than
+//++
+//------------------------------------------------------------------------------------
+// Details: Command instances can create and share data between other instances
+// of commands.
+// This function adds new data to the shared data. Using the same ID
+// more than
// once replaces any previous matching data keys.
// Type: Template method.
// Args: T - The type of the object to be stored.
@@ -229,39 +258,38 @@ class CMICmnLLDBDebugSessionInfo : publi
// Throws: None.
//--
template <typename T>
-bool
-CMICmnLLDBDebugSessionInfo::SharedDataAdd(const CMIUtilString &vKey, const T &vData)
-{
- if (!m_mapIdToSessionData.Add<T>(vKey, vData))
- {
- SetErrorDescription(m_mapIdToSessionData.GetErrorDescription());
- return MIstatus::failure;
- }
+bool CMICmnLLDBDebugSessionInfo::SharedDataAdd(const CMIUtilString &vKey,
+ const T &vData) {
+ if (!m_mapIdToSessionData.Add<T>(vKey, vData)) {
+ SetErrorDescription(m_mapIdToSessionData.GetErrorDescription());
+ return MIstatus::failure;
+ }
- return MIstatus::success;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
-// Details: Command instances can create and share data between other instances of commands.
+//++
+//------------------------------------------------------------------------------------
+// Details: Command instances can create and share data between other instances
+// of commands.
// This function retrieves data from the shared data container.
// Type: Method.
// Args: T - The type of the object being retrieved.
// vKey - (R) A non empty unique data key to retrieve the data by.
// vData - (W) The data.
-// Return: bool - True = data found, false = data not found or an error occurred trying to fetch.
+// Return: bool - True = data found, false = data not found or an error
+// occurred trying to fetch.
// Throws: None.
//--
template <typename T>
-bool
-CMICmnLLDBDebugSessionInfo::SharedDataRetrieve(const CMIUtilString &vKey, T &vwData)
-{
- bool bDataFound = false;
-
- if (!m_mapIdToSessionData.Get<T>(vKey, vwData, bDataFound))
- {
- SetErrorDescription(m_mapIdToSessionData.GetErrorDescription());
- return MIstatus::failure;
- }
+bool CMICmnLLDBDebugSessionInfo::SharedDataRetrieve(const CMIUtilString &vKey,
+ T &vwData) {
+ bool bDataFound = false;
+
+ if (!m_mapIdToSessionData.Get<T>(vKey, vwData, bDataFound)) {
+ SetErrorDescription(m_mapIdToSessionData.GetErrorDescription());
+ return MIstatus::failure;
+ }
- return bDataFound;
+ return bDataFound;
}
Modified: lldb/trunk/tools/lldb-mi/MICmnLLDBDebugSessionInfoVarObj.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnLLDBDebugSessionInfoVarObj.cpp?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnLLDBDebugSessionInfoVarObj.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmnLLDBDebugSessionInfoVarObj.cpp Tue Sep 6 15:57:50 2016
@@ -16,16 +16,20 @@
const char *CMICmnLLDBDebugSessionInfoVarObj::ms_aVarFormatStrings[] = {
// CODETAG_SESSIONINFO_VARFORMAT_ENUM
// *** Order is import here.
- "<Invalid var format>", "binary", "octal", "decimal", "hexadecimal", "natural"};
+ "<Invalid var format>", "binary", "octal", "decimal",
+ "hexadecimal", "natural"};
const char *CMICmnLLDBDebugSessionInfoVarObj::ms_aVarFormatChars[] = {
// CODETAG_SESSIONINFO_VARFORMAT_ENUM
// *** Order is import here.
"<Invalid var format>", "t", "o", "d", "x", "N"};
-CMICmnLLDBDebugSessionInfoVarObj::MapKeyToVarObj_t CMICmnLLDBDebugSessionInfoVarObj::ms_mapVarIdToVarObj;
+CMICmnLLDBDebugSessionInfoVarObj::MapKeyToVarObj_t
+ CMICmnLLDBDebugSessionInfoVarObj::ms_mapVarIdToVarObj;
MIuint CMICmnLLDBDebugSessionInfoVarObj::ms_nVarUniqueId = 0; // Index from 0
-CMICmnLLDBDebugSessionInfoVarObj::varFormat_e CMICmnLLDBDebugSessionInfoVarObj::ms_eDefaultFormat = eVarFormat_Natural;
+CMICmnLLDBDebugSessionInfoVarObj::varFormat_e
+ CMICmnLLDBDebugSessionInfoVarObj::ms_eDefaultFormat = eVarFormat_Natural;
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmnLLDBDebugSessionInfoVarObj constructor.
// Type: Method.
// Args: None.
@@ -33,119 +37,124 @@ CMICmnLLDBDebugSessionInfoVarObj::varFor
// Throws: None.
//--
CMICmnLLDBDebugSessionInfoVarObj::CMICmnLLDBDebugSessionInfoVarObj()
- : m_eVarFormat(eVarFormat_Natural)
- , m_eVarType(eVarType_Internal)
-{
- // Do not call UpdateValue() in here as not necessary
+ : m_eVarFormat(eVarFormat_Natural), m_eVarType(eVarType_Internal) {
+ // Do not call UpdateValue() in here as not necessary
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmnLLDBDebugSessionInfoVarObj constructor.
// Type: Method.
-// Args: vrStrNameReal - (R) The actual name of the variable, the expression.
+// Args: vrStrNameReal - (R) The actual name of the variable, the
+// expression.
// vrStrName - (R) The name given for *this var object.
-// vrValue - (R) The LLDB SBValue object represented by *this object.
+// vrValue - (R) The LLDB SBValue object represented by *this
+// object.
// Return: None.
// Throws: None.
//--
-CMICmnLLDBDebugSessionInfoVarObj::CMICmnLLDBDebugSessionInfoVarObj(const CMIUtilString &vrStrNameReal, const CMIUtilString &vrStrName,
- const lldb::SBValue &vrValue)
- : m_eVarFormat(eVarFormat_Natural)
- , m_eVarType(eVarType_Internal)
- , m_strName(vrStrName)
- , m_SBValue(vrValue)
- , m_strNameReal(vrStrNameReal)
-{
- UpdateValue();
+CMICmnLLDBDebugSessionInfoVarObj::CMICmnLLDBDebugSessionInfoVarObj(
+ const CMIUtilString &vrStrNameReal, const CMIUtilString &vrStrName,
+ const lldb::SBValue &vrValue)
+ : m_eVarFormat(eVarFormat_Natural), m_eVarType(eVarType_Internal),
+ m_strName(vrStrName), m_SBValue(vrValue), m_strNameReal(vrStrNameReal) {
+ UpdateValue();
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmnLLDBDebugSessionInfoVarObj constructor.
// Type: Method.
-// Args: vrStrNameReal - (R) The actual name of the variable, the expression.
+// Args: vrStrNameReal - (R) The actual name of the variable, the
+// expression.
// vrStrName - (R) The name given for *this var object.
-// vrValue - (R) The LLDB SBValue object represented by *this object.
-// vrStrVarObjParentName - (R) The var object parent to *this var object (LLDB SBValue equivalent).
+// vrValue - (R) The LLDB SBValue object represented by
+// *this object.
+// vrStrVarObjParentName - (R) The var object parent to *this var
+// object (LLDB SBValue equivalent).
// Return: None.
// Throws: None.
//--
-CMICmnLLDBDebugSessionInfoVarObj::CMICmnLLDBDebugSessionInfoVarObj(const CMIUtilString &vrStrNameReal, const CMIUtilString &vrStrName,
- const lldb::SBValue &vrValue, const CMIUtilString &vrStrVarObjParentName)
- : m_eVarFormat(eVarFormat_Natural)
- , m_eVarType(eVarType_Internal)
- , m_strName(vrStrName)
- , m_SBValue(vrValue)
- , m_strNameReal(vrStrNameReal)
- , m_strVarObjParentName(vrStrVarObjParentName)
-{
- UpdateValue();
+CMICmnLLDBDebugSessionInfoVarObj::CMICmnLLDBDebugSessionInfoVarObj(
+ const CMIUtilString &vrStrNameReal, const CMIUtilString &vrStrName,
+ const lldb::SBValue &vrValue, const CMIUtilString &vrStrVarObjParentName)
+ : m_eVarFormat(eVarFormat_Natural), m_eVarType(eVarType_Internal),
+ m_strName(vrStrName), m_SBValue(vrValue), m_strNameReal(vrStrNameReal),
+ m_strVarObjParentName(vrStrVarObjParentName) {
+ UpdateValue();
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmnLLDBDebugSessionInfoVarObj copy constructor.
// Type: Method.
// Args: vrOther - (R) The object to copy from.
// Return: None.
// Throws: None.
//--
-CMICmnLLDBDebugSessionInfoVarObj::CMICmnLLDBDebugSessionInfoVarObj(const CMICmnLLDBDebugSessionInfoVarObj &vrOther)
-{
- CopyOther(vrOther);
+CMICmnLLDBDebugSessionInfoVarObj::CMICmnLLDBDebugSessionInfoVarObj(
+ const CMICmnLLDBDebugSessionInfoVarObj &vrOther) {
+ CopyOther(vrOther);
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmnLLDBDebugSessionInfoVarObj copy constructor.
// Type: Method.
// Args: vrOther - (R) The object to copy from.
// Return: None.
// Throws: None.
//--
-CMICmnLLDBDebugSessionInfoVarObj::CMICmnLLDBDebugSessionInfoVarObj(CMICmnLLDBDebugSessionInfoVarObj &vrOther)
-{
- CopyOther(vrOther);
+CMICmnLLDBDebugSessionInfoVarObj::CMICmnLLDBDebugSessionInfoVarObj(
+ CMICmnLLDBDebugSessionInfoVarObj &vrOther) {
+ CopyOther(vrOther);
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmnLLDBDebugSessionInfoVarObj move constructor.
// Type: Method.
// Args: vrwOther - (R) The object to copy from.
// Return: None.
// Throws: None.
//--
-CMICmnLLDBDebugSessionInfoVarObj::CMICmnLLDBDebugSessionInfoVarObj(CMICmnLLDBDebugSessionInfoVarObj &&vrwOther)
-{
- MoveOther(vrwOther);
+CMICmnLLDBDebugSessionInfoVarObj::CMICmnLLDBDebugSessionInfoVarObj(
+ CMICmnLLDBDebugSessionInfoVarObj &&vrwOther) {
+ MoveOther(vrwOther);
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmnLLDBDebugSessionInfoVarObj assignment operator.
// Type: Method.
// Args: vrOther - (R) The object to copy from.
// Return: CMICmnLLDBDebugSessionInfoVarObj & - Updated *this object.
// Throws: None.
//--
-CMICmnLLDBDebugSessionInfoVarObj &CMICmnLLDBDebugSessionInfoVarObj::operator=(const CMICmnLLDBDebugSessionInfoVarObj &vrOther)
-{
- CopyOther(vrOther);
+CMICmnLLDBDebugSessionInfoVarObj &CMICmnLLDBDebugSessionInfoVarObj::
+operator=(const CMICmnLLDBDebugSessionInfoVarObj &vrOther) {
+ CopyOther(vrOther);
- return *this;
+ return *this;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmnLLDBDebugSessionInfoVarObj assignment operator.
// Type: Method.
// Args: vrwOther - (R) The object to copy from.
// Return: CMICmnLLDBDebugSessionInfoVarObj & - Updated *this object.
// Throws: None.
//--
-CMICmnLLDBDebugSessionInfoVarObj &CMICmnLLDBDebugSessionInfoVarObj::operator=(CMICmnLLDBDebugSessionInfoVarObj &&vrwOther)
-{
- MoveOther(vrwOther);
+CMICmnLLDBDebugSessionInfoVarObj &CMICmnLLDBDebugSessionInfoVarObj::
+operator=(CMICmnLLDBDebugSessionInfoVarObj &&vrwOther) {
+ MoveOther(vrwOther);
- return *this;
+ return *this;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Copy the other instance of that object to *this object.
// Type: Method.
// Args: vrOther - (R) The object to copy from.
@@ -153,25 +162,25 @@ CMICmnLLDBDebugSessionInfoVarObj &CMICmn
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebugSessionInfoVarObj::CopyOther(const CMICmnLLDBDebugSessionInfoVarObj &vrOther)
-{
- // Check for self-assignment
- if (this == &vrOther)
- return MIstatus::success;
-
- m_eVarFormat = vrOther.m_eVarFormat;
- m_eVarType = vrOther.m_eVarType;
- m_strName = vrOther.m_strName;
- m_SBValue = vrOther.m_SBValue;
- m_strNameReal = vrOther.m_strNameReal;
- m_strFormattedValue = vrOther.m_strFormattedValue;
- m_strVarObjParentName = vrOther.m_strVarObjParentName;
-
+bool CMICmnLLDBDebugSessionInfoVarObj::CopyOther(
+ const CMICmnLLDBDebugSessionInfoVarObj &vrOther) {
+ // Check for self-assignment
+ if (this == &vrOther)
return MIstatus::success;
+
+ m_eVarFormat = vrOther.m_eVarFormat;
+ m_eVarType = vrOther.m_eVarType;
+ m_strName = vrOther.m_strName;
+ m_SBValue = vrOther.m_SBValue;
+ m_strNameReal = vrOther.m_strNameReal;
+ m_strFormattedValue = vrOther.m_strFormattedValue;
+ m_strVarObjParentName = vrOther.m_strVarObjParentName;
+
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Move that object to *this object.
// Type: Method.
// Args: vrwOther - (RW) The object to copy from.
@@ -179,37 +188,36 @@ CMICmnLLDBDebugSessionInfoVarObj::CopyOt
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebugSessionInfoVarObj::MoveOther(CMICmnLLDBDebugSessionInfoVarObj &vrwOther)
-{
- // Check for self-assignment
- if (this == &vrwOther)
- return MIstatus::success;
-
- CopyOther(vrwOther);
- vrwOther.m_eVarFormat = eVarFormat_Natural;
- vrwOther.m_eVarType = eVarType_Internal;
- vrwOther.m_strName.clear();
- vrwOther.m_SBValue.Clear();
- vrwOther.m_strNameReal.clear();
- vrwOther.m_strFormattedValue.clear();
- vrwOther.m_strVarObjParentName.clear();
-
+bool CMICmnLLDBDebugSessionInfoVarObj::MoveOther(
+ CMICmnLLDBDebugSessionInfoVarObj &vrwOther) {
+ // Check for self-assignment
+ if (this == &vrwOther)
return MIstatus::success;
+
+ CopyOther(vrwOther);
+ vrwOther.m_eVarFormat = eVarFormat_Natural;
+ vrwOther.m_eVarType = eVarType_Internal;
+ vrwOther.m_strName.clear();
+ vrwOther.m_SBValue.Clear();
+ vrwOther.m_strNameReal.clear();
+ vrwOther.m_strFormattedValue.clear();
+ vrwOther.m_strVarObjParentName.clear();
+
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmnLLDBDebugSessionInfoVarObj destructor.
// Type: Overridden.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmnLLDBDebugSessionInfoVarObj::~CMICmnLLDBDebugSessionInfoVarObj()
-{
-}
+CMICmnLLDBDebugSessionInfoVarObj::~CMICmnLLDBDebugSessionInfoVarObj() {}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Retrieve the var format enumeration for the specified string.
// Type: Static method.
// Args: vrStrFormat - (R) Text description of the var format.
@@ -218,20 +226,20 @@ CMICmnLLDBDebugSessionInfoVarObj::~CMICm
// Throws: None.
//--
CMICmnLLDBDebugSessionInfoVarObj::varFormat_e
-CMICmnLLDBDebugSessionInfoVarObj::GetVarFormatForString(const CMIUtilString &vrStrFormat)
-{
- // CODETAG_SESSIONINFO_VARFORMAT_ENUM
- for (MIuint i = 0; i < eVarFormat_count; i++)
- {
- const char *pVarFormatString = ms_aVarFormatStrings[i];
- if (vrStrFormat == pVarFormatString)
- return static_cast<varFormat_e>(i);
- }
+CMICmnLLDBDebugSessionInfoVarObj::GetVarFormatForString(
+ const CMIUtilString &vrStrFormat) {
+ // CODETAG_SESSIONINFO_VARFORMAT_ENUM
+ for (MIuint i = 0; i < eVarFormat_count; i++) {
+ const char *pVarFormatString = ms_aVarFormatStrings[i];
+ if (vrStrFormat == pVarFormatString)
+ return static_cast<varFormat_e>(i);
+ }
- return eVarFormat_Invalid;
+ return eVarFormat_Invalid;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Retrieve the var format enumeration for the specified character.
// Type: Static method.
// Args: vcFormat - Character representing the var format.
@@ -240,29 +248,33 @@ CMICmnLLDBDebugSessionInfoVarObj::GetVar
// Throws: None.
//--
CMICmnLLDBDebugSessionInfoVarObj::varFormat_e
-CMICmnLLDBDebugSessionInfoVarObj::GetVarFormatForChar(char vcFormat)
-{
- if ('r' == vcFormat)
- return eVarFormat_Hex;
-
- // CODETAG_SESSIONINFO_VARFORMAT_ENUM
- for (MIuint i = 0; i < eVarFormat_count; i++)
- {
- const char *pVarFormatChar = ms_aVarFormatChars[i];
- if (*pVarFormatChar == vcFormat)
- return static_cast<varFormat_e>(i);
- }
-
- return eVarFormat_Invalid;
-}
-
-//++ ------------------------------------------------------------------------------------
-// Details: Return the equivalent var value formatted string for the given value type,
-// which was prepared for printing (i.e. value was escaped and now it's ready
+CMICmnLLDBDebugSessionInfoVarObj::GetVarFormatForChar(char vcFormat) {
+ if ('r' == vcFormat)
+ return eVarFormat_Hex;
+
+ // CODETAG_SESSIONINFO_VARFORMAT_ENUM
+ for (MIuint i = 0; i < eVarFormat_count; i++) {
+ const char *pVarFormatChar = ms_aVarFormatChars[i];
+ if (*pVarFormatChar == vcFormat)
+ return static_cast<varFormat_e>(i);
+ }
+
+ return eVarFormat_Invalid;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: Return the equivalent var value formatted string for the given value
+// type,
+// which was prepared for printing (i.e. value was escaped and now it's
+// ready
// for wrapping into quotes).
-// The SBValue vrValue parameter is checked by LLDB private code for valid
-// scalar type via MI Driver proxy function as the valued returned can also be
-// an error condition. The proxy function determines if the check was valid
+// The SBValue vrValue parameter is checked by LLDB private code for
+// valid
+// scalar type via MI Driver proxy function as the valued returned can
+// also be
+// an error condition. The proxy function determines if the check was
+// valid
// otherwise return an error condition state by other means saying so.
// Type: Static method.
// Args: vrValue - (R) The var value object.
@@ -270,127 +282,124 @@ CMICmnLLDBDebugSessionInfoVarObj::GetVar
// Returns: CMIUtilString - Value formatted string.
// Throws: None.
//--
-CMIUtilString
-CMICmnLLDBDebugSessionInfoVarObj::GetValueStringFormatted(const lldb::SBValue &vrValue,
- const CMICmnLLDBDebugSessionInfoVarObj::varFormat_e veVarFormat)
-{
- const CMICmnLLDBUtilSBValue utilValue(vrValue, true);
- if (utilValue.IsIntegerType())
- {
- MIuint64 nValue = 0;
- if (CMICmnLLDBProxySBValue::GetValueAsUnsigned(vrValue, nValue))
- {
- lldb::SBValue &rValue = const_cast<lldb::SBValue &>(vrValue);
- return GetStringFormatted(nValue, rValue.GetValue(), veVarFormat);
- }
+CMIUtilString CMICmnLLDBDebugSessionInfoVarObj::GetValueStringFormatted(
+ const lldb::SBValue &vrValue,
+ const CMICmnLLDBDebugSessionInfoVarObj::varFormat_e veVarFormat) {
+ const CMICmnLLDBUtilSBValue utilValue(vrValue, true);
+ if (utilValue.IsIntegerType()) {
+ MIuint64 nValue = 0;
+ if (CMICmnLLDBProxySBValue::GetValueAsUnsigned(vrValue, nValue)) {
+ lldb::SBValue &rValue = const_cast<lldb::SBValue &>(vrValue);
+ return GetStringFormatted(nValue, rValue.GetValue(), veVarFormat);
}
+ }
- return utilValue.GetValue().AddSlashes();
+ return utilValue.GetValue().AddSlashes();
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Return number formatted string according to the given value type.
// Type: Static method.
// Args: vnValue - (R) The number value to get formatted.
-// vpStrValueNatural - (R) The natural representation of the number value.
+// vpStrValueNatural - (R) The natural representation of the number
+// value.
// veVarFormat - (R) Var format enumeration.
// Returns: CMIUtilString - Numerical formatted string.
// Throws: None.
//--
-CMIUtilString
-CMICmnLLDBDebugSessionInfoVarObj::GetStringFormatted(const MIuint64 vnValue, const char *vpStrValueNatural,
- const CMICmnLLDBDebugSessionInfoVarObj::varFormat_e veVarFormat)
-{
- CMIUtilString strFormattedValue;
- CMICmnLLDBDebugSessionInfoVarObj::varFormat_e veFormat = veVarFormat;
- if (ms_eDefaultFormat != eVarFormat_Invalid && veVarFormat == eVarFormat_Natural)
- {
- veFormat = ms_eDefaultFormat;
- }
-
- switch (veFormat)
- {
- case eVarFormat_Binary:
- strFormattedValue = CMIUtilString::FormatBinary(vnValue);
- break;
- case eVarFormat_Octal:
- strFormattedValue = CMIUtilString::Format("0%llo", vnValue);
- break;
- case eVarFormat_Decimal:
- strFormattedValue = CMIUtilString::Format("%lld", vnValue);
- break;
- case eVarFormat_Hex:
- strFormattedValue = CMIUtilString::Format("0x%llx", vnValue);
- break;
- case eVarFormat_Natural:
- default:
- {
- strFormattedValue = (vpStrValueNatural != nullptr) ? vpStrValueNatural : "";
- }
- }
+CMIUtilString CMICmnLLDBDebugSessionInfoVarObj::GetStringFormatted(
+ const MIuint64 vnValue, const char *vpStrValueNatural,
+ const CMICmnLLDBDebugSessionInfoVarObj::varFormat_e veVarFormat) {
+ CMIUtilString strFormattedValue;
+ CMICmnLLDBDebugSessionInfoVarObj::varFormat_e veFormat = veVarFormat;
+ if (ms_eDefaultFormat != eVarFormat_Invalid &&
+ veVarFormat == eVarFormat_Natural) {
+ veFormat = ms_eDefaultFormat;
+ }
+
+ switch (veFormat) {
+ case eVarFormat_Binary:
+ strFormattedValue = CMIUtilString::FormatBinary(vnValue);
+ break;
+ case eVarFormat_Octal:
+ strFormattedValue = CMIUtilString::Format("0%llo", vnValue);
+ break;
+ case eVarFormat_Decimal:
+ strFormattedValue = CMIUtilString::Format("%lld", vnValue);
+ break;
+ case eVarFormat_Hex:
+ strFormattedValue = CMIUtilString::Format("0x%llx", vnValue);
+ break;
+ case eVarFormat_Natural:
+ default: {
+ strFormattedValue = (vpStrValueNatural != nullptr) ? vpStrValueNatural : "";
+ }
+ }
- return strFormattedValue;
+ return strFormattedValue;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Delete internal container contents.
// Type: Static method.
// Args: None.
// Returns: None.
// Throws: None.
//--
-void
-CMICmnLLDBDebugSessionInfoVarObj::VarObjClear()
-{
- ms_mapVarIdToVarObj.clear();
+void CMICmnLLDBDebugSessionInfoVarObj::VarObjClear() {
+ ms_mapVarIdToVarObj.clear();
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Add a var object to the internal container.
// Type: Static method.
// Args: vrVarObj - (R) The var value object.
// Returns: None.
// Throws: None.
//--
-void
-CMICmnLLDBDebugSessionInfoVarObj::VarObjAdd(const CMICmnLLDBDebugSessionInfoVarObj &vrVarObj)
-{
- VarObjDelete(vrVarObj.GetName());
- MapPairKeyToVarObj_t pr(vrVarObj.GetName(), vrVarObj);
- ms_mapVarIdToVarObj.insert(pr);
+void CMICmnLLDBDebugSessionInfoVarObj::VarObjAdd(
+ const CMICmnLLDBDebugSessionInfoVarObj &vrVarObj) {
+ VarObjDelete(vrVarObj.GetName());
+ MapPairKeyToVarObj_t pr(vrVarObj.GetName(), vrVarObj);
+ ms_mapVarIdToVarObj.insert(pr);
}
-//++ ------------------------------------------------------------------------------------
-// Details: Delete the var object from the internal container matching the specified name.
+//++
+//------------------------------------------------------------------------------------
+// Details: Delete the var object from the internal container matching the
+// specified name.
// Type: Static method.
// Args: vrVarName - (R) The var value name.
// Returns: None.
// Throws: None.
//--
-void
-CMICmnLLDBDebugSessionInfoVarObj::VarObjDelete(const CMIUtilString &vrVarName)
-{
- const MapKeyToVarObj_t::const_iterator it = ms_mapVarIdToVarObj.find(vrVarName);
- if (it != ms_mapVarIdToVarObj.end())
- {
- ms_mapVarIdToVarObj.erase(it);
- }
+void CMICmnLLDBDebugSessionInfoVarObj::VarObjDelete(
+ const CMIUtilString &vrVarName) {
+ const MapKeyToVarObj_t::const_iterator it =
+ ms_mapVarIdToVarObj.find(vrVarName);
+ if (it != ms_mapVarIdToVarObj.end()) {
+ ms_mapVarIdToVarObj.erase(it);
+ }
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Update an existing var object in the internal container.
// Type: Static method.
// Args: vrVarObj - (R) The var value object.
// Returns: None.
// Throws: None.
//--
-void
-CMICmnLLDBDebugSessionInfoVarObj::VarObjUpdate(const CMICmnLLDBDebugSessionInfoVarObj &vrVarObj)
-{
- VarObjAdd(vrVarObj);
+void CMICmnLLDBDebugSessionInfoVarObj::VarObjUpdate(
+ const CMICmnLLDBDebugSessionInfoVarObj &vrVarObj) {
+ VarObjAdd(vrVarObj);
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Retrieve the var object matching the specified name.
// Type: Static method.
// Args: vrVarName - (R) The var value name.
@@ -398,104 +407,102 @@ CMICmnLLDBDebugSessionInfoVarObj::VarObj
// Returns: bool - True = object found, false = object not found.
// Throws: None.
//--
-bool
-CMICmnLLDBDebugSessionInfoVarObj::VarObjGet(const CMIUtilString &vrVarName, CMICmnLLDBDebugSessionInfoVarObj &vrwVarObj)
-{
- const MapKeyToVarObj_t::const_iterator it = ms_mapVarIdToVarObj.find(vrVarName);
- if (it != ms_mapVarIdToVarObj.end())
- {
- const CMICmnLLDBDebugSessionInfoVarObj &rVarObj = (*it).second;
- vrwVarObj = rVarObj;
- return true;
- }
-
- return false;
-}
-
-//++ ------------------------------------------------------------------------------------
-// Details: A count is kept of the number of var value objects created. This is count is
+bool CMICmnLLDBDebugSessionInfoVarObj::VarObjGet(
+ const CMIUtilString &vrVarName,
+ CMICmnLLDBDebugSessionInfoVarObj &vrwVarObj) {
+ const MapKeyToVarObj_t::const_iterator it =
+ ms_mapVarIdToVarObj.find(vrVarName);
+ if (it != ms_mapVarIdToVarObj.end()) {
+ const CMICmnLLDBDebugSessionInfoVarObj &rVarObj = (*it).second;
+ vrwVarObj = rVarObj;
+ return true;
+ }
+
+ return false;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: A count is kept of the number of var value objects created. This is
+// count is
// used to ID the var value object. Reset the count to 0.
// Type: Static method.
// Args: None.
// Returns: None.
// Throws: None.
//--
-void
-CMICmnLLDBDebugSessionInfoVarObj::VarObjIdResetToZero()
-{
- ms_nVarUniqueId = 0;
+void CMICmnLLDBDebugSessionInfoVarObj::VarObjIdResetToZero() {
+ ms_nVarUniqueId = 0;
}
-//++ ------------------------------------------------------------------------------------
-// Details: Default format is globally used as the data format when "natural" is in effect, that is, this overrides the default
+//++
+//------------------------------------------------------------------------------------
+// Details: Default format is globally used as the data format when "natural" is
+// in effect, that is, this overrides the default
// Type: Static method.
// Args: None.
// Returns: None.
// Throws: None.
//--
-void
-CMICmnLLDBDebugSessionInfoVarObj::VarObjSetFormat(varFormat_e eDefaultFormat)
-{
- ms_eDefaultFormat = eDefaultFormat;
+void CMICmnLLDBDebugSessionInfoVarObj::VarObjSetFormat(
+ varFormat_e eDefaultFormat) {
+ ms_eDefaultFormat = eDefaultFormat;
}
-
-//++ ------------------------------------------------------------------------------------
-// Details: A count is kept of the number of var value objects created. This is count is
+//++
+//------------------------------------------------------------------------------------
+// Details: A count is kept of the number of var value objects created. This is
+// count is
// used to ID the var value object. Increment the count by 1.
// Type: Static method.
// Args: None.
// Returns: None.
// Throws: None.
//--
-void
-CMICmnLLDBDebugSessionInfoVarObj::VarObjIdInc()
-{
- ms_nVarUniqueId++;
-}
+void CMICmnLLDBDebugSessionInfoVarObj::VarObjIdInc() { ms_nVarUniqueId++; }
-//++ ------------------------------------------------------------------------------------
-// Details: A count is kept of the number of var value objects created. This is count is
+//++
+//------------------------------------------------------------------------------------
+// Details: A count is kept of the number of var value objects created. This is
+// count is
// used to ID the var value object. Retrieve ID.
// Type: Static method.
// Args: None.
// Returns: None.
// Throws: None.
//--
-MIuint
-CMICmnLLDBDebugSessionInfoVarObj::VarObjIdGet()
-{
- return ms_nVarUniqueId;
+MIuint CMICmnLLDBDebugSessionInfoVarObj::VarObjIdGet() {
+ return ms_nVarUniqueId;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Retrieve the value formatted object's name.
// Type: Method.
// Args: None.
// Returns: CMIUtilString & - Value's var%u name text.
// Throws: None.
//--
-const CMIUtilString &
-CMICmnLLDBDebugSessionInfoVarObj::GetName() const
-{
- return m_strName;
+const CMIUtilString &CMICmnLLDBDebugSessionInfoVarObj::GetName() const {
+ return m_strName;
}
-//++ ------------------------------------------------------------------------------------
-// Details: Retrieve the value formatted object's variable name as given in the MI command
+//++
+//------------------------------------------------------------------------------------
+// Details: Retrieve the value formatted object's variable name as given in the
+// MI command
// to create the var object.
// Type: Method.
// Args: None.
// Returns: CMIUtilString & - Value's real name text.
// Throws: None.
//--
-const CMIUtilString &
-CMICmnLLDBDebugSessionInfoVarObj::GetNameReal() const
-{
- return m_strNameReal;
+const CMIUtilString &CMICmnLLDBDebugSessionInfoVarObj::GetNameReal() const {
+ return m_strNameReal;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Retrieve the value formatted string.
// Type: Method.
// Args: None.
@@ -503,38 +510,36 @@ CMICmnLLDBDebugSessionInfoVarObj::GetNam
// Throws: None.
//--
const CMIUtilString &
-CMICmnLLDBDebugSessionInfoVarObj::GetValueFormatted() const
-{
- return m_strFormattedValue;
+CMICmnLLDBDebugSessionInfoVarObj::GetValueFormatted() const {
+ return m_strFormattedValue;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Retrieve the LLDB Value object.
// Type: Method.
// Args: None.
// Returns: lldb::SBValue & - LLDB Value object.
// Throws: None.
//--
-lldb::SBValue &
-CMICmnLLDBDebugSessionInfoVarObj::GetValue()
-{
- return m_SBValue;
+lldb::SBValue &CMICmnLLDBDebugSessionInfoVarObj::GetValue() {
+ return m_SBValue;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Retrieve the LLDB Value object.
// Type: Method.
// Args: None.
// Returns: lldb::SBValue & - Constant LLDB Value object.
// Throws: None.
//--
-const lldb::SBValue &
-CMICmnLLDBDebugSessionInfoVarObj::GetValue() const
-{
- return m_SBValue;
+const lldb::SBValue &CMICmnLLDBDebugSessionInfoVarObj::GetValue() const {
+ return m_SBValue;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Set the var format type for *this object and update the formatting.
// Type: Method.
// Args: None.
@@ -542,37 +547,37 @@ CMICmnLLDBDebugSessionInfoVarObj::GetVal
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebugSessionInfoVarObj::SetVarFormat(const varFormat_e veVarFormat)
-{
- if (veVarFormat >= eVarFormat_count)
- return MIstatus::failure;
-
- m_eVarFormat = veVarFormat;
- UpdateValue();
- return MIstatus::success;
+bool CMICmnLLDBDebugSessionInfoVarObj::SetVarFormat(
+ const varFormat_e veVarFormat) {
+ if (veVarFormat >= eVarFormat_count)
+ return MIstatus::failure;
+
+ m_eVarFormat = veVarFormat;
+ UpdateValue();
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Update *this var obj. Update it's value and type.
// Type: Method.
// Args: None.
// Returns: None.
// Throws: None.
//--
-void
-CMICmnLLDBDebugSessionInfoVarObj::UpdateValue()
-{
- m_strFormattedValue = GetValueStringFormatted(m_SBValue, m_eVarFormat);
+void CMICmnLLDBDebugSessionInfoVarObj::UpdateValue() {
+ m_strFormattedValue = GetValueStringFormatted(m_SBValue, m_eVarFormat);
- MIuint64 nValue = 0;
- if (CMICmnLLDBProxySBValue::GetValueAsUnsigned(m_SBValue, nValue) == MIstatus::failure)
- m_eVarType = eVarType_Composite;
+ MIuint64 nValue = 0;
+ if (CMICmnLLDBProxySBValue::GetValueAsUnsigned(m_SBValue, nValue) ==
+ MIstatus::failure)
+ m_eVarType = eVarType_Composite;
- CMICmnLLDBDebugSessionInfoVarObj::VarObjUpdate(*this);
+ CMICmnLLDBDebugSessionInfoVarObj::VarObjUpdate(*this);
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Retrieve the enumeration type of the var object.
// Type: Method.
// Args: None.
@@ -580,14 +585,16 @@ CMICmnLLDBDebugSessionInfoVarObj::Update
// Throws: None.
//--
CMICmnLLDBDebugSessionInfoVarObj::varType_e
-CMICmnLLDBDebugSessionInfoVarObj::GetType() const
-{
- return m_eVarType;
+CMICmnLLDBDebugSessionInfoVarObj::GetType() const {
+ return m_eVarType;
}
-//++ ------------------------------------------------------------------------------------
-// Details: Retrieve the parent var object's name, the parent var object to *this var
-// object (if assigned). The parent is equivalent to LLDB SBValue variable's
+//++
+//------------------------------------------------------------------------------------
+// Details: Retrieve the parent var object's name, the parent var object to
+// *this var
+// object (if assigned). The parent is equivalent to LLDB SBValue
+// variable's
// parent.
// Type: Method.
// Args: None.
@@ -595,7 +602,6 @@ CMICmnLLDBDebugSessionInfoVarObj::GetTyp
// Throws: None.
//--
const CMIUtilString &
-CMICmnLLDBDebugSessionInfoVarObj::GetVarParentName() const
-{
- return m_strVarObjParentName;
+CMICmnLLDBDebugSessionInfoVarObj::GetVarParentName() const {
+ return m_strVarObjParentName;
}
Modified: lldb/trunk/tools/lldb-mi/MICmnLLDBDebugSessionInfoVarObj.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnLLDBDebugSessionInfoVarObj.h?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnLLDBDebugSessionInfoVarObj.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmnLLDBDebugSessionInfoVarObj.h Tue Sep 6 15:57:50 2016
@@ -10,120 +10,131 @@
#pragma once
// Third Party Headers:
-#include <map>
#include "lldb/API/SBValue.h"
+#include <map>
// In-house headers:
#include "MIUtilString.h"
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI debug session variable object. The static functionality in *this
// class manages a map container of *these variable objects.
//--
-class CMICmnLLDBDebugSessionInfoVarObj
-{
- // Enums:
- public:
- //++ ----------------------------------------------------------------------
- // Details: Enumeration of a variable type that is not a composite type
- //--
- enum varFormat_e
- {
- // CODETAG_SESSIONINFO_VARFORMAT_ENUM
- // *** Order is import here ***
- eVarFormat_Invalid = 0,
- eVarFormat_Binary,
- eVarFormat_Octal,
- eVarFormat_Decimal,
- eVarFormat_Hex,
- eVarFormat_Natural,
- eVarFormat_count // Always last one
- };
-
- //++ ----------------------------------------------------------------------
- // Details: Enumeration of a variable type by composite or internal type
- //--
- enum varType_e
- {
- eVarType_InValid = 0,
- eVarType_Composite, // i.e. struct
- eVarType_Internal, // i.e. int
- eVarType_count // Always last one
- };
-
- // Statics:
- public:
- static varFormat_e GetVarFormatForString(const CMIUtilString &vrStrFormat);
- static varFormat_e GetVarFormatForChar(char vcFormat);
- static CMIUtilString GetValueStringFormatted(const lldb::SBValue &vrValue, const varFormat_e veVarFormat);
- static void VarObjAdd(const CMICmnLLDBDebugSessionInfoVarObj &vrVarObj);
- static void VarObjDelete(const CMIUtilString &vrVarName);
- static bool VarObjGet(const CMIUtilString &vrVarName, CMICmnLLDBDebugSessionInfoVarObj &vrwVarObj);
- static void VarObjUpdate(const CMICmnLLDBDebugSessionInfoVarObj &vrVarObj);
- static void VarObjIdInc();
- static MIuint VarObjIdGet();
- static void VarObjIdResetToZero();
- static void VarObjClear();
- static void VarObjSetFormat(varFormat_e eDefaultFormat);
-
- // Methods:
- public:
- /* ctor */ CMICmnLLDBDebugSessionInfoVarObj();
- /* ctor */ CMICmnLLDBDebugSessionInfoVarObj(const CMIUtilString &vrStrNameReal, const CMIUtilString &vrStrName,
- const lldb::SBValue &vrValue);
- /* ctor */ CMICmnLLDBDebugSessionInfoVarObj(const CMIUtilString &vrStrNameReal, const CMIUtilString &vrStrName,
- const lldb::SBValue &vrValue, const CMIUtilString &vrStrVarObjParentName);
- /* ctor */ CMICmnLLDBDebugSessionInfoVarObj(const CMICmnLLDBDebugSessionInfoVarObj &vrOther);
- /* ctor */ CMICmnLLDBDebugSessionInfoVarObj(CMICmnLLDBDebugSessionInfoVarObj &vrOther);
- /* ctor */ CMICmnLLDBDebugSessionInfoVarObj(CMICmnLLDBDebugSessionInfoVarObj &&vrOther);
- //
- CMICmnLLDBDebugSessionInfoVarObj &operator=(const CMICmnLLDBDebugSessionInfoVarObj &vrOther);
- CMICmnLLDBDebugSessionInfoVarObj &operator=(CMICmnLLDBDebugSessionInfoVarObj &&vrwOther);
- //
- const CMIUtilString &GetName() const;
- const CMIUtilString &GetNameReal() const;
- const CMIUtilString &GetValueFormatted() const;
- lldb::SBValue &GetValue();
- const lldb::SBValue &GetValue() const;
- varType_e GetType() const;
- bool SetVarFormat(const varFormat_e veVarFormat);
- const CMIUtilString &GetVarParentName() const;
- void UpdateValue();
-
- // Overridden:
- public:
- // From CMICmnBase
- /* dtor */ virtual ~CMICmnLLDBDebugSessionInfoVarObj();
-
- // Typedefs:
- private:
- typedef std::map<CMIUtilString, CMICmnLLDBDebugSessionInfoVarObj> MapKeyToVarObj_t;
- typedef std::pair<CMIUtilString, CMICmnLLDBDebugSessionInfoVarObj> MapPairKeyToVarObj_t;
-
- // Statics:
- private:
- static CMIUtilString GetStringFormatted(const MIuint64 vnValue, const char *vpStrValueNatural, varFormat_e veVarFormat);
-
- // Methods:
- private:
- bool CopyOther(const CMICmnLLDBDebugSessionInfoVarObj &vrOther);
- bool MoveOther(CMICmnLLDBDebugSessionInfoVarObj &vrwOther);
-
- // Attributes:
- private:
- static const char *ms_aVarFormatStrings[];
- static const char *ms_aVarFormatChars[];
- static MapKeyToVarObj_t ms_mapVarIdToVarObj;
- static MIuint ms_nVarUniqueId;
- static varFormat_e ms_eDefaultFormat; // overrides "natural" format
- //
- // *** Update the copy move constructors and assignment operator ***
- varFormat_e m_eVarFormat;
- varType_e m_eVarType;
- CMIUtilString m_strName;
- lldb::SBValue m_SBValue;
- CMIUtilString m_strNameReal;
- CMIUtilString m_strFormattedValue;
- CMIUtilString m_strVarObjParentName;
- // *** Update the copy move constructors and assignment operator ***
+class CMICmnLLDBDebugSessionInfoVarObj {
+ // Enums:
+public:
+ //++ ----------------------------------------------------------------------
+ // Details: Enumeration of a variable type that is not a composite type
+ //--
+ enum varFormat_e {
+ // CODETAG_SESSIONINFO_VARFORMAT_ENUM
+ // *** Order is import here ***
+ eVarFormat_Invalid = 0,
+ eVarFormat_Binary,
+ eVarFormat_Octal,
+ eVarFormat_Decimal,
+ eVarFormat_Hex,
+ eVarFormat_Natural,
+ eVarFormat_count // Always last one
+ };
+
+ //++ ----------------------------------------------------------------------
+ // Details: Enumeration of a variable type by composite or internal type
+ //--
+ enum varType_e {
+ eVarType_InValid = 0,
+ eVarType_Composite, // i.e. struct
+ eVarType_Internal, // i.e. int
+ eVarType_count // Always last one
+ };
+
+ // Statics:
+public:
+ static varFormat_e GetVarFormatForString(const CMIUtilString &vrStrFormat);
+ static varFormat_e GetVarFormatForChar(char vcFormat);
+ static CMIUtilString GetValueStringFormatted(const lldb::SBValue &vrValue,
+ const varFormat_e veVarFormat);
+ static void VarObjAdd(const CMICmnLLDBDebugSessionInfoVarObj &vrVarObj);
+ static void VarObjDelete(const CMIUtilString &vrVarName);
+ static bool VarObjGet(const CMIUtilString &vrVarName,
+ CMICmnLLDBDebugSessionInfoVarObj &vrwVarObj);
+ static void VarObjUpdate(const CMICmnLLDBDebugSessionInfoVarObj &vrVarObj);
+ static void VarObjIdInc();
+ static MIuint VarObjIdGet();
+ static void VarObjIdResetToZero();
+ static void VarObjClear();
+ static void VarObjSetFormat(varFormat_e eDefaultFormat);
+
+ // Methods:
+public:
+ /* ctor */ CMICmnLLDBDebugSessionInfoVarObj();
+ /* ctor */ CMICmnLLDBDebugSessionInfoVarObj(
+ const CMIUtilString &vrStrNameReal, const CMIUtilString &vrStrName,
+ const lldb::SBValue &vrValue);
+ /* ctor */ CMICmnLLDBDebugSessionInfoVarObj(
+ const CMIUtilString &vrStrNameReal, const CMIUtilString &vrStrName,
+ const lldb::SBValue &vrValue, const CMIUtilString &vrStrVarObjParentName);
+ /* ctor */ CMICmnLLDBDebugSessionInfoVarObj(
+ const CMICmnLLDBDebugSessionInfoVarObj &vrOther);
+ /* ctor */ CMICmnLLDBDebugSessionInfoVarObj(
+ CMICmnLLDBDebugSessionInfoVarObj &vrOther);
+ /* ctor */ CMICmnLLDBDebugSessionInfoVarObj(
+ CMICmnLLDBDebugSessionInfoVarObj &&vrOther);
+ //
+ CMICmnLLDBDebugSessionInfoVarObj &
+ operator=(const CMICmnLLDBDebugSessionInfoVarObj &vrOther);
+ CMICmnLLDBDebugSessionInfoVarObj &
+ operator=(CMICmnLLDBDebugSessionInfoVarObj &&vrwOther);
+ //
+ const CMIUtilString &GetName() const;
+ const CMIUtilString &GetNameReal() const;
+ const CMIUtilString &GetValueFormatted() const;
+ lldb::SBValue &GetValue();
+ const lldb::SBValue &GetValue() const;
+ varType_e GetType() const;
+ bool SetVarFormat(const varFormat_e veVarFormat);
+ const CMIUtilString &GetVarParentName() const;
+ void UpdateValue();
+
+ // Overridden:
+public:
+ // From CMICmnBase
+ /* dtor */ virtual ~CMICmnLLDBDebugSessionInfoVarObj();
+
+ // Typedefs:
+private:
+ typedef std::map<CMIUtilString, CMICmnLLDBDebugSessionInfoVarObj>
+ MapKeyToVarObj_t;
+ typedef std::pair<CMIUtilString, CMICmnLLDBDebugSessionInfoVarObj>
+ MapPairKeyToVarObj_t;
+
+ // Statics:
+private:
+ static CMIUtilString GetStringFormatted(const MIuint64 vnValue,
+ const char *vpStrValueNatural,
+ varFormat_e veVarFormat);
+
+ // Methods:
+private:
+ bool CopyOther(const CMICmnLLDBDebugSessionInfoVarObj &vrOther);
+ bool MoveOther(CMICmnLLDBDebugSessionInfoVarObj &vrwOther);
+
+ // Attributes:
+private:
+ static const char *ms_aVarFormatStrings[];
+ static const char *ms_aVarFormatChars[];
+ static MapKeyToVarObj_t ms_mapVarIdToVarObj;
+ static MIuint ms_nVarUniqueId;
+ static varFormat_e ms_eDefaultFormat; // overrides "natural" format
+ //
+ // *** Update the copy move constructors and assignment operator ***
+ varFormat_e m_eVarFormat;
+ varType_e m_eVarType;
+ CMIUtilString m_strName;
+ lldb::SBValue m_SBValue;
+ CMIUtilString m_strNameReal;
+ CMIUtilString m_strFormattedValue;
+ CMIUtilString m_strVarObjParentName;
+ // *** Update the copy move constructors and assignment operator ***
};
Modified: lldb/trunk/tools/lldb-mi/MICmnLLDBDebugger.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnLLDBDebugger.cpp?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnLLDBDebugger.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmnLLDBDebugger.cpp Tue Sep 6 15:57:50 2016
@@ -8,64 +8,72 @@
//===----------------------------------------------------------------------===//
// Third party headers:
+#include "lldb/API/SBCommandInterpreter.h"
+#include "lldb/API/SBProcess.h"
+#include "lldb/API/SBStream.h"
#include "lldb/API/SBTarget.h"
#include "lldb/API/SBThread.h"
-#include "lldb/API/SBProcess.h"
-#include "lldb/API/SBCommandInterpreter.h"
-#include "lldb/API/SBTypeSummary.h"
+#include "lldb/API/SBType.h"
#include "lldb/API/SBTypeCategory.h"
#include "lldb/API/SBTypeNameSpecifier.h"
-#include "lldb/API/SBStream.h"
-#include "lldb/API/SBType.h"
+#include "lldb/API/SBTypeSummary.h"
// In-house headers:
+#include "MICmnLLDBDebugSessionInfo.h"
#include "MICmnLLDBDebugger.h"
-#include "MICmnResources.h"
+#include "MICmnLLDBDebuggerHandleEvents.h"
#include "MICmnLog.h"
-#include "MIDriverBase.h"
+#include "MICmnResources.h"
#include "MICmnThreadMgrStd.h"
-#include "MICmnLLDBDebuggerHandleEvents.h"
-#include "MICmnLLDBDebugSessionInfo.h"
+#include "MIDriverBase.h"
#include "MIUtilSingletonHelper.h"
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// MI private summary providers
-static inline bool
-MI_char_summary_provider(lldb::SBValue value, lldb::SBTypeSummaryOptions options, lldb::SBStream &stream)
-{
- if (!value.IsValid())
- return false;
-
- lldb::SBType value_type = value.GetType();
- if(!value_type.IsValid())
- return false;
-
- lldb::BasicType type_code = value_type.GetBasicType();
- if (type_code == lldb::eBasicTypeSignedChar)
- stream.Printf("%d %s", (int)value.GetValueAsSigned(), value.GetValue());
- else if (type_code == lldb::eBasicTypeUnsignedChar)
- stream.Printf("%u %s", (unsigned)value.GetValueAsUnsigned(), value.GetValue());
- else
- return false;
-
- return true;
+static inline bool MI_char_summary_provider(lldb::SBValue value,
+ lldb::SBTypeSummaryOptions options,
+ lldb::SBStream &stream) {
+ if (!value.IsValid())
+ return false;
+
+ lldb::SBType value_type = value.GetType();
+ if (!value_type.IsValid())
+ return false;
+
+ lldb::BasicType type_code = value_type.GetBasicType();
+ if (type_code == lldb::eBasicTypeSignedChar)
+ stream.Printf("%d %s", (int)value.GetValueAsSigned(), value.GetValue());
+ else if (type_code == lldb::eBasicTypeUnsignedChar)
+ stream.Printf("%u %s", (unsigned)value.GetValueAsUnsigned(),
+ value.GetValue());
+ else
+ return false;
+
+ return true;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// MI summary helper routines
-static inline bool
-MI_add_summary(lldb::SBTypeCategory category, const char *typeName, lldb::SBTypeSummary::FormatCallback cb,
- uint32_t options, bool regex = false)
-{
+static inline bool MI_add_summary(lldb::SBTypeCategory category,
+ const char *typeName,
+ lldb::SBTypeSummary::FormatCallback cb,
+ uint32_t options, bool regex = false) {
#if defined(LLDB_DISABLE_PYTHON)
- return false;
+ return false;
#else
- lldb::SBTypeSummary summary = lldb::SBTypeSummary::CreateWithCallback(cb, options);
- return summary.IsValid() ? category.AddTypeSummary(lldb::SBTypeNameSpecifier(typeName, regex), summary) : false;
+ lldb::SBTypeSummary summary =
+ lldb::SBTypeSummary::CreateWithCallback(cb, options);
+ return summary.IsValid()
+ ? category.AddTypeSummary(
+ lldb::SBTypeNameSpecifier(typeName, regex), summary)
+ : false;
#endif
-}
+}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmnLLDBDebugger constructor.
// Type: Method.
// Args: None.
@@ -73,23 +81,20 @@ MI_add_summary(lldb::SBTypeCategory cate
// Throws: None.
//--
CMICmnLLDBDebugger::CMICmnLLDBDebugger()
- : m_constStrThisThreadId("MI debugger event")
-{
-}
+ : m_constStrThisThreadId("MI debugger event") {}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmnLLDBDebugger destructor.
// Type: Overridable.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmnLLDBDebugger::~CMICmnLLDBDebugger()
-{
- Shutdown();
-}
+CMICmnLLDBDebugger::~CMICmnLLDBDebugger() { Shutdown(); }
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Initialize resources for *this debugger object.
// Type: Method.
// Args: None.
@@ -97,62 +102,61 @@ CMICmnLLDBDebugger::~CMICmnLLDBDebugger(
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebugger::Initialize()
-{
- m_clientUsageRefCnt++;
-
- if (m_bInitialized)
- return MIstatus::success;
-
- bool bOk = MIstatus::success;
- CMIUtilString errMsg;
- ClrErrorDescription();
-
- if (m_pClientDriver == nullptr)
- {
- bOk = false;
- errMsg = MIRSRC(IDS_LLDBDEBUGGER_ERR_CLIENTDRIVER);
- }
+bool CMICmnLLDBDebugger::Initialize() {
+ m_clientUsageRefCnt++;
- // Note initialization order is important here as some resources depend on previous
- MI::ModuleInit<CMICmnLog>(IDS_MI_INIT_ERR_LOG, bOk, errMsg);
- MI::ModuleInit<CMICmnResources>(IDS_MI_INIT_ERR_RESOURCES, bOk, errMsg);
- MI::ModuleInit<CMICmnThreadMgrStd>(IDS_MI_INIT_ERR_THREADMGR, bOk, errMsg);
- MI::ModuleInit<CMICmnLLDBDebuggerHandleEvents>(IDS_MI_INIT_ERR_OUTOFBANDHANDLER, bOk, errMsg);
- MI::ModuleInit<CMICmnLLDBDebugSessionInfo>(IDS_MI_INIT_ERR_DEBUGSESSIONINFO, bOk, errMsg);
-
- // Note order is important here!
- if (bOk)
- lldb::SBDebugger::Initialize();
- if (bOk && !InitSBDebugger())
- {
- bOk = false;
- if (!errMsg.empty())
- errMsg += ", ";
- errMsg += GetErrorDescription().c_str();
- }
- if (bOk && !InitSBListener())
- {
- bOk = false;
- if (!errMsg.empty())
- errMsg += ", ";
- errMsg += GetErrorDescription().c_str();
- }
- bOk = bOk && InitStdStreams();
- bOk = bOk && RegisterMISummaryProviders();
- m_bInitialized = bOk;
-
- if (!bOk && !HaveErrorDescription())
- {
- CMIUtilString strInitError(CMIUtilString::Format(MIRSRC(IDS_MI_INIT_ERR_LLDBDEBUGGER), errMsg.c_str()));
- SetErrorDescription(strInitError);
- }
+ if (m_bInitialized)
+ return MIstatus::success;
- return bOk;
+ bool bOk = MIstatus::success;
+ CMIUtilString errMsg;
+ ClrErrorDescription();
+
+ if (m_pClientDriver == nullptr) {
+ bOk = false;
+ errMsg = MIRSRC(IDS_LLDBDEBUGGER_ERR_CLIENTDRIVER);
+ }
+
+ // Note initialization order is important here as some resources depend on
+ // previous
+ MI::ModuleInit<CMICmnLog>(IDS_MI_INIT_ERR_LOG, bOk, errMsg);
+ MI::ModuleInit<CMICmnResources>(IDS_MI_INIT_ERR_RESOURCES, bOk, errMsg);
+ MI::ModuleInit<CMICmnThreadMgrStd>(IDS_MI_INIT_ERR_THREADMGR, bOk, errMsg);
+ MI::ModuleInit<CMICmnLLDBDebuggerHandleEvents>(
+ IDS_MI_INIT_ERR_OUTOFBANDHANDLER, bOk, errMsg);
+ MI::ModuleInit<CMICmnLLDBDebugSessionInfo>(IDS_MI_INIT_ERR_DEBUGSESSIONINFO,
+ bOk, errMsg);
+
+ // Note order is important here!
+ if (bOk)
+ lldb::SBDebugger::Initialize();
+ if (bOk && !InitSBDebugger()) {
+ bOk = false;
+ if (!errMsg.empty())
+ errMsg += ", ";
+ errMsg += GetErrorDescription().c_str();
+ }
+ if (bOk && !InitSBListener()) {
+ bOk = false;
+ if (!errMsg.empty())
+ errMsg += ", ";
+ errMsg += GetErrorDescription().c_str();
+ }
+ bOk = bOk && InitStdStreams();
+ bOk = bOk && RegisterMISummaryProviders();
+ m_bInitialized = bOk;
+
+ if (!bOk && !HaveErrorDescription()) {
+ CMIUtilString strInitError(CMIUtilString::Format(
+ MIRSRC(IDS_MI_INIT_ERR_LLDBDEBUGGER), errMsg.c_str()));
+ SetErrorDescription(strInitError);
+ }
+
+ return bOk;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Release resources for *this debugger object.
// Type: Method.
// Args: None.
@@ -160,81 +164,85 @@ CMICmnLLDBDebugger::Initialize()
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebugger::Shutdown()
-{
- if (--m_clientUsageRefCnt > 0)
- return MIstatus::success;
-
- if (!m_bInitialized)
- return MIstatus::success;
-
- m_bInitialized = false;
-
- ClrErrorDescription();
-
- bool bOk = MIstatus::success;
- CMIUtilString errMsg;
-
- // Explicitly delete the remote target in case MI needs to exit prematurely otherwise
- // LLDB debugger may hang in its Destroy() fn waiting on events
- lldb::SBTarget sbTarget = CMICmnLLDBDebugSessionInfo::Instance().GetTarget();
- m_lldbDebugger.DeleteTarget(sbTarget);
-
- // Debug: May need this but does seem to work without it so commented out the fudge 19/06/2014
- // It appears we need to wait as hang does not occur when hitting a debug breakpoint here
- // const std::chrono::milliseconds time( 1000 );
- // std::this_thread::sleep_for( time );
-
- lldb::SBDebugger::Destroy(m_lldbDebugger);
- lldb::SBDebugger::Terminate();
- m_pClientDriver = nullptr;
- m_mapBroadcastClassNameToEventMask.clear();
- m_mapIdToEventMask.clear();
-
- // Note shutdown order is important here
- MI::ModuleShutdown<CMICmnLLDBDebugSessionInfo>(IDS_MI_INIT_ERR_DEBUGSESSIONINFO, bOk, errMsg);
- MI::ModuleShutdown<CMICmnLLDBDebuggerHandleEvents>(IDS_MI_INIT_ERR_OUTOFBANDHANDLER, bOk, errMsg);
- MI::ModuleShutdown<CMICmnThreadMgrStd>(IDS_MI_INIT_ERR_THREADMGR, bOk, errMsg);
- MI::ModuleShutdown<CMICmnResources>(IDS_MI_INIT_ERR_RESOURCES, bOk, errMsg);
- MI::ModuleShutdown<CMICmnLog>(IDS_MI_INIT_ERR_LOG, bOk, errMsg);
-
- if (!bOk)
- {
- SetErrorDescriptionn(MIRSRC(IDS_MI_SHTDWN_ERR_LLDBDEBUGGER), errMsg.c_str());
- }
+bool CMICmnLLDBDebugger::Shutdown() {
+ if (--m_clientUsageRefCnt > 0)
+ return MIstatus::success;
+ if (!m_bInitialized)
return MIstatus::success;
+
+ m_bInitialized = false;
+
+ ClrErrorDescription();
+
+ bool bOk = MIstatus::success;
+ CMIUtilString errMsg;
+
+ // Explicitly delete the remote target in case MI needs to exit prematurely
+ // otherwise
+ // LLDB debugger may hang in its Destroy() fn waiting on events
+ lldb::SBTarget sbTarget = CMICmnLLDBDebugSessionInfo::Instance().GetTarget();
+ m_lldbDebugger.DeleteTarget(sbTarget);
+
+ // Debug: May need this but does seem to work without it so commented out the
+ // fudge 19/06/2014
+ // It appears we need to wait as hang does not occur when hitting a debug
+ // breakpoint here
+ // const std::chrono::milliseconds time( 1000 );
+ // std::this_thread::sleep_for( time );
+
+ lldb::SBDebugger::Destroy(m_lldbDebugger);
+ lldb::SBDebugger::Terminate();
+ m_pClientDriver = nullptr;
+ m_mapBroadcastClassNameToEventMask.clear();
+ m_mapIdToEventMask.clear();
+
+ // Note shutdown order is important here
+ MI::ModuleShutdown<CMICmnLLDBDebugSessionInfo>(
+ IDS_MI_INIT_ERR_DEBUGSESSIONINFO, bOk, errMsg);
+ MI::ModuleShutdown<CMICmnLLDBDebuggerHandleEvents>(
+ IDS_MI_INIT_ERR_OUTOFBANDHANDLER, bOk, errMsg);
+ MI::ModuleShutdown<CMICmnThreadMgrStd>(IDS_MI_INIT_ERR_THREADMGR, bOk,
+ errMsg);
+ MI::ModuleShutdown<CMICmnResources>(IDS_MI_INIT_ERR_RESOURCES, bOk, errMsg);
+ MI::ModuleShutdown<CMICmnLog>(IDS_MI_INIT_ERR_LOG, bOk, errMsg);
+
+ if (!bOk) {
+ SetErrorDescriptionn(MIRSRC(IDS_MI_SHTDWN_ERR_LLDBDEBUGGER),
+ errMsg.c_str());
+ }
+
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Return the LLDB debugger instance created for this debug session.
// Type: Method.
// Args: None.
// Return: lldb::SBDebugger & - LLDB debugger object reference.
// Throws: None.
//--
-lldb::SBDebugger &
-CMICmnLLDBDebugger::GetTheDebugger()
-{
- return m_lldbDebugger;
+lldb::SBDebugger &CMICmnLLDBDebugger::GetTheDebugger() {
+ return m_lldbDebugger;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Return the LLDB listener instance created for this debug session.
// Type: Method.
// Args: None.
// Return: lldb::SBListener & - LLDB listener object reference.
// Throws: None.
//--
-lldb::SBListener &
-CMICmnLLDBDebugger::GetTheListener()
-{
- return m_lldbListener;
+lldb::SBListener &CMICmnLLDBDebugger::GetTheListener() {
+ return m_lldbListener;
}
-//++ ------------------------------------------------------------------------------------
-// Details: Set the client driver that wants to use *this LLDB debugger. Call this function
+//++
+//------------------------------------------------------------------------------------
+// Details: Set the client driver that wants to use *this LLDB debugger. Call
+// this function
// prior to Initialize().
// Type: Method.
// Args: vClientDriver - (R) A driver.
@@ -242,32 +250,33 @@ CMICmnLLDBDebugger::GetTheListener()
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebugger::SetDriver(const CMIDriverBase &vClientDriver)
-{
- m_pClientDriver = const_cast<CMIDriverBase *>(&vClientDriver);
+bool CMICmnLLDBDebugger::SetDriver(const CMIDriverBase &vClientDriver) {
+ m_pClientDriver = const_cast<CMIDriverBase *>(&vClientDriver);
- return MIstatus::success;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Get the client driver that is use *this LLDB debugger.
// Type: Method.
// Args: vClientDriver - (R) A driver.
// Return: CMIDriverBase & - A driver instance.
// Throws: None.
//--
-CMIDriverBase &
-CMICmnLLDBDebugger::GetDriver() const
-{
- return *m_pClientDriver;
+CMIDriverBase &CMICmnLLDBDebugger::GetDriver() const {
+ return *m_pClientDriver;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Wait until all events have been handled.
-// This function works in pair with CMICmnLLDBDebugger::MonitorSBListenerEvents
-// that handles events from queue. When all events were handled and queue is
-// empty the MonitorSBListenerEvents notifies this function that it's ready to
+// This function works in pair with
+// CMICmnLLDBDebugger::MonitorSBListenerEvents
+// that handles events from queue. When all events were handled and
+// queue is
+// empty the MonitorSBListenerEvents notifies this function that it's
+// ready to
// go on. To synchronize them the m_mutexEventQueue and
// m_conditionEventQueueEmpty are used.
// Type: Method.
@@ -275,62 +284,64 @@ CMICmnLLDBDebugger::GetDriver() const
// Return: None.
// Throws: None.
//--
-void
-CMICmnLLDBDebugger::WaitForHandleEvent()
-{
- std::unique_lock<std::mutex> lock(m_mutexEventQueue);
-
- lldb::SBEvent event;
- if (ThreadIsActive() && m_lldbListener.PeekAtNextEvent(event))
- m_conditionEventQueueEmpty.wait(lock);
+void CMICmnLLDBDebugger::WaitForHandleEvent() {
+ std::unique_lock<std::mutex> lock(m_mutexEventQueue);
+
+ lldb::SBEvent event;
+ if (ThreadIsActive() && m_lldbListener.PeekAtNextEvent(event))
+ m_conditionEventQueueEmpty.wait(lock);
}
-//++ ------------------------------------------------------------------------------------
-// Details: Check if need to rebroadcast stop event. This function will return true if
+//++
+//------------------------------------------------------------------------------------
+// Details: Check if need to rebroadcast stop event. This function will return
+// true if
// debugger is in synchronouse mode. In such case the
-// CMICmnLLDBDebugger::RebroadcastStopEvent should be called to rebroadcast
+// CMICmnLLDBDebugger::RebroadcastStopEvent should be called to
+// rebroadcast
// a new stop event (if any).
// Type: Method.
// Args: None.
// Return: bool - True = Need to rebroadcast stop event, false = otherwise.
// Throws: None.
//--
-bool
-CMICmnLLDBDebugger::CheckIfNeedToRebroadcastStopEvent()
-{
- CMICmnLLDBDebugSessionInfo &rSessionInfo(CMICmnLLDBDebugSessionInfo::Instance());
- if (!rSessionInfo.GetDebugger().GetAsync())
- {
- const bool include_expression_stops = false;
- m_nLastStopId = CMICmnLLDBDebugSessionInfo::Instance().GetProcess().GetStopID(include_expression_stops);
- return true;
- }
+bool CMICmnLLDBDebugger::CheckIfNeedToRebroadcastStopEvent() {
+ CMICmnLLDBDebugSessionInfo &rSessionInfo(
+ CMICmnLLDBDebugSessionInfo::Instance());
+ if (!rSessionInfo.GetDebugger().GetAsync()) {
+ const bool include_expression_stops = false;
+ m_nLastStopId =
+ CMICmnLLDBDebugSessionInfo::Instance().GetProcess().GetStopID(
+ include_expression_stops);
+ return true;
+ }
- return false;
+ return false;
}
-//++ ------------------------------------------------------------------------------------
-// Details: Rebroadcast stop event if needed. This function should be called only if the
-// CMICmnLLDBDebugger::CheckIfNeedToRebroadcastStopEvent() returned true.
+//++
+//------------------------------------------------------------------------------------
+// Details: Rebroadcast stop event if needed. This function should be called
+// only if the
+// CMICmnLLDBDebugger::CheckIfNeedToRebroadcastStopEvent() returned
+// true.
// Type: Method.
// Args: None.
// Return: None.
// Throws: None.
//--
-void
-CMICmnLLDBDebugger::RebroadcastStopEvent()
-{
- lldb::SBProcess process = CMICmnLLDBDebugSessionInfo::Instance().GetProcess();
- const bool include_expression_stops = false;
- const uint32_t nStopId = process.GetStopID(include_expression_stops);
- if (m_nLastStopId != nStopId)
- {
- lldb::SBEvent event = process.GetStopEventForStopID(nStopId);
- process.GetBroadcaster().BroadcastEvent(event);
- }
+void CMICmnLLDBDebugger::RebroadcastStopEvent() {
+ lldb::SBProcess process = CMICmnLLDBDebugSessionInfo::Instance().GetProcess();
+ const bool include_expression_stops = false;
+ const uint32_t nStopId = process.GetStopID(include_expression_stops);
+ if (m_nLastStopId != nStopId) {
+ lldb::SBEvent event = process.GetStopEventForStopID(nStopId);
+ process.GetBroadcaster().BroadcastEvent(event);
+ }
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Initialize the LLDB Debugger object.
// Type: Method.
// Args: None.
@@ -338,44 +349,45 @@ CMICmnLLDBDebugger::RebroadcastStopEvent
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebugger::InitSBDebugger()
-{
- m_lldbDebugger = lldb::SBDebugger::Create(false);
- if (!m_lldbDebugger.IsValid())
- {
- SetErrorDescription(MIRSRC(IDS_LLDBDEBUGGER_ERR_INVALIDDEBUGGER));
- return MIstatus::failure;
- }
+bool CMICmnLLDBDebugger::InitSBDebugger() {
+ m_lldbDebugger = lldb::SBDebugger::Create(false);
+ if (!m_lldbDebugger.IsValid()) {
+ SetErrorDescription(MIRSRC(IDS_LLDBDEBUGGER_ERR_INVALIDDEBUGGER));
+ return MIstatus::failure;
+ }
- m_lldbDebugger.GetCommandInterpreter().SetPromptOnQuit(false);
+ m_lldbDebugger.GetCommandInterpreter().SetPromptOnQuit(false);
- return MIstatus::success;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
-// Details: Set the LLDB Debugger's std in, err and out streams. (Not implemented left
-// here for reference. Was called in the CMICmnLLDBDebugger::Initialize() )
+//++
+//------------------------------------------------------------------------------------
+// Details: Set the LLDB Debugger's std in, err and out streams. (Not
+// implemented left
+// here for reference. Was called in the
+// CMICmnLLDBDebugger::Initialize() )
// Type: Method.
// Args: None.
// Return: MIstatus::success - Functionality succeeded.
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebugger::InitStdStreams()
-{
- // This is not required when operating the MI driver's code as it has its own
- // streams. Setting the Stdin for the lldbDebugger especially on LINUX will cause
- // another thread to run and partially consume stdin data meant for MI stdin handler
- // m_lldbDebugger.SetErrorFileHandle( m_pClientDriver->GetStderr(), false );
- // m_lldbDebugger.SetOutputFileHandle( m_pClientDriver->GetStdout(), false );
- // m_lldbDebugger.SetInputFileHandle( m_pClientDriver->GetStdin(), false );
+bool CMICmnLLDBDebugger::InitStdStreams() {
+ // This is not required when operating the MI driver's code as it has its own
+ // streams. Setting the Stdin for the lldbDebugger especially on LINUX will
+ // cause
+ // another thread to run and partially consume stdin data meant for MI stdin
+ // handler
+ // m_lldbDebugger.SetErrorFileHandle( m_pClientDriver->GetStderr(), false );
+ // m_lldbDebugger.SetOutputFileHandle( m_pClientDriver->GetStdout(), false );
+ // m_lldbDebugger.SetInputFileHandle( m_pClientDriver->GetStdin(), false );
- return MIstatus::success;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Set up the events from the SBDebugger's we would like to listen to.
// Type: Method.
// Args: None.
@@ -383,74 +395,94 @@ CMICmnLLDBDebugger::InitStdStreams()
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebugger::InitSBListener()
-{
- m_lldbListener = m_lldbDebugger.GetListener();
- if (!m_lldbListener.IsValid())
- {
- SetErrorDescription(MIRSRC(IDS_LLDBDEBUGGER_ERR_INVALIDLISTENER));
- return MIstatus::failure;
- }
-
- const CMIUtilString strDbgId("CMICmnLLDBDebugger1");
- MIuint eventMask = lldb::SBTarget::eBroadcastBitBreakpointChanged | lldb::SBTarget::eBroadcastBitModulesLoaded |
- lldb::SBTarget::eBroadcastBitModulesUnloaded | lldb::SBTarget::eBroadcastBitWatchpointChanged |
- lldb::SBTarget::eBroadcastBitSymbolsLoaded;
- bool bOk = RegisterForEvent(strDbgId, CMIUtilString(lldb::SBTarget::GetBroadcasterClassName()), eventMask);
-
- eventMask = lldb::SBThread::eBroadcastBitStackChanged;
- bOk = bOk && RegisterForEvent(strDbgId, CMIUtilString(lldb::SBThread::GetBroadcasterClassName()), eventMask);
-
- eventMask = lldb::SBProcess::eBroadcastBitStateChanged | lldb::SBProcess::eBroadcastBitInterrupt |
- lldb::SBProcess::eBroadcastBitSTDOUT | lldb::SBProcess::eBroadcastBitSTDERR | lldb::SBProcess::eBroadcastBitProfileData |
- lldb::SBProcess::eBroadcastBitStructuredData;
- bOk = bOk && RegisterForEvent(strDbgId, CMIUtilString(lldb::SBProcess::GetBroadcasterClassName()), eventMask);
-
- eventMask = lldb::SBCommandInterpreter::eBroadcastBitQuitCommandReceived | lldb::SBCommandInterpreter::eBroadcastBitThreadShouldExit |
- lldb::SBCommandInterpreter::eBroadcastBitAsynchronousOutputData |
- lldb::SBCommandInterpreter::eBroadcastBitAsynchronousErrorData;
- bOk = bOk && RegisterForEvent(strDbgId, m_lldbDebugger.GetCommandInterpreter().GetBroadcaster(), eventMask);
-
- return bOk;
-}
+bool CMICmnLLDBDebugger::InitSBListener() {
+ m_lldbListener = m_lldbDebugger.GetListener();
+ if (!m_lldbListener.IsValid()) {
+ SetErrorDescription(MIRSRC(IDS_LLDBDEBUGGER_ERR_INVALIDLISTENER));
+ return MIstatus::failure;
+ }
-//++ ------------------------------------------------------------------------------------
-// Details: Register with the debugger, the SBListener, the type of events you are interested
+ const CMIUtilString strDbgId("CMICmnLLDBDebugger1");
+ MIuint eventMask = lldb::SBTarget::eBroadcastBitBreakpointChanged |
+ lldb::SBTarget::eBroadcastBitModulesLoaded |
+ lldb::SBTarget::eBroadcastBitModulesUnloaded |
+ lldb::SBTarget::eBroadcastBitWatchpointChanged |
+ lldb::SBTarget::eBroadcastBitSymbolsLoaded;
+ bool bOk = RegisterForEvent(
+ strDbgId, CMIUtilString(lldb::SBTarget::GetBroadcasterClassName()),
+ eventMask);
+
+ eventMask = lldb::SBThread::eBroadcastBitStackChanged;
+ bOk = bOk &&
+ RegisterForEvent(
+ strDbgId, CMIUtilString(lldb::SBThread::GetBroadcasterClassName()),
+ eventMask);
+
+ eventMask = lldb::SBProcess::eBroadcastBitStateChanged |
+ lldb::SBProcess::eBroadcastBitInterrupt |
+ lldb::SBProcess::eBroadcastBitSTDOUT |
+ lldb::SBProcess::eBroadcastBitSTDERR |
+ lldb::SBProcess::eBroadcastBitProfileData |
+ lldb::SBProcess::eBroadcastBitStructuredData;
+ bOk = bOk &&
+ RegisterForEvent(
+ strDbgId, CMIUtilString(lldb::SBProcess::GetBroadcasterClassName()),
+ eventMask);
+
+ eventMask = lldb::SBCommandInterpreter::eBroadcastBitQuitCommandReceived |
+ lldb::SBCommandInterpreter::eBroadcastBitThreadShouldExit |
+ lldb::SBCommandInterpreter::eBroadcastBitAsynchronousOutputData |
+ lldb::SBCommandInterpreter::eBroadcastBitAsynchronousErrorData;
+ bOk = bOk &&
+ RegisterForEvent(
+ strDbgId, m_lldbDebugger.GetCommandInterpreter().GetBroadcaster(),
+ eventMask);
+
+ return bOk;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: Register with the debugger, the SBListener, the type of events you
+// are interested
// in. Others, like commands, may have already set the mask.
// Type: Method.
-// Args: vClientName - (R) ID of the client who wants these events set.
+// Args: vClientName - (R) ID of the client who wants these events
+// set.
// vBroadcasterClass - (R) The SBBroadcaster's class name.
// vEventMask - (R) The mask of events to listen for.
// Return: MIstatus::success - Functionality succeeded.
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebugger::RegisterForEvent(const CMIUtilString &vClientName, const CMIUtilString &vBroadcasterClass, const MIuint vEventMask)
-{
- MIuint existingMask = 0;
- if (!BroadcasterGetMask(vBroadcasterClass, existingMask))
- return MIstatus::failure;
-
- if (!ClientSaveMask(vClientName, vBroadcasterClass, vEventMask))
- return MIstatus::failure;
-
- const char *pBroadCasterName = vBroadcasterClass.c_str();
- MIuint eventMask = vEventMask;
- eventMask += existingMask;
- const MIuint result = m_lldbListener.StartListeningForEventClass(m_lldbDebugger, pBroadCasterName, eventMask);
- if (result == 0)
- {
- SetErrorDescription(CMIUtilString::Format(MIRSRC(IDS_LLDBDEBUGGER_ERR_STARTLISTENER), pBroadCasterName));
- return MIstatus::failure;
- }
+bool CMICmnLLDBDebugger::RegisterForEvent(
+ const CMIUtilString &vClientName, const CMIUtilString &vBroadcasterClass,
+ const MIuint vEventMask) {
+ MIuint existingMask = 0;
+ if (!BroadcasterGetMask(vBroadcasterClass, existingMask))
+ return MIstatus::failure;
+
+ if (!ClientSaveMask(vClientName, vBroadcasterClass, vEventMask))
+ return MIstatus::failure;
- return BroadcasterSaveMask(vBroadcasterClass, eventMask);
+ const char *pBroadCasterName = vBroadcasterClass.c_str();
+ MIuint eventMask = vEventMask;
+ eventMask += existingMask;
+ const MIuint result = m_lldbListener.StartListeningForEventClass(
+ m_lldbDebugger, pBroadCasterName, eventMask);
+ if (result == 0) {
+ SetErrorDescription(CMIUtilString::Format(
+ MIRSRC(IDS_LLDBDEBUGGER_ERR_STARTLISTENER), pBroadCasterName));
+ return MIstatus::failure;
+ }
+
+ return BroadcasterSaveMask(vBroadcasterClass, eventMask);
}
-//++ ------------------------------------------------------------------------------------
-// Details: Register with the debugger, the SBListener, the type of events you are interested
+//++
+//------------------------------------------------------------------------------------
+// Details: Register with the debugger, the SBListener, the type of events you
+// are interested
// in. Others, like commands, may have already set the mask.
// Type: Method.
// Args: vClientName - (R) ID of the client who wants these events set.
@@ -460,85 +492,93 @@ CMICmnLLDBDebugger::RegisterForEvent(con
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebugger::RegisterForEvent(const CMIUtilString &vClientName, const lldb::SBBroadcaster &vBroadcaster, const MIuint vEventMask)
-{
- const char *pBroadcasterName = vBroadcaster.GetName();
- if (pBroadcasterName == nullptr)
- {
- SetErrorDescription(CMIUtilString::Format(MIRSRC(IDS_LLDBDEBUGGER_ERR_BROADCASTER_NAME), MIRSRC(IDS_WORD_INVALIDNULLPTR)));
- return MIstatus::failure;
- }
- CMIUtilString broadcasterName(pBroadcasterName);
- if (broadcasterName.length() == 0)
- {
- SetErrorDescription(CMIUtilString::Format(MIRSRC(IDS_LLDBDEBUGGER_ERR_BROADCASTER_NAME), MIRSRC(IDS_WORD_INVALIDEMPTY)));
- return MIstatus::failure;
- }
+bool CMICmnLLDBDebugger::RegisterForEvent(
+ const CMIUtilString &vClientName, const lldb::SBBroadcaster &vBroadcaster,
+ const MIuint vEventMask) {
+ const char *pBroadcasterName = vBroadcaster.GetName();
+ if (pBroadcasterName == nullptr) {
+ SetErrorDescription(
+ CMIUtilString::Format(MIRSRC(IDS_LLDBDEBUGGER_ERR_BROADCASTER_NAME),
+ MIRSRC(IDS_WORD_INVALIDNULLPTR)));
+ return MIstatus::failure;
+ }
+ CMIUtilString broadcasterName(pBroadcasterName);
+ if (broadcasterName.length() == 0) {
+ SetErrorDescription(
+ CMIUtilString::Format(MIRSRC(IDS_LLDBDEBUGGER_ERR_BROADCASTER_NAME),
+ MIRSRC(IDS_WORD_INVALIDEMPTY)));
+ return MIstatus::failure;
+ }
- MIuint existingMask = 0;
- if (!BroadcasterGetMask(broadcasterName, existingMask))
- return MIstatus::failure;
-
- if (!ClientSaveMask(vClientName, broadcasterName, vEventMask))
- return MIstatus::failure;
-
- MIuint eventMask = vEventMask;
- eventMask += existingMask;
- const MIuint result = m_lldbListener.StartListeningForEvents(vBroadcaster, eventMask);
- if (result == 0)
- {
- SetErrorDescription(CMIUtilString::Format(MIRSRC(IDS_LLDBDEBUGGER_ERR_STARTLISTENER), pBroadcasterName));
- return MIstatus::failure;
- }
+ MIuint existingMask = 0;
+ if (!BroadcasterGetMask(broadcasterName, existingMask))
+ return MIstatus::failure;
+
+ if (!ClientSaveMask(vClientName, broadcasterName, vEventMask))
+ return MIstatus::failure;
+
+ MIuint eventMask = vEventMask;
+ eventMask += existingMask;
+ const MIuint result =
+ m_lldbListener.StartListeningForEvents(vBroadcaster, eventMask);
+ if (result == 0) {
+ SetErrorDescription(CMIUtilString::Format(
+ MIRSRC(IDS_LLDBDEBUGGER_ERR_STARTLISTENER), pBroadcasterName));
+ return MIstatus::failure;
+ }
- return BroadcasterSaveMask(broadcasterName, eventMask);
+ return BroadcasterSaveMask(broadcasterName, eventMask);
}
-//++ ------------------------------------------------------------------------------------
-// Details: Unregister with the debugger, the SBListener, the type of events you are no
-// longer interested in. Others, like commands, may still remain interested so
+//++
+//------------------------------------------------------------------------------------
+// Details: Unregister with the debugger, the SBListener, the type of events you
+// are no
+// longer interested in. Others, like commands, may still remain
+// interested so
// an event may not necessarily be stopped.
// Type: Method.
-// Args: vClientName - (R) ID of the client who no longer requires these events.
+// Args: vClientName - (R) ID of the client who no longer requires
+// these events.
// vBroadcasterClass - (R) The SBBroadcaster's class name.
// Return: MIstatus::success - Functionality succeeded.
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebugger::UnregisterForEvent(const CMIUtilString &vClientName, const CMIUtilString &vBroadcasterClass)
-{
- MIuint clientsEventMask = 0;
- if (!ClientGetTheirMask(vClientName, vBroadcasterClass, clientsEventMask))
- return MIstatus::failure;
- if (!ClientRemoveTheirMask(vClientName, vBroadcasterClass))
- return MIstatus::failure;
-
- const MIuint otherClientsEventMask = ClientGetMaskForAllClients(vBroadcasterClass);
- MIuint newEventMask = 0;
- for (MIuint i = 0; i < 32; i++)
- {
- const MIuint bit = 1 << i;
- const MIuint clientBit = bit & clientsEventMask;
- const MIuint othersBit = bit & otherClientsEventMask;
- if ((clientBit != 0) && (othersBit == 0))
- {
- newEventMask += clientBit;
- }
- }
+bool CMICmnLLDBDebugger::UnregisterForEvent(
+ const CMIUtilString &vClientName, const CMIUtilString &vBroadcasterClass) {
+ MIuint clientsEventMask = 0;
+ if (!ClientGetTheirMask(vClientName, vBroadcasterClass, clientsEventMask))
+ return MIstatus::failure;
+ if (!ClientRemoveTheirMask(vClientName, vBroadcasterClass))
+ return MIstatus::failure;
- const char *pBroadCasterName = vBroadcasterClass.c_str();
- if (!m_lldbListener.StopListeningForEventClass(m_lldbDebugger, pBroadCasterName, newEventMask))
- {
- SetErrorDescription(CMIUtilString::Format(MIRSRC(IDS_LLDBDEBUGGER_ERR_STOPLISTENER), vClientName.c_str(), pBroadCasterName));
- return MIstatus::failure;
- }
+ const MIuint otherClientsEventMask =
+ ClientGetMaskForAllClients(vBroadcasterClass);
+ MIuint newEventMask = 0;
+ for (MIuint i = 0; i < 32; i++) {
+ const MIuint bit = 1 << i;
+ const MIuint clientBit = bit & clientsEventMask;
+ const MIuint othersBit = bit & otherClientsEventMask;
+ if ((clientBit != 0) && (othersBit == 0)) {
+ newEventMask += clientBit;
+ }
+ }
+
+ const char *pBroadCasterName = vBroadcasterClass.c_str();
+ if (!m_lldbListener.StopListeningForEventClass(
+ m_lldbDebugger, pBroadCasterName, newEventMask)) {
+ SetErrorDescription(
+ CMIUtilString::Format(MIRSRC(IDS_LLDBDEBUGGER_ERR_STOPLISTENER),
+ vClientName.c_str(), pBroadCasterName));
+ return MIstatus::failure;
+ }
- return BroadcasterSaveMask(vBroadcasterClass, otherClientsEventMask);
+ return BroadcasterSaveMask(vBroadcasterClass, otherClientsEventMask);
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Given the SBBroadcaster class name retrieve it's current event mask.
// Type: Method.
// Args: vBroadcasterClass - (R) The SBBroadcaster's class name.
@@ -547,27 +587,28 @@ CMICmnLLDBDebugger::UnregisterForEvent(c
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebugger::BroadcasterGetMask(const CMIUtilString &vBroadcasterClass, MIuint &vwEventMask) const
-{
- vwEventMask = 0;
-
- if (vBroadcasterClass.empty())
- {
- SetErrorDescription(CMIUtilString::Format(MIRSRC(IDS_LLDBDEBUGGER_ERR_INVALIDBROADCASTER), vBroadcasterClass.c_str()));
- return MIstatus::failure;
- }
+bool CMICmnLLDBDebugger::BroadcasterGetMask(
+ const CMIUtilString &vBroadcasterClass, MIuint &vwEventMask) const {
+ vwEventMask = 0;
+
+ if (vBroadcasterClass.empty()) {
+ SetErrorDescription(
+ CMIUtilString::Format(MIRSRC(IDS_LLDBDEBUGGER_ERR_INVALIDBROADCASTER),
+ vBroadcasterClass.c_str()));
+ return MIstatus::failure;
+ }
- const MapBroadcastClassNameToEventMask_t::const_iterator it = m_mapBroadcastClassNameToEventMask.find(vBroadcasterClass);
- if (it != m_mapBroadcastClassNameToEventMask.end())
- {
- vwEventMask = (*it).second;
- }
+ const MapBroadcastClassNameToEventMask_t::const_iterator it =
+ m_mapBroadcastClassNameToEventMask.find(vBroadcasterClass);
+ if (it != m_mapBroadcastClassNameToEventMask.end()) {
+ vwEventMask = (*it).second;
+ }
- return MIstatus::success;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Remove the event mask for the specified SBBroadcaster class name.
// Type: Method.
// Args: vBroadcasterClass - (R) The SBBroadcaster's class name.
@@ -575,19 +616,19 @@ CMICmnLLDBDebugger::BroadcasterGetMask(c
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebugger::BroadcasterRemoveMask(const CMIUtilString &vBroadcasterClass)
-{
- MapBroadcastClassNameToEventMask_t::const_iterator it = m_mapBroadcastClassNameToEventMask.find(vBroadcasterClass);
- if (it != m_mapBroadcastClassNameToEventMask.end())
- {
- m_mapBroadcastClassNameToEventMask.erase(it);
- }
+bool CMICmnLLDBDebugger::BroadcasterRemoveMask(
+ const CMIUtilString &vBroadcasterClass) {
+ MapBroadcastClassNameToEventMask_t::const_iterator it =
+ m_mapBroadcastClassNameToEventMask.find(vBroadcasterClass);
+ if (it != m_mapBroadcastClassNameToEventMask.end()) {
+ m_mapBroadcastClassNameToEventMask.erase(it);
+ }
- return MIstatus::success;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Given the SBBroadcaster class name save it's current event mask.
// Type: Method.
// Args: vBroadcasterClass - (R) The SBBroadcaster's class name.
@@ -596,81 +637,83 @@ CMICmnLLDBDebugger::BroadcasterRemoveMas
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebugger::BroadcasterSaveMask(const CMIUtilString &vBroadcasterClass, const MIuint vEventMask)
-{
- if (vBroadcasterClass.empty())
- {
- SetErrorDescription(CMIUtilString::Format(MIRSRC(IDS_LLDBDEBUGGER_ERR_INVALIDBROADCASTER), vBroadcasterClass.c_str()));
- return MIstatus::failure;
- }
+bool CMICmnLLDBDebugger::BroadcasterSaveMask(
+ const CMIUtilString &vBroadcasterClass, const MIuint vEventMask) {
+ if (vBroadcasterClass.empty()) {
+ SetErrorDescription(
+ CMIUtilString::Format(MIRSRC(IDS_LLDBDEBUGGER_ERR_INVALIDBROADCASTER),
+ vBroadcasterClass.c_str()));
+ return MIstatus::failure;
+ }
- BroadcasterRemoveMask(vBroadcasterClass);
- MapPairBroadcastClassNameToEventMask_t pr(vBroadcasterClass, vEventMask);
- m_mapBroadcastClassNameToEventMask.insert(pr);
+ BroadcasterRemoveMask(vBroadcasterClass);
+ MapPairBroadcastClassNameToEventMask_t pr(vBroadcasterClass, vEventMask);
+ m_mapBroadcastClassNameToEventMask.insert(pr);
- return MIstatus::success;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
-// Details: Iterate all the clients who have registered event masks against particular
+//++
+//------------------------------------------------------------------------------------
+// Details: Iterate all the clients who have registered event masks against
+// particular
// SBBroadcasters and build up the mask that is for all of them.
// Type: Method.
// Args: vBroadcasterClass - (R) The broadcaster to retrieve the mask for.
// Return: MIuint - Event mask.
// Throws: None.
//--
-MIuint
-CMICmnLLDBDebugger::ClientGetMaskForAllClients(const CMIUtilString &vBroadcasterClass) const
-{
- MIuint mask = 0;
- MapIdToEventMask_t::const_iterator it = m_mapIdToEventMask.begin();
- while (it != m_mapIdToEventMask.end())
- {
- const CMIUtilString &rId((*it).first);
- if (rId.find(vBroadcasterClass) != std::string::npos)
- {
- const MIuint clientsMask = (*it).second;
- mask |= clientsMask;
- }
-
- // Next
- ++it;
- }
+MIuint CMICmnLLDBDebugger::ClientGetMaskForAllClients(
+ const CMIUtilString &vBroadcasterClass) const {
+ MIuint mask = 0;
+ MapIdToEventMask_t::const_iterator it = m_mapIdToEventMask.begin();
+ while (it != m_mapIdToEventMask.end()) {
+ const CMIUtilString &rId((*it).first);
+ if (rId.find(vBroadcasterClass) != std::string::npos) {
+ const MIuint clientsMask = (*it).second;
+ mask |= clientsMask;
+ }
+
+ // Next
+ ++it;
+ }
- return mask;
+ return mask;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Given the client save its particular event requirements.
// Type: Method.
// Args: vClientName - (R) The Client's unique ID.
-// vBroadcasterClass - (R) The SBBroadcaster's class name targeted for the events.
+// vBroadcasterClass - (R) The SBBroadcaster's class name targeted for
+// the events.
// vEventMask - (R) The mask of events to listen for.
// Return: MIstatus::success - Functionality succeeded.
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebugger::ClientSaveMask(const CMIUtilString &vClientName, const CMIUtilString &vBroadcasterClass, const MIuint vEventMask)
-{
- if (vClientName.empty())
- {
- SetErrorDescription(CMIUtilString::Format(MIRSRC(IDS_LLDBDEBUGGER_ERR_INVALIDCLIENTNAME), vClientName.c_str()));
- return MIstatus::failure;
- }
+bool CMICmnLLDBDebugger::ClientSaveMask(const CMIUtilString &vClientName,
+ const CMIUtilString &vBroadcasterClass,
+ const MIuint vEventMask) {
+ if (vClientName.empty()) {
+ SetErrorDescription(CMIUtilString::Format(
+ MIRSRC(IDS_LLDBDEBUGGER_ERR_INVALIDCLIENTNAME), vClientName.c_str()));
+ return MIstatus::failure;
+ }
- CMIUtilString strId(vBroadcasterClass);
- strId += vClientName;
+ CMIUtilString strId(vBroadcasterClass);
+ strId += vClientName;
- ClientRemoveTheirMask(vClientName, vBroadcasterClass);
- MapPairIdToEventMask_t pr(strId, vEventMask);
- m_mapIdToEventMask.insert(pr);
+ ClientRemoveTheirMask(vClientName, vBroadcasterClass);
+ MapPairIdToEventMask_t pr(strId, vEventMask);
+ m_mapIdToEventMask.insert(pr);
- return MIstatus::success;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Given the client remove it's particular event requirements.
// Type: Method.
// Args: vClientName - (R) The Client's unique ID.
@@ -679,29 +722,29 @@ CMICmnLLDBDebugger::ClientSaveMask(const
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebugger::ClientRemoveTheirMask(const CMIUtilString &vClientName, const CMIUtilString &vBroadcasterClass)
-{
- if (vClientName.empty())
- {
- SetErrorDescription(CMIUtilString::Format(MIRSRC(IDS_LLDBDEBUGGER_ERR_INVALIDCLIENTNAME), vClientName.c_str()));
- return MIstatus::failure;
- }
+bool CMICmnLLDBDebugger::ClientRemoveTheirMask(
+ const CMIUtilString &vClientName, const CMIUtilString &vBroadcasterClass) {
+ if (vClientName.empty()) {
+ SetErrorDescription(CMIUtilString::Format(
+ MIRSRC(IDS_LLDBDEBUGGER_ERR_INVALIDCLIENTNAME), vClientName.c_str()));
+ return MIstatus::failure;
+ }
- CMIUtilString strId(vBroadcasterClass);
- strId += vClientName;
+ CMIUtilString strId(vBroadcasterClass);
+ strId += vClientName;
- const MapIdToEventMask_t::const_iterator it = m_mapIdToEventMask.find(strId);
- if (it != m_mapIdToEventMask.end())
- {
- m_mapIdToEventMask.erase(it);
- }
+ const MapIdToEventMask_t::const_iterator it = m_mapIdToEventMask.find(strId);
+ if (it != m_mapIdToEventMask.end()) {
+ m_mapIdToEventMask.erase(it);
+ }
- return MIstatus::success;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
-// Details: Retrieve the client's event mask used for on a particular SBBroadcaster.
+//++
+//------------------------------------------------------------------------------------
+// Details: Retrieve the client's event mask used for on a particular
+// SBBroadcaster.
// Type: Method.
// Args: vClientName - (R) The Client's unique ID.
// vBroadcasterClass - (R) The SBBroadcaster's class name.
@@ -710,105 +753,115 @@ CMICmnLLDBDebugger::ClientRemoveTheirMas
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebugger::ClientGetTheirMask(const CMIUtilString &vClientName, const CMIUtilString &vBroadcasterClass, MIuint &vwEventMask)
-{
- vwEventMask = 0;
-
- if (vClientName.empty())
- {
- SetErrorDescription(CMIUtilString::Format(MIRSRC(IDS_LLDBDEBUGGER_ERR_INVALIDCLIENTNAME), vClientName.c_str()));
- return MIstatus::failure;
- }
-
- const CMIUtilString strId(vBroadcasterClass + vClientName);
- const MapIdToEventMask_t::const_iterator it = m_mapIdToEventMask.find(strId);
- if (it != m_mapIdToEventMask.end())
- {
- vwEventMask = (*it).second;
- }
-
- SetErrorDescription(CMIUtilString::Format(MIRSRC(IDS_LLDBDEBUGGER_ERR_CLIENTNOTREGISTERED), vClientName.c_str()));
-
+bool CMICmnLLDBDebugger::ClientGetTheirMask(
+ const CMIUtilString &vClientName, const CMIUtilString &vBroadcasterClass,
+ MIuint &vwEventMask) {
+ vwEventMask = 0;
+
+ if (vClientName.empty()) {
+ SetErrorDescription(CMIUtilString::Format(
+ MIRSRC(IDS_LLDBDEBUGGER_ERR_INVALIDCLIENTNAME), vClientName.c_str()));
return MIstatus::failure;
-}
+ }
-//++ ------------------------------------------------------------------------------------
-// Details: Momentarily wait for an events being broadcast and inspect those that do
-// come this way. Check if the target should exit event if so start shutting
-// down this thread and the application. Any other events pass on to the
+ const CMIUtilString strId(vBroadcasterClass + vClientName);
+ const MapIdToEventMask_t::const_iterator it = m_mapIdToEventMask.find(strId);
+ if (it != m_mapIdToEventMask.end()) {
+ vwEventMask = (*it).second;
+ }
+
+ SetErrorDescription(CMIUtilString::Format(
+ MIRSRC(IDS_LLDBDEBUGGER_ERR_CLIENTNOTREGISTERED), vClientName.c_str()));
+
+ return MIstatus::failure;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: Momentarily wait for an events being broadcast and inspect those
+// that do
+// come this way. Check if the target should exit event if so start
+// shutting
+// down this thread and the application. Any other events pass on to
+// the
// Out-of-band handler to further determine what kind of event arrived.
// This function runs in the thread "MI debugger event".
// Type: Method.
-// Args: vrbIsAlive - (W) False = yes exit event monitoring thread, true = continue.
+// Args: vrbIsAlive - (W) False = yes exit event monitoring thread, true =
+// continue.
// Return: MIstatus::success - Functional succeeded.
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebugger::MonitorSBListenerEvents(bool &vrbIsAlive)
-{
- vrbIsAlive = true;
-
- // Lock the mutex of event queue
- // Note that it should be locked while we are in CMICmnLLDBDebugger::MonitorSBListenerEvents to
- // avoid a race condition with CMICmnLLDBDebugger::WaitForHandleEvent
- std::unique_lock<std::mutex> lock(m_mutexEventQueue);
-
- lldb::SBEvent event;
- const bool bGotEvent = m_lldbListener.GetNextEvent(event);
- if (!bGotEvent)
- {
- // Notify that we are finished and unlock the mutex of event queue before sleeping
- m_conditionEventQueueEmpty.notify_one();
- lock.unlock();
-
- // Wait a bit to reduce CPU load
- const std::chrono::milliseconds time(1);
- std::this_thread::sleep_for(time);
- return MIstatus::success;
- }
- assert(event.IsValid());
- assert(event.GetBroadcaster().IsValid());
+bool CMICmnLLDBDebugger::MonitorSBListenerEvents(bool &vrbIsAlive) {
+ vrbIsAlive = true;
- // Debugging
- m_pLog->WriteLog(CMIUtilString::Format("##### An event occurred: %s", event.GetBroadcasterClass()));
+ // Lock the mutex of event queue
+ // Note that it should be locked while we are in
+ // CMICmnLLDBDebugger::MonitorSBListenerEvents to
+ // avoid a race condition with CMICmnLLDBDebugger::WaitForHandleEvent
+ std::unique_lock<std::mutex> lock(m_mutexEventQueue);
+
+ lldb::SBEvent event;
+ const bool bGotEvent = m_lldbListener.GetNextEvent(event);
+ if (!bGotEvent) {
+ // Notify that we are finished and unlock the mutex of event queue before
+ // sleeping
+ m_conditionEventQueueEmpty.notify_one();
+ lock.unlock();
+
+ // Wait a bit to reduce CPU load
+ const std::chrono::milliseconds time(1);
+ std::this_thread::sleep_for(time);
+ return MIstatus::success;
+ }
+ assert(event.IsValid());
+ assert(event.GetBroadcaster().IsValid());
+
+ // Debugging
+ m_pLog->WriteLog(CMIUtilString::Format("##### An event occurred: %s",
+ event.GetBroadcasterClass()));
+
+ bool bHandledEvent = false;
+ bool bOk = false;
+ {
+ // Lock Mutex before handling events so that we don't disturb a running cmd
+ CMIUtilThreadLock lock(
+ CMICmnLLDBDebugSessionInfo::Instance().GetSessionMutex());
+ bOk = CMICmnLLDBDebuggerHandleEvents::Instance().HandleEvent(event,
+ bHandledEvent);
+ }
+
+ if (!bHandledEvent) {
+ const CMIUtilString msg(
+ CMIUtilString::Format(MIRSRC(IDS_LLDBDEBUGGER_WRN_UNKNOWN_EVENT),
+ event.GetBroadcasterClass()));
+ m_pLog->WriteLog(msg);
+ }
+
+ if (!bOk)
+ m_pLog->WriteLog(
+ CMICmnLLDBDebuggerHandleEvents::Instance().GetErrorDescription());
- bool bHandledEvent = false;
- bool bOk = false;
- {
- // Lock Mutex before handling events so that we don't disturb a running cmd
- CMIUtilThreadLock lock(CMICmnLLDBDebugSessionInfo::Instance().GetSessionMutex());
- bOk = CMICmnLLDBDebuggerHandleEvents::Instance().HandleEvent(event, bHandledEvent);
- }
-
- if (!bHandledEvent)
- {
- const CMIUtilString msg(CMIUtilString::Format(MIRSRC(IDS_LLDBDEBUGGER_WRN_UNKNOWN_EVENT), event.GetBroadcasterClass()));
- m_pLog->WriteLog(msg);
- }
-
- if (!bOk)
- m_pLog->WriteLog(CMICmnLLDBDebuggerHandleEvents::Instance().GetErrorDescription());
-
- return MIstatus::success;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: The main worker method for this thread.
// Type: Method.
-// Args: vrbIsAlive - (W) True = *this thread is working, false = thread has exited.
+// Args: vrbIsAlive - (W) True = *this thread is working, false = thread has
+// exited.
// Return: MIstatus::success - Functional succeeded.
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebugger::ThreadRun(bool &vrbIsAlive)
-{
- return MonitorSBListenerEvents(vrbIsAlive);
+bool CMICmnLLDBDebugger::ThreadRun(bool &vrbIsAlive) {
+ return MonitorSBListenerEvents(vrbIsAlive);
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Let this thread clean up after itself.
// Type: Method.
// Args:
@@ -816,26 +869,22 @@ CMICmnLLDBDebugger::ThreadRun(bool &vrbI
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebugger::ThreadFinish()
-{
- return MIstatus::success;
-}
+bool CMICmnLLDBDebugger::ThreadFinish() { return MIstatus::success; }
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Retrieve *this thread object's name.
// Type: Overridden.
// Args: None.
// Return: CMIUtilString & - Text.
// Throws: None.
//--
-const CMIUtilString &
-CMICmnLLDBDebugger::ThreadGetName() const
-{
- return m_constStrThisThreadId;
+const CMIUtilString &CMICmnLLDBDebugger::ThreadGetName() const {
+ return m_constStrThisThreadId;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Loads lldb-mi formatters
// Type: Method.
// Args: None.
@@ -843,25 +892,27 @@ CMICmnLLDBDebugger::ThreadGetName() cons
// false - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebugger::LoadMIFormatters(lldb::SBTypeCategory miCategory)
-{
- if (!MI_add_summary(miCategory, "char", MI_char_summary_provider,
- lldb::eTypeOptionHideValue | lldb::eTypeOptionSkipPointers))
- return false;
+bool CMICmnLLDBDebugger::LoadMIFormatters(lldb::SBTypeCategory miCategory) {
+ if (!MI_add_summary(miCategory, "char", MI_char_summary_provider,
+ lldb::eTypeOptionHideValue |
+ lldb::eTypeOptionSkipPointers))
+ return false;
- if (!MI_add_summary(miCategory, "unsigned char", MI_char_summary_provider,
- lldb::eTypeOptionHideValue | lldb::eTypeOptionSkipPointers))
- return false;
+ if (!MI_add_summary(miCategory, "unsigned char", MI_char_summary_provider,
+ lldb::eTypeOptionHideValue |
+ lldb::eTypeOptionSkipPointers))
+ return false;
- if (!MI_add_summary(miCategory, "signed char", MI_char_summary_provider,
- lldb::eTypeOptionHideValue | lldb::eTypeOptionSkipPointers))
- return false;
+ if (!MI_add_summary(miCategory, "signed char", MI_char_summary_provider,
+ lldb::eTypeOptionHideValue |
+ lldb::eTypeOptionSkipPointers))
+ return false;
- return true;
+ return true;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Registers lldb-mi custom summary providers
// Type: Method.
// Args: None.
@@ -869,19 +920,17 @@ CMICmnLLDBDebugger::LoadMIFormatters(lld
// false - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebugger::RegisterMISummaryProviders()
-{
- static const char* miCategoryName = "lldb-mi";
- lldb::SBTypeCategory miCategory = m_lldbDebugger.CreateCategory(miCategoryName);
- if (!miCategory.IsValid())
- return false;
-
- if (!LoadMIFormatters(miCategory))
- {
- m_lldbDebugger.DeleteCategory(miCategoryName);
- return false;
- }
- miCategory.SetEnabled(true);
- return true;
+bool CMICmnLLDBDebugger::RegisterMISummaryProviders() {
+ static const char *miCategoryName = "lldb-mi";
+ lldb::SBTypeCategory miCategory =
+ m_lldbDebugger.CreateCategory(miCategoryName);
+ if (!miCategory.IsValid())
+ return false;
+
+ if (!LoadMIFormatters(miCategory)) {
+ m_lldbDebugger.DeleteCategory(miCategoryName);
+ return false;
+ }
+ miCategory.SetEnabled(true);
+ return true;
}
Modified: lldb/trunk/tools/lldb-mi/MICmnLLDBDebugger.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnLLDBDebugger.h?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnLLDBDebugger.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmnLLDBDebugger.h Tue Sep 6 15:57:50 2016
@@ -10,105 +10,126 @@
#pragma once
// Third party headers
+#include "lldb/API/SBDebugger.h"
+#include "lldb/API/SBEvent.h"
+#include "lldb/API/SBListener.h"
#include <condition_variable>
#include <map>
#include <mutex>
-#include "lldb/API/SBDebugger.h"
-#include "lldb/API/SBListener.h"
-#include "lldb/API/SBEvent.h"
// In-house headers:
#include "MICmnBase.h"
-#include "MIUtilThreadBaseStd.h"
#include "MIUtilSingletonBase.h"
+#include "MIUtilThreadBaseStd.h"
// Declarations:
class CMIDriverBase;
class CMICmnLLDBDebuggerHandleEvents;
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI proxy/adapter for the LLDB public SBDebugger API. The CMIDriver
// requires *this object. Command classes make calls on *this object
// to facilitate their work effort. The instance runs in its own worker
// thread.
// A singleton class.
//--
-class CMICmnLLDBDebugger : public CMICmnBase, public CMIUtilThreadActiveObjBase, public MI::ISingleton<CMICmnLLDBDebugger>
-{
- friend class MI::ISingleton<CMICmnLLDBDebugger>;
-
- // Methods:
- public:
- bool Initialize() override;
- bool Shutdown() override;
-
- bool SetDriver(const CMIDriverBase &vClientDriver);
- CMIDriverBase &GetDriver() const;
- lldb::SBDebugger &GetTheDebugger();
- lldb::SBListener &GetTheListener();
- void WaitForHandleEvent();
- bool CheckIfNeedToRebroadcastStopEvent();
- void RebroadcastStopEvent();
-
- // MI Commands can use these functions to listen for events they require
- bool RegisterForEvent(const CMIUtilString &vClientName, const CMIUtilString &vBroadcasterClass, const MIuint vEventMask);
- bool UnregisterForEvent(const CMIUtilString &vClientName, const CMIUtilString &vBroadcasterClass);
- bool RegisterForEvent(const CMIUtilString &vClientName, const lldb::SBBroadcaster &vBroadcaster, const MIuint vEventMask);
- bool UnregisterForEvent(const CMIUtilString &vClientName, const lldb::SBBroadcaster &vBroadcaster);
-
- // Overridden:
- public:
- // From CMIUtilThreadActiveObjBase
- const CMIUtilString &ThreadGetName() const override;
-
- // Overridden:
- protected:
- // From CMIUtilThreadActiveObjBase
- bool ThreadRun(bool &vrIsAlive) override;
- bool ThreadFinish() override;
-
- // Typedefs:
- private:
- typedef std::map<CMIUtilString, MIuint> MapBroadcastClassNameToEventMask_t;
- typedef std::pair<CMIUtilString, MIuint> MapPairBroadcastClassNameToEventMask_t;
- typedef std::map<CMIUtilString, MIuint> MapIdToEventMask_t;
- typedef std::pair<CMIUtilString, MIuint> MapPairIdToEventMask_t;
-
- // Methods:
- private:
- /* ctor */ CMICmnLLDBDebugger();
- /* ctor */ CMICmnLLDBDebugger(const CMICmnLLDBDebugger &);
- void operator=(const CMICmnLLDBDebugger &);
-
- bool InitSBDebugger();
- bool InitSBListener();
- bool InitStdStreams();
- bool MonitorSBListenerEvents(bool &vrbYesExit);
-
- bool BroadcasterGetMask(const CMIUtilString &vBroadcasterClass, MIuint &vEventMask) const;
- bool BroadcasterRemoveMask(const CMIUtilString &vBroadcasterClass);
- bool BroadcasterSaveMask(const CMIUtilString &vBroadcasterClass, const MIuint vEventMask);
-
- MIuint ClientGetMaskForAllClients(const CMIUtilString &vBroadcasterClass) const;
- bool ClientSaveMask(const CMIUtilString &vClientName, const CMIUtilString &vBroadcasterClass, const MIuint vEventMask);
- bool ClientRemoveTheirMask(const CMIUtilString &vClientName, const CMIUtilString &vBroadcasterClass);
- bool ClientGetTheirMask(const CMIUtilString &vClientName, const CMIUtilString &vBroadcasterClass, MIuint &vwEventMask);
- bool LoadMIFormatters(lldb::SBTypeCategory miCategory);
- bool RegisterMISummaryProviders();
- // Overridden:
- private:
- // From CMICmnBase
- /* dtor */ ~CMICmnLLDBDebugger() override;
-
- // Attributes:
- private:
- CMIDriverBase *m_pClientDriver; // The driver that wants to use *this LLDB debugger
- lldb::SBDebugger m_lldbDebugger; // SBDebugger is the primordial object that creates SBTargets and provides access to them
- lldb::SBListener m_lldbListener; // API clients can register its own listener to debugger events
- const CMIUtilString m_constStrThisThreadId;
- MapBroadcastClassNameToEventMask_t m_mapBroadcastClassNameToEventMask;
- MapIdToEventMask_t m_mapIdToEventMask;
- std::mutex m_mutexEventQueue;
- std::condition_variable m_conditionEventQueueEmpty;
- uint32_t m_nLastStopId;
+class CMICmnLLDBDebugger : public CMICmnBase,
+ public CMIUtilThreadActiveObjBase,
+ public MI::ISingleton<CMICmnLLDBDebugger> {
+ friend class MI::ISingleton<CMICmnLLDBDebugger>;
+
+ // Methods:
+public:
+ bool Initialize() override;
+ bool Shutdown() override;
+
+ bool SetDriver(const CMIDriverBase &vClientDriver);
+ CMIDriverBase &GetDriver() const;
+ lldb::SBDebugger &GetTheDebugger();
+ lldb::SBListener &GetTheListener();
+ void WaitForHandleEvent();
+ bool CheckIfNeedToRebroadcastStopEvent();
+ void RebroadcastStopEvent();
+
+ // MI Commands can use these functions to listen for events they require
+ bool RegisterForEvent(const CMIUtilString &vClientName,
+ const CMIUtilString &vBroadcasterClass,
+ const MIuint vEventMask);
+ bool UnregisterForEvent(const CMIUtilString &vClientName,
+ const CMIUtilString &vBroadcasterClass);
+ bool RegisterForEvent(const CMIUtilString &vClientName,
+ const lldb::SBBroadcaster &vBroadcaster,
+ const MIuint vEventMask);
+ bool UnregisterForEvent(const CMIUtilString &vClientName,
+ const lldb::SBBroadcaster &vBroadcaster);
+
+ // Overridden:
+public:
+ // From CMIUtilThreadActiveObjBase
+ const CMIUtilString &ThreadGetName() const override;
+
+ // Overridden:
+protected:
+ // From CMIUtilThreadActiveObjBase
+ bool ThreadRun(bool &vrIsAlive) override;
+ bool ThreadFinish() override;
+
+ // Typedefs:
+private:
+ typedef std::map<CMIUtilString, MIuint> MapBroadcastClassNameToEventMask_t;
+ typedef std::pair<CMIUtilString, MIuint>
+ MapPairBroadcastClassNameToEventMask_t;
+ typedef std::map<CMIUtilString, MIuint> MapIdToEventMask_t;
+ typedef std::pair<CMIUtilString, MIuint> MapPairIdToEventMask_t;
+
+ // Methods:
+private:
+ /* ctor */ CMICmnLLDBDebugger();
+ /* ctor */ CMICmnLLDBDebugger(const CMICmnLLDBDebugger &);
+ void operator=(const CMICmnLLDBDebugger &);
+
+ bool InitSBDebugger();
+ bool InitSBListener();
+ bool InitStdStreams();
+ bool MonitorSBListenerEvents(bool &vrbYesExit);
+
+ bool BroadcasterGetMask(const CMIUtilString &vBroadcasterClass,
+ MIuint &vEventMask) const;
+ bool BroadcasterRemoveMask(const CMIUtilString &vBroadcasterClass);
+ bool BroadcasterSaveMask(const CMIUtilString &vBroadcasterClass,
+ const MIuint vEventMask);
+
+ MIuint
+ ClientGetMaskForAllClients(const CMIUtilString &vBroadcasterClass) const;
+ bool ClientSaveMask(const CMIUtilString &vClientName,
+ const CMIUtilString &vBroadcasterClass,
+ const MIuint vEventMask);
+ bool ClientRemoveTheirMask(const CMIUtilString &vClientName,
+ const CMIUtilString &vBroadcasterClass);
+ bool ClientGetTheirMask(const CMIUtilString &vClientName,
+ const CMIUtilString &vBroadcasterClass,
+ MIuint &vwEventMask);
+ bool LoadMIFormatters(lldb::SBTypeCategory miCategory);
+ bool RegisterMISummaryProviders();
+ // Overridden:
+private:
+ // From CMICmnBase
+ /* dtor */ ~CMICmnLLDBDebugger() override;
+
+ // Attributes:
+private:
+ CMIDriverBase
+ *m_pClientDriver; // The driver that wants to use *this LLDB debugger
+ lldb::SBDebugger m_lldbDebugger; // SBDebugger is the primordial object that
+ // creates SBTargets and provides access to
+ // them
+ lldb::SBListener m_lldbListener; // API clients can register its own listener
+ // to debugger events
+ const CMIUtilString m_constStrThisThreadId;
+ MapBroadcastClassNameToEventMask_t m_mapBroadcastClassNameToEventMask;
+ MapIdToEventMask_t m_mapIdToEventMask;
+ std::mutex m_mutexEventQueue;
+ std::condition_variable m_conditionEventQueueEmpty;
+ uint32_t m_nLastStopId;
};
Modified: lldb/trunk/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.cpp?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.cpp Tue Sep 6 15:57:50 2016
@@ -9,14 +9,14 @@
// Third party headers:
#include "lldb/API/SBAddress.h"
+#include "lldb/API/SBBreakpoint.h"
+#include "lldb/API/SBCommandInterpreter.h"
+#include "lldb/API/SBCommandReturnObject.h"
#include "lldb/API/SBEvent.h"
#include "lldb/API/SBProcess.h"
-#include "lldb/API/SBBreakpoint.h"
#include "lldb/API/SBStream.h"
#include "lldb/API/SBTarget.h"
#include "lldb/API/SBThread.h"
-#include "lldb/API/SBCommandInterpreter.h"
-#include "lldb/API/SBCommandReturnObject.h"
#include "lldb/API/SBUnixSignals.h"
#ifdef _WIN32
#include <io.h> // For the ::_access()
@@ -25,45 +25,45 @@
#endif // _WIN32
// In-house headers:
+#include "MICmnLLDBDebugSessionInfo.h"
+#include "MICmnLLDBDebugger.h"
#include "MICmnLLDBDebuggerHandleEvents.h"
-#include "MICmnResources.h"
#include "MICmnLog.h"
-#include "MICmnLLDBDebugger.h"
-#include "MICmnLLDBDebugSessionInfo.h"
+#include "MICmnMIOutOfBandRecord.h"
#include "MICmnMIResultRecord.h"
#include "MICmnMIValueConst.h"
#include "MICmnMIValueList.h"
-#include "MICmnMIOutOfBandRecord.h"
-#include "MICmnStreamStdout.h"
+#include "MICmnResources.h"
#include "MICmnStreamStderr.h"
-#include "MIUtilDebug.h"
+#include "MICmnStreamStdout.h"
#include "MIDriver.h"
+#include "MIUtilDebug.h"
#include "Platform.h" // for PATH_MAX
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmnLLDBDebuggerHandleEvents constructor.
// Type: Method.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmnLLDBDebuggerHandleEvents::CMICmnLLDBDebuggerHandleEvents()
-{
-}
+CMICmnLLDBDebuggerHandleEvents::CMICmnLLDBDebuggerHandleEvents() {}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmnLLDBDebuggerHandleEvents destructor.
// Type: Overridable.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmnLLDBDebuggerHandleEvents::~CMICmnLLDBDebuggerHandleEvents()
-{
- Shutdown();
+CMICmnLLDBDebuggerHandleEvents::~CMICmnLLDBDebuggerHandleEvents() {
+ Shutdown();
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Initialize resources for *this broadcaster object.
// Type: Method.
// Args: None.
@@ -71,25 +71,24 @@ CMICmnLLDBDebuggerHandleEvents::~CMICmnL
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebuggerHandleEvents::Initialize()
-{
- m_clientUsageRefCnt++;
+bool CMICmnLLDBDebuggerHandleEvents::Initialize() {
+ m_clientUsageRefCnt++;
- if (m_bInitialized)
- return MIstatus::success;
+ if (m_bInitialized)
+ return MIstatus::success;
- m_bInitialized = MIstatus::success;
- m_bSignalsInitialized = false;
- m_SIGINT = 0;
- m_SIGSTOP = 0;
- m_SIGSEGV = 0;
- m_SIGTRAP = 0;
+ m_bInitialized = MIstatus::success;
+ m_bSignalsInitialized = false;
+ m_SIGINT = 0;
+ m_SIGSTOP = 0;
+ m_SIGSEGV = 0;
+ m_SIGTRAP = 0;
- return m_bInitialized;
+ return m_bInitialized;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Release resources for *this broadcaster object.
// Type: Method.
// Args: None.
@@ -97,23 +96,24 @@ CMICmnLLDBDebuggerHandleEvents::Initiali
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebuggerHandleEvents::Shutdown()
-{
- if (--m_clientUsageRefCnt > 0)
- return MIstatus::success;
+bool CMICmnLLDBDebuggerHandleEvents::Shutdown() {
+ if (--m_clientUsageRefCnt > 0)
+ return MIstatus::success;
- if (!m_bInitialized)
- return MIstatus::success;
+ if (!m_bInitialized)
+ return MIstatus::success;
- m_bInitialized = false;
+ m_bInitialized = false;
- return MIstatus::success;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
-// Details: Interpret the event object to ascertain the action to take or information to
-// to form and put in a MI Out-of-band record object which is given to stdout.
+//++
+//------------------------------------------------------------------------------------
+// Details: Interpret the event object to ascertain the action to take or
+// information to
+// to form and put in a MI Out-of-band record object which is given to
+// stdout.
// Type: Method.
// Args: vEvent - (R) An LLDB broadcast event.
// vrbHandledEvent - (W) True - event handled, false = not handled.
@@ -121,42 +121,34 @@ CMICmnLLDBDebuggerHandleEvents::Shutdown
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebuggerHandleEvents::HandleEvent(const lldb::SBEvent &vEvent, bool &vrbHandledEvent)
-{
- bool bOk = MIstatus::success;
- vrbHandledEvent = false;
-
- if (lldb::SBProcess::EventIsProcessEvent(vEvent))
- {
- vrbHandledEvent = true;
- bOk = HandleEventSBProcess(vEvent);
- }
- else if (lldb::SBBreakpoint::EventIsBreakpointEvent(vEvent))
- {
- vrbHandledEvent = true;
- bOk = HandleEventSBBreakPoint(vEvent);
- }
- else if (lldb::SBThread::EventIsThreadEvent(vEvent))
- {
- vrbHandledEvent = true;
- bOk = HandleEventSBThread(vEvent);
- }
- else if (lldb::SBTarget::EventIsTargetEvent(vEvent))
- {
- vrbHandledEvent = true;
- bOk = HandleEventSBTarget(vEvent);
- }
- else if (lldb::SBCommandInterpreter::EventIsCommandInterpreterEvent(vEvent))
- {
- vrbHandledEvent = true;
- bOk = HandleEventSBCommandInterpreter(vEvent);
- }
+bool CMICmnLLDBDebuggerHandleEvents::HandleEvent(const lldb::SBEvent &vEvent,
+ bool &vrbHandledEvent) {
+ bool bOk = MIstatus::success;
+ vrbHandledEvent = false;
+
+ if (lldb::SBProcess::EventIsProcessEvent(vEvent)) {
+ vrbHandledEvent = true;
+ bOk = HandleEventSBProcess(vEvent);
+ } else if (lldb::SBBreakpoint::EventIsBreakpointEvent(vEvent)) {
+ vrbHandledEvent = true;
+ bOk = HandleEventSBBreakPoint(vEvent);
+ } else if (lldb::SBThread::EventIsThreadEvent(vEvent)) {
+ vrbHandledEvent = true;
+ bOk = HandleEventSBThread(vEvent);
+ } else if (lldb::SBTarget::EventIsTargetEvent(vEvent)) {
+ vrbHandledEvent = true;
+ bOk = HandleEventSBTarget(vEvent);
+ } else if (lldb::SBCommandInterpreter::EventIsCommandInterpreterEvent(
+ vEvent)) {
+ vrbHandledEvent = true;
+ bOk = HandleEventSBCommandInterpreter(vEvent);
+ }
- return bOk;
+ return bOk;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Handle a LLDB SBProcess event.
// Type: Method.
// Args: vEvent - (R) An LLDB broadcast event.
@@ -164,49 +156,50 @@ CMICmnLLDBDebuggerHandleEvents::HandleEv
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebuggerHandleEvents::HandleEventSBProcess(const lldb::SBEvent &vEvent)
-{
- bool bOk = MIstatus::success;
-
- const char *pEventType = "";
- const MIuint nEventType = vEvent.GetType();
- switch (nEventType)
- {
- case lldb::SBProcess::eBroadcastBitInterrupt:
- pEventType = "eBroadcastBitInterrupt";
- break;
- case lldb::SBProcess::eBroadcastBitProfileData:
- pEventType = "eBroadcastBitProfileData";
- break;
- case lldb::SBProcess::eBroadcastBitStructuredData:
- pEventType = "eBroadcastBitStructuredData";
- break;
- case lldb::SBProcess::eBroadcastBitStateChanged:
- pEventType = "eBroadcastBitStateChanged";
- bOk = HandleProcessEventBroadcastBitStateChanged(vEvent);
- break;
- case lldb::SBProcess::eBroadcastBitSTDERR:
- pEventType = "eBroadcastBitSTDERR";
- bOk = GetProcessStderr();
- break;
- case lldb::SBProcess::eBroadcastBitSTDOUT:
- pEventType = "eBroadcastBitSTDOUT";
- bOk = GetProcessStdout();
- break;
- default:
- {
- const CMIUtilString msg(CMIUtilString::Format(MIRSRC(IDS_LLDBOUTOFBAND_ERR_UNKNOWN_EVENT), "SBProcess", (MIuint)nEventType));
- SetErrorDescription(msg);
- return MIstatus::failure;
- }
- }
- m_pLog->WriteLog(CMIUtilString::Format("##### An SB Process event occurred: %s", pEventType));
+bool CMICmnLLDBDebuggerHandleEvents::HandleEventSBProcess(
+ const lldb::SBEvent &vEvent) {
+ bool bOk = MIstatus::success;
+
+ const char *pEventType = "";
+ const MIuint nEventType = vEvent.GetType();
+ switch (nEventType) {
+ case lldb::SBProcess::eBroadcastBitInterrupt:
+ pEventType = "eBroadcastBitInterrupt";
+ break;
+ case lldb::SBProcess::eBroadcastBitProfileData:
+ pEventType = "eBroadcastBitProfileData";
+ break;
+ case lldb::SBProcess::eBroadcastBitStructuredData:
+ pEventType = "eBroadcastBitStructuredData";
+ break;
+ case lldb::SBProcess::eBroadcastBitStateChanged:
+ pEventType = "eBroadcastBitStateChanged";
+ bOk = HandleProcessEventBroadcastBitStateChanged(vEvent);
+ break;
+ case lldb::SBProcess::eBroadcastBitSTDERR:
+ pEventType = "eBroadcastBitSTDERR";
+ bOk = GetProcessStderr();
+ break;
+ case lldb::SBProcess::eBroadcastBitSTDOUT:
+ pEventType = "eBroadcastBitSTDOUT";
+ bOk = GetProcessStdout();
+ break;
+ default: {
+ const CMIUtilString msg(
+ CMIUtilString::Format(MIRSRC(IDS_LLDBOUTOFBAND_ERR_UNKNOWN_EVENT),
+ "SBProcess", (MIuint)nEventType));
+ SetErrorDescription(msg);
+ return MIstatus::failure;
+ }
+ }
+ m_pLog->WriteLog(CMIUtilString::Format(
+ "##### An SB Process event occurred: %s", pEventType));
- return bOk;
+ return bOk;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Handle a LLDB SBBreakpoint event.
// Type: Method.
// Args: vEvent - (R) An LLDB broadcast event.
@@ -214,67 +207,68 @@ CMICmnLLDBDebuggerHandleEvents::HandleEv
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebuggerHandleEvents::HandleEventSBBreakPoint(const lldb::SBEvent &vEvent)
-{
- bool bOk = MIstatus::success;
-
- const char *pEventType = "";
- const lldb::BreakpointEventType eEvent = lldb::SBBreakpoint::GetBreakpointEventTypeFromEvent(vEvent);
- switch (eEvent)
- {
- case lldb::eBreakpointEventTypeThreadChanged:
- pEventType = "eBreakpointEventTypeThreadChanged";
- break;
- case lldb::eBreakpointEventTypeLocationsRemoved:
- pEventType = "eBreakpointEventTypeLocationsRemoved";
- break;
- case lldb::eBreakpointEventTypeInvalidType:
- pEventType = "eBreakpointEventTypeInvalidType";
- break;
- case lldb::eBreakpointEventTypeLocationsAdded:
- pEventType = "eBreakpointEventTypeLocationsAdded";
- bOk = HandleEventSBBreakpointLocationsAdded(vEvent);
- break;
- case lldb::eBreakpointEventTypeAdded:
- pEventType = "eBreakpointEventTypeAdded";
- bOk = HandleEventSBBreakpointAdded(vEvent);
- break;
- case lldb::eBreakpointEventTypeRemoved:
- pEventType = "eBreakpointEventTypeRemoved";
- bOk = HandleEventSBBreakpointCmn(vEvent);
- break;
- case lldb::eBreakpointEventTypeLocationsResolved:
- pEventType = "eBreakpointEventTypeLocationsResolved";
- bOk = HandleEventSBBreakpointCmn(vEvent);
- break;
- case lldb::eBreakpointEventTypeEnabled:
- pEventType = "eBreakpointEventTypeEnabled";
- bOk = HandleEventSBBreakpointCmn(vEvent);
- break;
- case lldb::eBreakpointEventTypeDisabled:
- pEventType = "eBreakpointEventTypeDisabled";
- bOk = HandleEventSBBreakpointCmn(vEvent);
- break;
- case lldb::eBreakpointEventTypeCommandChanged:
- pEventType = "eBreakpointEventTypeCommandChanged";
- bOk = HandleEventSBBreakpointCmn(vEvent);
- break;
- case lldb::eBreakpointEventTypeConditionChanged:
- pEventType = "eBreakpointEventTypeConditionChanged";
- bOk = HandleEventSBBreakpointCmn(vEvent);
- break;
- case lldb::eBreakpointEventTypeIgnoreChanged:
- pEventType = "eBreakpointEventTypeIgnoreChanged";
- bOk = HandleEventSBBreakpointCmn(vEvent);
- break;
- }
- m_pLog->WriteLog(CMIUtilString::Format("##### An SB Breakpoint event occurred: %s", pEventType));
+bool CMICmnLLDBDebuggerHandleEvents::HandleEventSBBreakPoint(
+ const lldb::SBEvent &vEvent) {
+ bool bOk = MIstatus::success;
+
+ const char *pEventType = "";
+ const lldb::BreakpointEventType eEvent =
+ lldb::SBBreakpoint::GetBreakpointEventTypeFromEvent(vEvent);
+ switch (eEvent) {
+ case lldb::eBreakpointEventTypeThreadChanged:
+ pEventType = "eBreakpointEventTypeThreadChanged";
+ break;
+ case lldb::eBreakpointEventTypeLocationsRemoved:
+ pEventType = "eBreakpointEventTypeLocationsRemoved";
+ break;
+ case lldb::eBreakpointEventTypeInvalidType:
+ pEventType = "eBreakpointEventTypeInvalidType";
+ break;
+ case lldb::eBreakpointEventTypeLocationsAdded:
+ pEventType = "eBreakpointEventTypeLocationsAdded";
+ bOk = HandleEventSBBreakpointLocationsAdded(vEvent);
+ break;
+ case lldb::eBreakpointEventTypeAdded:
+ pEventType = "eBreakpointEventTypeAdded";
+ bOk = HandleEventSBBreakpointAdded(vEvent);
+ break;
+ case lldb::eBreakpointEventTypeRemoved:
+ pEventType = "eBreakpointEventTypeRemoved";
+ bOk = HandleEventSBBreakpointCmn(vEvent);
+ break;
+ case lldb::eBreakpointEventTypeLocationsResolved:
+ pEventType = "eBreakpointEventTypeLocationsResolved";
+ bOk = HandleEventSBBreakpointCmn(vEvent);
+ break;
+ case lldb::eBreakpointEventTypeEnabled:
+ pEventType = "eBreakpointEventTypeEnabled";
+ bOk = HandleEventSBBreakpointCmn(vEvent);
+ break;
+ case lldb::eBreakpointEventTypeDisabled:
+ pEventType = "eBreakpointEventTypeDisabled";
+ bOk = HandleEventSBBreakpointCmn(vEvent);
+ break;
+ case lldb::eBreakpointEventTypeCommandChanged:
+ pEventType = "eBreakpointEventTypeCommandChanged";
+ bOk = HandleEventSBBreakpointCmn(vEvent);
+ break;
+ case lldb::eBreakpointEventTypeConditionChanged:
+ pEventType = "eBreakpointEventTypeConditionChanged";
+ bOk = HandleEventSBBreakpointCmn(vEvent);
+ break;
+ case lldb::eBreakpointEventTypeIgnoreChanged:
+ pEventType = "eBreakpointEventTypeIgnoreChanged";
+ bOk = HandleEventSBBreakpointCmn(vEvent);
+ break;
+ }
+ m_pLog->WriteLog(CMIUtilString::Format(
+ "##### An SB Breakpoint event occurred: %s", pEventType));
- return bOk;
+ return bOk;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Handle a LLDB SBBreakpoint event.
// Type: Method.
// Args: vEvent - (R) An LLDB broadcast event.
@@ -282,21 +276,24 @@ CMICmnLLDBDebuggerHandleEvents::HandleEv
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebuggerHandleEvents::HandleEventSBBreakpointLocationsAdded(const lldb::SBEvent &vEvent)
-{
- const MIuint nLoc = lldb::SBBreakpoint::GetNumBreakpointLocationsFromEvent(vEvent);
- if (nLoc == 0)
- return MIstatus::success;
+bool CMICmnLLDBDebuggerHandleEvents::HandleEventSBBreakpointLocationsAdded(
+ const lldb::SBEvent &vEvent) {
+ const MIuint nLoc =
+ lldb::SBBreakpoint::GetNumBreakpointLocationsFromEvent(vEvent);
+ if (nLoc == 0)
+ return MIstatus::success;
- lldb::SBBreakpoint brkPt = lldb::SBBreakpoint::GetBreakpointFromEvent(vEvent);
- const CMIUtilString plural((nLoc == 1) ? "" : "s");
- const CMIUtilString msg(CMIUtilString::Format("%d location%s added to breakpoint %d", nLoc, plural.c_str(), brkPt.GetID()));
+ lldb::SBBreakpoint brkPt = lldb::SBBreakpoint::GetBreakpointFromEvent(vEvent);
+ const CMIUtilString plural((nLoc == 1) ? "" : "s");
+ const CMIUtilString msg(
+ CMIUtilString::Format("%d location%s added to breakpoint %d", nLoc,
+ plural.c_str(), brkPt.GetID()));
- return TextToStdout(msg);
+ return TextToStdout(msg);
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Handle a LLDB SBBreakpoint event.
// Type: Method.
// Args: vEvent - (R) An LLDB broadcast event.
@@ -304,71 +301,82 @@ CMICmnLLDBDebuggerHandleEvents::HandleEv
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebuggerHandleEvents::HandleEventSBBreakpointCmn(const lldb::SBEvent &vEvent)
-{
- lldb::SBBreakpoint brkPt = lldb::SBBreakpoint::GetBreakpointFromEvent(vEvent);
- if (!brkPt.IsValid())
- return MIstatus::success;
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(CMICmnLLDBDebugSessionInfo::Instance());
- CMICmnLLDBDebugSessionInfo::SBrkPtInfo sBrkPtInfo;
- if (!rSessionInfo.GetBrkPtInfo(brkPt, sBrkPtInfo))
- {
- SetErrorDescription(
- CMIUtilString::Format(MIRSRC(IDS_LLDBOUTOFBAND_ERR_BRKPT_INFO_GET), "HandleEventSBBreakpointCmn()", brkPt.GetID()));
- return MIstatus::failure;
- }
-
- // CODETAG_LLDB_BREAKPOINT_CREATION
- // This is in a worker thread
- // Add more breakpoint information or overwrite existing information
- CMICmnLLDBDebugSessionInfo::SBrkPtInfo sBrkPtInfoRec;
- if (!rSessionInfo.RecordBrkPtInfoGet(brkPt.GetID(), sBrkPtInfoRec))
- {
- SetErrorDescription(
- CMIUtilString::Format(MIRSRC(IDS_LLDBOUTOFBAND_ERR_BRKPT_NOTFOUND), "HandleEventSBBreakpointCmn()", brkPt.GetID()));
- return MIstatus::failure;
- }
- sBrkPtInfo.m_bDisp = sBrkPtInfoRec.m_bDisp;
- sBrkPtInfo.m_bEnabled = brkPt.IsEnabled();
- sBrkPtInfo.m_bHaveArgOptionThreadGrp = false;
- sBrkPtInfo.m_strOptThrdGrp = "";
- sBrkPtInfo.m_nTimes = brkPt.GetHitCount();
- sBrkPtInfo.m_strOrigLoc = sBrkPtInfoRec.m_strOrigLoc;
- sBrkPtInfo.m_nIgnore = sBrkPtInfoRec.m_nIgnore;
- sBrkPtInfo.m_bPending = sBrkPtInfoRec.m_bPending;
- sBrkPtInfo.m_bCondition = sBrkPtInfoRec.m_bCondition;
- sBrkPtInfo.m_strCondition = sBrkPtInfoRec.m_strCondition;
- sBrkPtInfo.m_bBrkPtThreadId = sBrkPtInfoRec.m_bBrkPtThreadId;
- sBrkPtInfo.m_nBrkPtThreadId = sBrkPtInfoRec.m_nBrkPtThreadId;
-
- // MI print "=breakpoint-modified,bkpt={number=\"%d\",type=\"breakpoint\",disp=\"%s\",enabled=\"%c\",addr=\"0x%016" PRIx64 "\",
- // func=\"%s\",file=\"%s\",fullname=\"%s/%s\",line=\"%d\",times=\"%d\",original-location=\"%s\"}"
- CMICmnMIValueTuple miValueTuple;
- if (!rSessionInfo.MIResponseFormBrkPtInfo(sBrkPtInfo, miValueTuple))
- {
- SetErrorDescription(CMIUtilString::Format(MIRSRC(IDS_LLDBOUTOFBAND_ERR_FORM_MI_RESPONSE), "HandleEventSBBreakpointCmn()"));
- return MIstatus::failure;
- }
+bool CMICmnLLDBDebuggerHandleEvents::HandleEventSBBreakpointCmn(
+ const lldb::SBEvent &vEvent) {
+ lldb::SBBreakpoint brkPt = lldb::SBBreakpoint::GetBreakpointFromEvent(vEvent);
+ if (!brkPt.IsValid())
+ return MIstatus::success;
- const CMICmnMIValueResult miValueResultC("bkpt", miValueTuple);
- const CMICmnMIOutOfBandRecord miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_BreakPointModified, miValueResultC);
- bool bOk = MiOutOfBandRecordToStdout(miOutOfBandRecord);
- bOk = bOk && CMICmnStreamStdout::WritePrompt();
+ CMICmnLLDBDebugSessionInfo &rSessionInfo(
+ CMICmnLLDBDebugSessionInfo::Instance());
+ CMICmnLLDBDebugSessionInfo::SBrkPtInfo sBrkPtInfo;
+ if (!rSessionInfo.GetBrkPtInfo(brkPt, sBrkPtInfo)) {
+ SetErrorDescription(
+ CMIUtilString::Format(MIRSRC(IDS_LLDBOUTOFBAND_ERR_BRKPT_INFO_GET),
+ "HandleEventSBBreakpointCmn()", brkPt.GetID()));
+ return MIstatus::failure;
+ }
+
+ // CODETAG_LLDB_BREAKPOINT_CREATION
+ // This is in a worker thread
+ // Add more breakpoint information or overwrite existing information
+ CMICmnLLDBDebugSessionInfo::SBrkPtInfo sBrkPtInfoRec;
+ if (!rSessionInfo.RecordBrkPtInfoGet(brkPt.GetID(), sBrkPtInfoRec)) {
+ SetErrorDescription(
+ CMIUtilString::Format(MIRSRC(IDS_LLDBOUTOFBAND_ERR_BRKPT_NOTFOUND),
+ "HandleEventSBBreakpointCmn()", brkPt.GetID()));
+ return MIstatus::failure;
+ }
+ sBrkPtInfo.m_bDisp = sBrkPtInfoRec.m_bDisp;
+ sBrkPtInfo.m_bEnabled = brkPt.IsEnabled();
+ sBrkPtInfo.m_bHaveArgOptionThreadGrp = false;
+ sBrkPtInfo.m_strOptThrdGrp = "";
+ sBrkPtInfo.m_nTimes = brkPt.GetHitCount();
+ sBrkPtInfo.m_strOrigLoc = sBrkPtInfoRec.m_strOrigLoc;
+ sBrkPtInfo.m_nIgnore = sBrkPtInfoRec.m_nIgnore;
+ sBrkPtInfo.m_bPending = sBrkPtInfoRec.m_bPending;
+ sBrkPtInfo.m_bCondition = sBrkPtInfoRec.m_bCondition;
+ sBrkPtInfo.m_strCondition = sBrkPtInfoRec.m_strCondition;
+ sBrkPtInfo.m_bBrkPtThreadId = sBrkPtInfoRec.m_bBrkPtThreadId;
+ sBrkPtInfo.m_nBrkPtThreadId = sBrkPtInfoRec.m_nBrkPtThreadId;
+
+ // MI print
+ // "=breakpoint-modified,bkpt={number=\"%d\",type=\"breakpoint\",disp=\"%s\",enabled=\"%c\",addr=\"0x%016"
+ // PRIx64 "\",
+ // func=\"%s\",file=\"%s\",fullname=\"%s/%s\",line=\"%d\",times=\"%d\",original-location=\"%s\"}"
+ CMICmnMIValueTuple miValueTuple;
+ if (!rSessionInfo.MIResponseFormBrkPtInfo(sBrkPtInfo, miValueTuple)) {
+ SetErrorDescription(
+ CMIUtilString::Format(MIRSRC(IDS_LLDBOUTOFBAND_ERR_FORM_MI_RESPONSE),
+ "HandleEventSBBreakpointCmn()"));
+ return MIstatus::failure;
+ }
+
+ const CMICmnMIValueResult miValueResultC("bkpt", miValueTuple);
+ const CMICmnMIOutOfBandRecord miOutOfBandRecord(
+ CMICmnMIOutOfBandRecord::eOutOfBand_BreakPointModified, miValueResultC);
+ bool bOk = MiOutOfBandRecordToStdout(miOutOfBandRecord);
+ bOk = bOk && CMICmnStreamStdout::WritePrompt();
- return bOk;
+ return bOk;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Handle a LLDB SBBreakpoint added event.
// Add more breakpoint information or overwrite existing information.
-// Normally a break point session info objects exists by now when an MI command
-// was issued to insert a break so the retrieval would normally always succeed
-// however should a user type "b main" into a console then LLDB will create a
-// breakpoint directly, hence no MI command, hence no previous record of the
-// breakpoint so RecordBrkPtInfoGet() will fail. We still get the event though
-// so need to create a breakpoint info object here and send appropriate MI
+// Normally a break point session info objects exists by now when an MI
+// command
+// was issued to insert a break so the retrieval would normally always
+// succeed
+// however should a user type "b main" into a console then LLDB will
+// create a
+// breakpoint directly, hence no MI command, hence no previous record
+// of the
+// breakpoint so RecordBrkPtInfoGet() will fail. We still get the event
+// though
+// so need to create a breakpoint info object here and send appropriate
+// MI
// response.
// Type: Method.
// Args: vEvent - (R) An LLDB broadcast event.
@@ -376,104 +384,110 @@ CMICmnLLDBDebuggerHandleEvents::HandleEv
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebuggerHandleEvents::HandleEventSBBreakpointAdded(const lldb::SBEvent &vEvent)
-{
- lldb::SBBreakpoint brkPt = lldb::SBBreakpoint::GetBreakpointFromEvent(vEvent);
- if (!brkPt.IsValid())
- return MIstatus::success;
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(CMICmnLLDBDebugSessionInfo::Instance());
- CMICmnLLDBDebugSessionInfo::SBrkPtInfo sBrkPtInfo;
- if (!rSessionInfo.GetBrkPtInfo(brkPt, sBrkPtInfo))
- {
- SetErrorDescription(
- CMIUtilString::Format(MIRSRC(IDS_LLDBOUTOFBAND_ERR_BRKPT_INFO_GET), "HandleEventSBBreakpointAdded()", brkPt.GetID()));
- return MIstatus::failure;
- }
-
- // CODETAG_LLDB_BREAKPOINT_CREATION
- // This is in a worker thread
- CMICmnLLDBDebugSessionInfo::SBrkPtInfo sBrkPtInfoRec;
- const bool bBrkPtExistAlready = rSessionInfo.RecordBrkPtInfoGet(brkPt.GetID(), sBrkPtInfoRec);
- if (bBrkPtExistAlready)
- {
- // Update breakpoint information object
- sBrkPtInfo.m_bDisp = sBrkPtInfoRec.m_bDisp;
- sBrkPtInfo.m_bEnabled = brkPt.IsEnabled();
- sBrkPtInfo.m_bHaveArgOptionThreadGrp = false;
- sBrkPtInfo.m_strOptThrdGrp.clear();
- sBrkPtInfo.m_nTimes = brkPt.GetHitCount();
- sBrkPtInfo.m_strOrigLoc = sBrkPtInfoRec.m_strOrigLoc;
- sBrkPtInfo.m_nIgnore = sBrkPtInfoRec.m_nIgnore;
- sBrkPtInfo.m_bPending = sBrkPtInfoRec.m_bPending;
- sBrkPtInfo.m_bCondition = sBrkPtInfoRec.m_bCondition;
- sBrkPtInfo.m_strCondition = sBrkPtInfoRec.m_strCondition;
- sBrkPtInfo.m_bBrkPtThreadId = sBrkPtInfoRec.m_bBrkPtThreadId;
- sBrkPtInfo.m_nBrkPtThreadId = sBrkPtInfoRec.m_nBrkPtThreadId;
- }
- else
- {
- // Create a breakpoint information object
- sBrkPtInfo.m_bDisp = brkPt.IsOneShot();
- sBrkPtInfo.m_bEnabled = brkPt.IsEnabled();
- sBrkPtInfo.m_bHaveArgOptionThreadGrp = false;
- sBrkPtInfo.m_strOptThrdGrp.clear();
- sBrkPtInfo.m_strOrigLoc = CMIUtilString::Format("%s:%d", sBrkPtInfo.m_fileName.c_str(), sBrkPtInfo.m_nLine);
- sBrkPtInfo.m_nIgnore = brkPt.GetIgnoreCount();
- sBrkPtInfo.m_bPending = false;
- const char *pStrCondition = brkPt.GetCondition();
- sBrkPtInfo.m_bCondition = (pStrCondition != nullptr) ? true : false;
- sBrkPtInfo.m_strCondition = (pStrCondition != nullptr) ? pStrCondition : "??";
- sBrkPtInfo.m_bBrkPtThreadId = (brkPt.GetThreadID() != 0) ? true : false;
- sBrkPtInfo.m_nBrkPtThreadId = brkPt.GetThreadID();
- }
+bool CMICmnLLDBDebuggerHandleEvents::HandleEventSBBreakpointAdded(
+ const lldb::SBEvent &vEvent) {
+ lldb::SBBreakpoint brkPt = lldb::SBBreakpoint::GetBreakpointFromEvent(vEvent);
+ if (!brkPt.IsValid())
+ return MIstatus::success;
- CMICmnMIValueTuple miValueTuple;
- if (!rSessionInfo.MIResponseFormBrkPtInfo(sBrkPtInfo, miValueTuple))
- {
- SetErrorDescription(CMIUtilString::Format(MIRSRC(IDS_LLDBOUTOFBAND_ERR_FORM_MI_RESPONSE), "HandleEventSBBreakpointAdded()"));
- return MIstatus::failure;
- }
+ CMICmnLLDBDebugSessionInfo &rSessionInfo(
+ CMICmnLLDBDebugSessionInfo::Instance());
+ CMICmnLLDBDebugSessionInfo::SBrkPtInfo sBrkPtInfo;
+ if (!rSessionInfo.GetBrkPtInfo(brkPt, sBrkPtInfo)) {
+ SetErrorDescription(
+ CMIUtilString::Format(MIRSRC(IDS_LLDBOUTOFBAND_ERR_BRKPT_INFO_GET),
+ "HandleEventSBBreakpointAdded()", brkPt.GetID()));
+ return MIstatus::failure;
+ }
+
+ // CODETAG_LLDB_BREAKPOINT_CREATION
+ // This is in a worker thread
+ CMICmnLLDBDebugSessionInfo::SBrkPtInfo sBrkPtInfoRec;
+ const bool bBrkPtExistAlready =
+ rSessionInfo.RecordBrkPtInfoGet(brkPt.GetID(), sBrkPtInfoRec);
+ if (bBrkPtExistAlready) {
+ // Update breakpoint information object
+ sBrkPtInfo.m_bDisp = sBrkPtInfoRec.m_bDisp;
+ sBrkPtInfo.m_bEnabled = brkPt.IsEnabled();
+ sBrkPtInfo.m_bHaveArgOptionThreadGrp = false;
+ sBrkPtInfo.m_strOptThrdGrp.clear();
+ sBrkPtInfo.m_nTimes = brkPt.GetHitCount();
+ sBrkPtInfo.m_strOrigLoc = sBrkPtInfoRec.m_strOrigLoc;
+ sBrkPtInfo.m_nIgnore = sBrkPtInfoRec.m_nIgnore;
+ sBrkPtInfo.m_bPending = sBrkPtInfoRec.m_bPending;
+ sBrkPtInfo.m_bCondition = sBrkPtInfoRec.m_bCondition;
+ sBrkPtInfo.m_strCondition = sBrkPtInfoRec.m_strCondition;
+ sBrkPtInfo.m_bBrkPtThreadId = sBrkPtInfoRec.m_bBrkPtThreadId;
+ sBrkPtInfo.m_nBrkPtThreadId = sBrkPtInfoRec.m_nBrkPtThreadId;
+ } else {
+ // Create a breakpoint information object
+ sBrkPtInfo.m_bDisp = brkPt.IsOneShot();
+ sBrkPtInfo.m_bEnabled = brkPt.IsEnabled();
+ sBrkPtInfo.m_bHaveArgOptionThreadGrp = false;
+ sBrkPtInfo.m_strOptThrdGrp.clear();
+ sBrkPtInfo.m_strOrigLoc = CMIUtilString::Format(
+ "%s:%d", sBrkPtInfo.m_fileName.c_str(), sBrkPtInfo.m_nLine);
+ sBrkPtInfo.m_nIgnore = brkPt.GetIgnoreCount();
+ sBrkPtInfo.m_bPending = false;
+ const char *pStrCondition = brkPt.GetCondition();
+ sBrkPtInfo.m_bCondition = (pStrCondition != nullptr) ? true : false;
+ sBrkPtInfo.m_strCondition =
+ (pStrCondition != nullptr) ? pStrCondition : "??";
+ sBrkPtInfo.m_bBrkPtThreadId = (brkPt.GetThreadID() != 0) ? true : false;
+ sBrkPtInfo.m_nBrkPtThreadId = brkPt.GetThreadID();
+ }
+
+ CMICmnMIValueTuple miValueTuple;
+ if (!rSessionInfo.MIResponseFormBrkPtInfo(sBrkPtInfo, miValueTuple)) {
+ SetErrorDescription(
+ CMIUtilString::Format(MIRSRC(IDS_LLDBOUTOFBAND_ERR_FORM_MI_RESPONSE),
+ "HandleEventSBBreakpointAdded()"));
+ return MIstatus::failure;
+ }
- bool bOk = MIstatus::success;
- if (bBrkPtExistAlready)
- {
- // MI print
- // "=breakpoint-modified,bkpt={number=\"%d\",type=\"breakpoint\",disp=\"%s\",enabled=\"%c\",addr=\"0x%016" PRIx64 "\",func=\"%s\",file=\"%s\",fullname=\"%s/%s\",line=\"%d\",times=\"%d\",original-location=\"%s\"}"
- const CMICmnMIValueResult miValueResult("bkpt", miValueTuple);
- const CMICmnMIOutOfBandRecord miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_BreakPointModified, miValueResult);
- bOk = MiOutOfBandRecordToStdout(miOutOfBandRecord);
- bOk = bOk && CMICmnStreamStdout::WritePrompt();
+ bool bOk = MIstatus::success;
+ if (bBrkPtExistAlready) {
+ // MI print
+ // "=breakpoint-modified,bkpt={number=\"%d\",type=\"breakpoint\",disp=\"%s\",enabled=\"%c\",addr=\"0x%016"
+ // PRIx64
+ // "\",func=\"%s\",file=\"%s\",fullname=\"%s/%s\",line=\"%d\",times=\"%d\",original-location=\"%s\"}"
+ const CMICmnMIValueResult miValueResult("bkpt", miValueTuple);
+ const CMICmnMIOutOfBandRecord miOutOfBandRecord(
+ CMICmnMIOutOfBandRecord::eOutOfBand_BreakPointModified, miValueResult);
+ bOk = MiOutOfBandRecordToStdout(miOutOfBandRecord);
+ bOk = bOk && CMICmnStreamStdout::WritePrompt();
+ } else {
+ // CODETAG_LLDB_BRKPT_ID_MAX
+ if (brkPt.GetID() > (lldb::break_id_t)rSessionInfo.m_nBrkPointCntMax) {
+ SetErrorDescription(CMIUtilString::Format(
+ MIRSRC(IDS_CMD_ERR_BRKPT_CNT_EXCEEDED),
+ "HandleEventSBBreakpointAdded()", rSessionInfo.m_nBrkPointCntMax,
+ sBrkPtInfo.m_id));
+ return MIstatus::failure;
+ }
+ if (!rSessionInfo.RecordBrkPtInfo(brkPt.GetID(), sBrkPtInfo)) {
+ SetErrorDescription(CMIUtilString::Format(
+ MIRSRC(IDS_LLDBOUTOFBAND_ERR_BRKPT_INFO_SET),
+ "HandleEventSBBreakpointAdded()", sBrkPtInfo.m_id));
+ return MIstatus::failure;
}
- else
- {
- // CODETAG_LLDB_BRKPT_ID_MAX
- if (brkPt.GetID() > (lldb::break_id_t)rSessionInfo.m_nBrkPointCntMax)
- {
- SetErrorDescription(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_BRKPT_CNT_EXCEEDED), "HandleEventSBBreakpointAdded()",
- rSessionInfo.m_nBrkPointCntMax, sBrkPtInfo.m_id));
- return MIstatus::failure;
- }
- if (!rSessionInfo.RecordBrkPtInfo(brkPt.GetID(), sBrkPtInfo))
- {
- SetErrorDescription(
- CMIUtilString::Format(MIRSRC(IDS_LLDBOUTOFBAND_ERR_BRKPT_INFO_SET), "HandleEventSBBreakpointAdded()", sBrkPtInfo.m_id));
- return MIstatus::failure;
- }
- // MI print
- // "=breakpoint-created,bkpt={number=\"%d\",type=\"breakpoint\",disp=\"%s\",enabled=\"%c\",addr=\"0x%016" PRIx64 "\",func=\"%s\",file=\"%s\",fullname=\"%s/%s\",line=\"%d\",times=\"%d\",original-location=\"%s\"}"
- const CMICmnMIValueResult miValueResult("bkpt", miValueTuple);
- const CMICmnMIOutOfBandRecord miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_BreakPointCreated, miValueResult);
- bOk = MiOutOfBandRecordToStdout(miOutOfBandRecord);
- bOk = bOk && CMICmnStreamStdout::WritePrompt();
- }
+ // MI print
+ // "=breakpoint-created,bkpt={number=\"%d\",type=\"breakpoint\",disp=\"%s\",enabled=\"%c\",addr=\"0x%016"
+ // PRIx64
+ // "\",func=\"%s\",file=\"%s\",fullname=\"%s/%s\",line=\"%d\",times=\"%d\",original-location=\"%s\"}"
+ const CMICmnMIValueResult miValueResult("bkpt", miValueTuple);
+ const CMICmnMIOutOfBandRecord miOutOfBandRecord(
+ CMICmnMIOutOfBandRecord::eOutOfBand_BreakPointCreated, miValueResult);
+ bOk = MiOutOfBandRecordToStdout(miOutOfBandRecord);
+ bOk = bOk && CMICmnStreamStdout::WritePrompt();
+ }
- return bOk;
+ return bOk;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Handle a LLDB SBThread event.
// Type: Method.
// Args: vEvent - (R) An LLDB broadcast event.
@@ -481,47 +495,48 @@ CMICmnLLDBDebuggerHandleEvents::HandleEv
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebuggerHandleEvents::HandleEventSBThread(const lldb::SBEvent &vEvent)
-{
- if (!ChkForStateChanges())
- return MIstatus::failure;
+bool CMICmnLLDBDebuggerHandleEvents::HandleEventSBThread(
+ const lldb::SBEvent &vEvent) {
+ if (!ChkForStateChanges())
+ return MIstatus::failure;
+
+ bool bOk = MIstatus::success;
+ const char *pEventType = "";
+ const MIuint nEventType = vEvent.GetType();
+ switch (nEventType) {
+ case lldb::SBThread::eBroadcastBitStackChanged:
+ pEventType = "eBroadcastBitStackChanged";
+ bOk = HandleEventSBThreadBitStackChanged(vEvent);
+ break;
+ case lldb::SBThread::eBroadcastBitThreadSuspended:
+ pEventType = "eBroadcastBitThreadSuspended";
+ bOk = HandleEventSBThreadSuspended(vEvent);
+ break;
+ case lldb::SBThread::eBroadcastBitThreadResumed:
+ pEventType = "eBroadcastBitThreadResumed";
+ break;
+ case lldb::SBThread::eBroadcastBitSelectedFrameChanged:
+ pEventType = "eBroadcastBitSelectedFrameChanged";
+ break;
+ case lldb::SBThread::eBroadcastBitThreadSelected:
+ pEventType = "eBroadcastBitThreadSelected";
+ break;
+ default: {
+ const CMIUtilString msg(
+ CMIUtilString::Format(MIRSRC(IDS_LLDBOUTOFBAND_ERR_UNKNOWN_EVENT),
+ "SBThread", (MIuint)nEventType));
+ SetErrorDescription(msg);
+ return MIstatus::failure;
+ }
+ }
+ m_pLog->WriteLog(CMIUtilString::Format("##### An SBThread event occurred: %s",
+ pEventType));
- bool bOk = MIstatus::success;
- const char *pEventType = "";
- const MIuint nEventType = vEvent.GetType();
- switch (nEventType)
- {
- case lldb::SBThread::eBroadcastBitStackChanged:
- pEventType = "eBroadcastBitStackChanged";
- bOk = HandleEventSBThreadBitStackChanged(vEvent);
- break;
- case lldb::SBThread::eBroadcastBitThreadSuspended:
- pEventType = "eBroadcastBitThreadSuspended";
- bOk = HandleEventSBThreadSuspended(vEvent);
- break;
- case lldb::SBThread::eBroadcastBitThreadResumed:
- pEventType = "eBroadcastBitThreadResumed";
- break;
- case lldb::SBThread::eBroadcastBitSelectedFrameChanged:
- pEventType = "eBroadcastBitSelectedFrameChanged";
- break;
- case lldb::SBThread::eBroadcastBitThreadSelected:
- pEventType = "eBroadcastBitThreadSelected";
- break;
- default:
- {
- const CMIUtilString msg(CMIUtilString::Format(MIRSRC(IDS_LLDBOUTOFBAND_ERR_UNKNOWN_EVENT), "SBThread", (MIuint)nEventType));
- SetErrorDescription(msg);
- return MIstatus::failure;
- }
- }
- m_pLog->WriteLog(CMIUtilString::Format("##### An SBThread event occurred: %s", pEventType));
-
- return bOk;
+ return bOk;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Handle a LLDB SBThread event.
// Type: Method.
// Args: vEvent - (R) An LLDB broadcast event.
@@ -529,31 +544,33 @@ CMICmnLLDBDebuggerHandleEvents::HandleEv
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebuggerHandleEvents::HandleEventSBThreadSuspended(const lldb::SBEvent &vEvent)
-{
- lldb::SBThread thread = lldb::SBThread::GetThreadFromEvent(vEvent);
- if (!thread.IsValid())
- return MIstatus::success;
+bool CMICmnLLDBDebuggerHandleEvents::HandleEventSBThreadSuspended(
+ const lldb::SBEvent &vEvent) {
+ lldb::SBThread thread = lldb::SBThread::GetThreadFromEvent(vEvent);
+ if (!thread.IsValid())
+ return MIstatus::success;
- const lldb::StopReason eStopReason = thread.GetStopReason();
- if (eStopReason != lldb::eStopReasonSignal)
- return MIstatus::success;
-
- // MI print "@thread=%d,signal=%lld"
- const MIuint64 nId = thread.GetStopReasonDataAtIndex(0);
- const CMIUtilString strThread(CMIUtilString::Format("%d", thread.GetThreadID()));
- const CMICmnMIValueConst miValueConst(strThread);
- const CMICmnMIValueResult miValueResult("thread", miValueConst);
- CMICmnMIOutOfBandRecord miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_Thread, miValueResult);
- const CMIUtilString strSignal(CMIUtilString::Format("%lld", nId));
- const CMICmnMIValueConst miValueConst2(strSignal);
- const CMICmnMIValueResult miValueResult2("signal", miValueConst2);
- miOutOfBandRecord.Add(miValueResult2);
- return MiOutOfBandRecordToStdout(miOutOfBandRecord);
+ const lldb::StopReason eStopReason = thread.GetStopReason();
+ if (eStopReason != lldb::eStopReasonSignal)
+ return MIstatus::success;
+
+ // MI print "@thread=%d,signal=%lld"
+ const MIuint64 nId = thread.GetStopReasonDataAtIndex(0);
+ const CMIUtilString strThread(
+ CMIUtilString::Format("%d", thread.GetThreadID()));
+ const CMICmnMIValueConst miValueConst(strThread);
+ const CMICmnMIValueResult miValueResult("thread", miValueConst);
+ CMICmnMIOutOfBandRecord miOutOfBandRecord(
+ CMICmnMIOutOfBandRecord::eOutOfBand_Thread, miValueResult);
+ const CMIUtilString strSignal(CMIUtilString::Format("%lld", nId));
+ const CMICmnMIValueConst miValueConst2(strSignal);
+ const CMICmnMIValueResult miValueResult2("signal", miValueConst2);
+ miOutOfBandRecord.Add(miValueResult2);
+ return MiOutOfBandRecordToStdout(miOutOfBandRecord);
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Handle a LLDB SBThread event.
// Type: Method.
// Args: vEvent - (R) An LLDB broadcast event.
@@ -561,19 +578,19 @@ CMICmnLLDBDebuggerHandleEvents::HandleEv
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebuggerHandleEvents::HandleEventSBThreadBitStackChanged(const lldb::SBEvent &vEvent)
-{
- lldb::SBThread thread = lldb::SBThread::GetThreadFromEvent(vEvent);
- if (!thread.IsValid())
- return MIstatus::success;
+bool CMICmnLLDBDebuggerHandleEvents::HandleEventSBThreadBitStackChanged(
+ const lldb::SBEvent &vEvent) {
+ lldb::SBThread thread = lldb::SBThread::GetThreadFromEvent(vEvent);
+ if (!thread.IsValid())
+ return MIstatus::success;
- lldb::SBStream streamOut;
- const bool bOk = thread.GetStatus(streamOut);
- return bOk && TextToStdout(streamOut.GetData());
+ lldb::SBStream streamOut;
+ const bool bOk = thread.GetStatus(streamOut);
+ return bOk && TextToStdout(streamOut.GetData());
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Handle a LLDB SBTarget event.
// Type: Method.
// Args: vEvent - (R) An LLDB broadcast event.
@@ -581,172 +598,186 @@ CMICmnLLDBDebuggerHandleEvents::HandleEv
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebuggerHandleEvents::HandleEventSBTarget(const lldb::SBEvent &vEvent)
-{
- if (!ChkForStateChanges())
- return MIstatus::failure;
-
- bool bOk = MIstatus::success;
- const char *pEventType = "";
- const MIuint nEventType = vEvent.GetType();
- switch (nEventType)
- {
- case lldb::SBTarget::eBroadcastBitBreakpointChanged:
- pEventType = "eBroadcastBitBreakpointChanged";
- break;
- case lldb::SBTarget::eBroadcastBitModulesLoaded:
- pEventType = "eBroadcastBitModulesLoaded";
- bOk = HandleTargetEventBroadcastBitModulesLoaded(vEvent);
- break;
- case lldb::SBTarget::eBroadcastBitModulesUnloaded:
- pEventType = "eBroadcastBitModulesUnloaded";
- bOk = HandleTargetEventBroadcastBitModulesUnloaded(vEvent);
- break;
- case lldb::SBTarget::eBroadcastBitWatchpointChanged:
- pEventType = "eBroadcastBitWatchpointChanged";
- break;
- case lldb::SBTarget::eBroadcastBitSymbolsLoaded:
- pEventType = "eBroadcastBitSymbolsLoaded";
- break;
- default:
- {
- const CMIUtilString msg(CMIUtilString::Format(MIRSRC(IDS_LLDBOUTOFBAND_ERR_UNKNOWN_EVENT), "SBTarget", (MIuint)nEventType));
- SetErrorDescription(msg);
- return MIstatus::failure;
- }
- }
- m_pLog->WriteLog(CMIUtilString::Format("##### An SBTarget event occurred: %s", pEventType));
-
- return bOk;
-}
-
-//++ ------------------------------------------------------------------------------------
-// Details: Print to stdout "=library-loaded,id=\"%s\",target-name=\"%s\",host-name=\"%s\",symbols-loaded="%d"[,symbols-path=\"%s\"],loaded_addr=\"0x%016" PRIx64"\""
+bool CMICmnLLDBDebuggerHandleEvents::HandleEventSBTarget(
+ const lldb::SBEvent &vEvent) {
+ if (!ChkForStateChanges())
+ return MIstatus::failure;
+
+ bool bOk = MIstatus::success;
+ const char *pEventType = "";
+ const MIuint nEventType = vEvent.GetType();
+ switch (nEventType) {
+ case lldb::SBTarget::eBroadcastBitBreakpointChanged:
+ pEventType = "eBroadcastBitBreakpointChanged";
+ break;
+ case lldb::SBTarget::eBroadcastBitModulesLoaded:
+ pEventType = "eBroadcastBitModulesLoaded";
+ bOk = HandleTargetEventBroadcastBitModulesLoaded(vEvent);
+ break;
+ case lldb::SBTarget::eBroadcastBitModulesUnloaded:
+ pEventType = "eBroadcastBitModulesUnloaded";
+ bOk = HandleTargetEventBroadcastBitModulesUnloaded(vEvent);
+ break;
+ case lldb::SBTarget::eBroadcastBitWatchpointChanged:
+ pEventType = "eBroadcastBitWatchpointChanged";
+ break;
+ case lldb::SBTarget::eBroadcastBitSymbolsLoaded:
+ pEventType = "eBroadcastBitSymbolsLoaded";
+ break;
+ default: {
+ const CMIUtilString msg(
+ CMIUtilString::Format(MIRSRC(IDS_LLDBOUTOFBAND_ERR_UNKNOWN_EVENT),
+ "SBTarget", (MIuint)nEventType));
+ SetErrorDescription(msg);
+ return MIstatus::failure;
+ }
+ }
+ m_pLog->WriteLog(CMIUtilString::Format("##### An SBTarget event occurred: %s",
+ pEventType));
+
+ return bOk;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: Print to stdout
+// "=library-loaded,id=\"%s\",target-name=\"%s\",host-name=\"%s\",symbols-loaded="%d"[,symbols-path=\"%s\"],loaded_addr=\"0x%016"
+// PRIx64"\""
// Type: Method.
// Args: None.
// Return: MIstatus::success - Function succeeded.
// MIstatus::failure - Function failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebuggerHandleEvents::HandleTargetEventBroadcastBitModulesLoaded(const lldb::SBEvent &vEvent)
-{
- bool bOk = MIstatus::failure;
- const MIuint nSize = lldb::SBTarget::GetNumModulesFromEvent(vEvent);
- for (MIuint nIndex = 0; nIndex < nSize; ++nIndex)
- {
- const lldb::SBModule sbModule = lldb::SBTarget::GetModuleAtIndexFromEvent(nIndex, vEvent);
- CMICmnMIOutOfBandRecord miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_TargetModuleLoaded);
- const bool bWithExtraFields = true;
- bOk = MiHelpGetModuleInfo(sbModule, bWithExtraFields, miOutOfBandRecord);
- bOk = bOk && MiOutOfBandRecordToStdout(miOutOfBandRecord);
- if (!bOk)
- break;
- }
+bool CMICmnLLDBDebuggerHandleEvents::HandleTargetEventBroadcastBitModulesLoaded(
+ const lldb::SBEvent &vEvent) {
+ bool bOk = MIstatus::failure;
+ const MIuint nSize = lldb::SBTarget::GetNumModulesFromEvent(vEvent);
+ for (MIuint nIndex = 0; nIndex < nSize; ++nIndex) {
+ const lldb::SBModule sbModule =
+ lldb::SBTarget::GetModuleAtIndexFromEvent(nIndex, vEvent);
+ CMICmnMIOutOfBandRecord miOutOfBandRecord(
+ CMICmnMIOutOfBandRecord::eOutOfBand_TargetModuleLoaded);
+ const bool bWithExtraFields = true;
+ bOk = MiHelpGetModuleInfo(sbModule, bWithExtraFields, miOutOfBandRecord);
+ bOk = bOk && MiOutOfBandRecordToStdout(miOutOfBandRecord);
+ if (!bOk)
+ break;
+ }
- return bOk;
+ return bOk;
}
-//++ ------------------------------------------------------------------------------------
-// Details: Print to stdout "=library-unloaded,id=\"%s\",target-name=\"%s\",host-name=\"%s\",symbols-loaded="%d"[,symbols-path=\"%s\"],loaded_addr=\"0x%016" PRIx64"\""
+//++
+//------------------------------------------------------------------------------------
+// Details: Print to stdout
+// "=library-unloaded,id=\"%s\",target-name=\"%s\",host-name=\"%s\",symbols-loaded="%d"[,symbols-path=\"%s\"],loaded_addr=\"0x%016"
+// PRIx64"\""
// Type: Method.
// Args: None.
// Return: MIstatus::success - Function succeeded.
// MIstatus::failure - Function failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebuggerHandleEvents::HandleTargetEventBroadcastBitModulesUnloaded(const lldb::SBEvent &vEvent)
-{
- bool bOk = MIstatus::failure;
- const MIuint nSize = lldb::SBTarget::GetNumModulesFromEvent(vEvent);
- for (MIuint nIndex = 0; nIndex < nSize; ++nIndex)
- {
- const lldb::SBModule sbModule = lldb::SBTarget::GetModuleAtIndexFromEvent(nIndex, vEvent);
- CMICmnMIOutOfBandRecord miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_TargetModuleUnloaded);
- const bool bWithExtraFields = false;
- bOk = MiHelpGetModuleInfo(sbModule, bWithExtraFields, miOutOfBandRecord);
- bOk = bOk && MiOutOfBandRecordToStdout(miOutOfBandRecord);
- if (!bOk)
- break;
- }
+bool CMICmnLLDBDebuggerHandleEvents::
+ HandleTargetEventBroadcastBitModulesUnloaded(const lldb::SBEvent &vEvent) {
+ bool bOk = MIstatus::failure;
+ const MIuint nSize = lldb::SBTarget::GetNumModulesFromEvent(vEvent);
+ for (MIuint nIndex = 0; nIndex < nSize; ++nIndex) {
+ const lldb::SBModule sbModule =
+ lldb::SBTarget::GetModuleAtIndexFromEvent(nIndex, vEvent);
+ CMICmnMIOutOfBandRecord miOutOfBandRecord(
+ CMICmnMIOutOfBandRecord::eOutOfBand_TargetModuleUnloaded);
+ const bool bWithExtraFields = false;
+ bOk = MiHelpGetModuleInfo(sbModule, bWithExtraFields, miOutOfBandRecord);
+ bOk = bOk && MiOutOfBandRecordToStdout(miOutOfBandRecord);
+ if (!bOk)
+ break;
+ }
- return bOk;
+ return bOk;
}
-//++ ------------------------------------------------------------------------------------
-// Details: Build module information for =library-loaded/=library-unloaded: "id=\"%s\",target-name=\"%s\",host-name=\"%s\",symbols-loaded="%d"[,symbols-path=\"%s\"],loaded_addr=\"0x%016" PRIx64"\""
+//++
+//------------------------------------------------------------------------------------
+// Details: Build module information for =library-loaded/=library-unloaded:
+// "id=\"%s\",target-name=\"%s\",host-name=\"%s\",symbols-loaded="%d"[,symbols-path=\"%s\"],loaded_addr=\"0x%016"
+// PRIx64"\""
// Type: Method.
// Args: vwrMiValueList - (W) MI value list object.
// Return: MIstatus::success - Function succeeded.
// MIstatus::failure - Function failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebuggerHandleEvents::MiHelpGetModuleInfo(const lldb::SBModule &vModule, const bool vbWithExtraFields,
- CMICmnMIOutOfBandRecord &vwrMiOutOfBandRecord)
-{
- bool bOk = MIstatus::success;
-
- // First, build standard fields:
- // Build "id" field
- std::unique_ptr<char[]> apPath(new char[PATH_MAX]);
- vModule.GetFileSpec().GetPath(apPath.get(), PATH_MAX);
- const CMIUtilString strTargetPath(apPath.get());
- const CMICmnMIValueConst miValueConst(strTargetPath.AddSlashes());
- const CMICmnMIValueResult miValueResult("id", miValueConst);
- vwrMiOutOfBandRecord.Add(miValueResult);
- // Build "target-name" field
- const CMICmnMIValueConst miValueConst2(strTargetPath.AddSlashes());
- const CMICmnMIValueResult miValueResult2("target-name", miValueConst2);
- vwrMiOutOfBandRecord.Add(miValueResult2);
- // Build "host-name" field
- vModule.GetPlatformFileSpec().GetPath(apPath.get(), PATH_MAX);
- const CMIUtilString strHostPath(apPath.get());
- const CMICmnMIValueConst miValueConst3(strHostPath.AddSlashes());
- const CMICmnMIValueResult miValueResult3("host-name", miValueConst3);
- vwrMiOutOfBandRecord.Add(miValueResult3);
-
- // Then build extra fields if needed:
- if (vbWithExtraFields)
- {
- // Build "symbols-loaded" field
- vModule.GetSymbolFileSpec().GetPath(apPath.get(), PATH_MAX);
- const CMIUtilString strSymbolsPath(apPath.get());
- const bool bSymbolsLoaded = !CMIUtilString::Compare(strHostPath, strSymbolsPath);
- const CMICmnMIValueConst miValueConst4(CMIUtilString::Format("%d", bSymbolsLoaded));
- const CMICmnMIValueResult miValueResult4("symbols-loaded", miValueConst4);
- vwrMiOutOfBandRecord.Add(miValueResult4);
- // Build "symbols-path" field
- if (bSymbolsLoaded)
- {
- const CMICmnMIValueConst miValueConst5(strSymbolsPath.AddSlashes());
- const CMICmnMIValueResult miValueResult5("symbols-path", miValueConst5);
- vwrMiOutOfBandRecord.Add(miValueResult5);
- }
- // Build "loaded_addr" field
- lldb::SBAddress sbAddress(vModule.GetObjectFileHeaderAddress());
- CMICmnLLDBDebugSessionInfo &rSessionInfo(CMICmnLLDBDebugSessionInfo::Instance());
- const lldb::addr_t nLoadAddress(sbAddress.GetLoadAddress(rSessionInfo.GetTarget()));
- const CMIUtilString strLoadedAddr(nLoadAddress != LLDB_INVALID_ADDRESS ?
- CMIUtilString::Format("0x%016" PRIx64, nLoadAddress) : "-");
- const CMICmnMIValueConst miValueConst6(strLoadedAddr);
- const CMICmnMIValueResult miValueResult6("loaded_addr", miValueConst6);
- vwrMiOutOfBandRecord.Add(miValueResult6);
-
- // Build "size" field
- lldb::SBSection sbSection = sbAddress.GetSection();
- const CMIUtilString strSize(CMIUtilString::Format("%" PRIu64, sbSection.GetByteSize()));
- const CMICmnMIValueConst miValueConst7(strSize);
- const CMICmnMIValueResult miValueResult7("size", miValueConst7);
- vwrMiOutOfBandRecord.Add(miValueResult7);
- }
+bool CMICmnLLDBDebuggerHandleEvents::MiHelpGetModuleInfo(
+ const lldb::SBModule &vModule, const bool vbWithExtraFields,
+ CMICmnMIOutOfBandRecord &vwrMiOutOfBandRecord) {
+ bool bOk = MIstatus::success;
+
+ // First, build standard fields:
+ // Build "id" field
+ std::unique_ptr<char[]> apPath(new char[PATH_MAX]);
+ vModule.GetFileSpec().GetPath(apPath.get(), PATH_MAX);
+ const CMIUtilString strTargetPath(apPath.get());
+ const CMICmnMIValueConst miValueConst(strTargetPath.AddSlashes());
+ const CMICmnMIValueResult miValueResult("id", miValueConst);
+ vwrMiOutOfBandRecord.Add(miValueResult);
+ // Build "target-name" field
+ const CMICmnMIValueConst miValueConst2(strTargetPath.AddSlashes());
+ const CMICmnMIValueResult miValueResult2("target-name", miValueConst2);
+ vwrMiOutOfBandRecord.Add(miValueResult2);
+ // Build "host-name" field
+ vModule.GetPlatformFileSpec().GetPath(apPath.get(), PATH_MAX);
+ const CMIUtilString strHostPath(apPath.get());
+ const CMICmnMIValueConst miValueConst3(strHostPath.AddSlashes());
+ const CMICmnMIValueResult miValueResult3("host-name", miValueConst3);
+ vwrMiOutOfBandRecord.Add(miValueResult3);
+
+ // Then build extra fields if needed:
+ if (vbWithExtraFields) {
+ // Build "symbols-loaded" field
+ vModule.GetSymbolFileSpec().GetPath(apPath.get(), PATH_MAX);
+ const CMIUtilString strSymbolsPath(apPath.get());
+ const bool bSymbolsLoaded =
+ !CMIUtilString::Compare(strHostPath, strSymbolsPath);
+ const CMICmnMIValueConst miValueConst4(
+ CMIUtilString::Format("%d", bSymbolsLoaded));
+ const CMICmnMIValueResult miValueResult4("symbols-loaded", miValueConst4);
+ vwrMiOutOfBandRecord.Add(miValueResult4);
+ // Build "symbols-path" field
+ if (bSymbolsLoaded) {
+ const CMICmnMIValueConst miValueConst5(strSymbolsPath.AddSlashes());
+ const CMICmnMIValueResult miValueResult5("symbols-path", miValueConst5);
+ vwrMiOutOfBandRecord.Add(miValueResult5);
+ }
+ // Build "loaded_addr" field
+ lldb::SBAddress sbAddress(vModule.GetObjectFileHeaderAddress());
+ CMICmnLLDBDebugSessionInfo &rSessionInfo(
+ CMICmnLLDBDebugSessionInfo::Instance());
+ const lldb::addr_t nLoadAddress(
+ sbAddress.GetLoadAddress(rSessionInfo.GetTarget()));
+ const CMIUtilString strLoadedAddr(
+ nLoadAddress != LLDB_INVALID_ADDRESS
+ ? CMIUtilString::Format("0x%016" PRIx64, nLoadAddress)
+ : "-");
+ const CMICmnMIValueConst miValueConst6(strLoadedAddr);
+ const CMICmnMIValueResult miValueResult6("loaded_addr", miValueConst6);
+ vwrMiOutOfBandRecord.Add(miValueResult6);
+
+ // Build "size" field
+ lldb::SBSection sbSection = sbAddress.GetSection();
+ const CMIUtilString strSize(
+ CMIUtilString::Format("%" PRIu64, sbSection.GetByteSize()));
+ const CMICmnMIValueConst miValueConst7(strSize);
+ const CMICmnMIValueResult miValueResult7("size", miValueConst7);
+ vwrMiOutOfBandRecord.Add(miValueResult7);
+ }
- return bOk;
+ return bOk;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Handle a LLDB SBCommandInterpreter event.
// Type: Method.
// Args: vEvent - (R) An LLDB command interpreter event.
@@ -754,57 +785,58 @@ CMICmnLLDBDebuggerHandleEvents::MiHelpGe
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebuggerHandleEvents::HandleEventSBCommandInterpreter(const lldb::SBEvent &vEvent)
-{
- // This function is not used
- // *** This function is under development
-
- const char *pEventType = "";
- const MIuint nEventType = vEvent.GetType();
- switch (nEventType)
- {
- case lldb::SBCommandInterpreter::eBroadcastBitThreadShouldExit:
- pEventType = "eBroadcastBitThreadShouldExit";
- // ToDo: IOR: Reminder to maybe handle this here
- // const MIuint nEventType = event.GetType();
- // if (nEventType & lldb::SBCommandInterpreter::eBroadcastBitThreadShouldExit)
- //{
- // m_pClientDriver->SetExitApplicationFlag();
- // vrbYesExit = true;
- // return MIstatus::success;
- //}
- break;
- case lldb::SBCommandInterpreter::eBroadcastBitResetPrompt:
- pEventType = "eBroadcastBitResetPrompt";
- break;
- case lldb::SBCommandInterpreter::eBroadcastBitQuitCommandReceived:
- {
- pEventType = "eBroadcastBitQuitCommandReceived";
- const bool bForceExit = true;
- CMICmnLLDBDebugger::Instance().GetDriver().SetExitApplicationFlag(bForceExit);
- break;
- }
- case lldb::SBCommandInterpreter::eBroadcastBitAsynchronousOutputData:
- pEventType = "eBroadcastBitAsynchronousOutputData";
- break;
- case lldb::SBCommandInterpreter::eBroadcastBitAsynchronousErrorData:
- pEventType = "eBroadcastBitAsynchronousErrorData";
- break;
- default:
- {
- const CMIUtilString msg(
- CMIUtilString::Format(MIRSRC(IDS_LLDBOUTOFBAND_ERR_UNKNOWN_EVENT), "SBCommandInterpreter", (MIuint)nEventType));
- SetErrorDescription(msg);
- return MIstatus::failure;
- }
- }
- m_pLog->WriteLog(CMIUtilString::Format("##### An SBCommandInterpreter event occurred: %s", pEventType));
+bool CMICmnLLDBDebuggerHandleEvents::HandleEventSBCommandInterpreter(
+ const lldb::SBEvent &vEvent) {
+ // This function is not used
+ // *** This function is under development
+
+ const char *pEventType = "";
+ const MIuint nEventType = vEvent.GetType();
+ switch (nEventType) {
+ case lldb::SBCommandInterpreter::eBroadcastBitThreadShouldExit:
+ pEventType = "eBroadcastBitThreadShouldExit";
+ // ToDo: IOR: Reminder to maybe handle this here
+ // const MIuint nEventType = event.GetType();
+ // if (nEventType &
+ // lldb::SBCommandInterpreter::eBroadcastBitThreadShouldExit)
+ //{
+ // m_pClientDriver->SetExitApplicationFlag();
+ // vrbYesExit = true;
+ // return MIstatus::success;
+ //}
+ break;
+ case lldb::SBCommandInterpreter::eBroadcastBitResetPrompt:
+ pEventType = "eBroadcastBitResetPrompt";
+ break;
+ case lldb::SBCommandInterpreter::eBroadcastBitQuitCommandReceived: {
+ pEventType = "eBroadcastBitQuitCommandReceived";
+ const bool bForceExit = true;
+ CMICmnLLDBDebugger::Instance().GetDriver().SetExitApplicationFlag(
+ bForceExit);
+ break;
+ }
+ case lldb::SBCommandInterpreter::eBroadcastBitAsynchronousOutputData:
+ pEventType = "eBroadcastBitAsynchronousOutputData";
+ break;
+ case lldb::SBCommandInterpreter::eBroadcastBitAsynchronousErrorData:
+ pEventType = "eBroadcastBitAsynchronousErrorData";
+ break;
+ default: {
+ const CMIUtilString msg(
+ CMIUtilString::Format(MIRSRC(IDS_LLDBOUTOFBAND_ERR_UNKNOWN_EVENT),
+ "SBCommandInterpreter", (MIuint)nEventType));
+ SetErrorDescription(msg);
+ return MIstatus::failure;
+ }
+ }
+ m_pLog->WriteLog(CMIUtilString::Format(
+ "##### An SBCommandInterpreter event occurred: %s", pEventType));
- return MIstatus::success;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Handle SBProcess event eBroadcastBitStateChanged.
// Type: Method.
// Args: vEvent - (R) An LLDB event object.
@@ -812,91 +844,94 @@ CMICmnLLDBDebuggerHandleEvents::HandleEv
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebuggerHandleEvents::HandleProcessEventBroadcastBitStateChanged(const lldb::SBEvent &vEvent)
-{
- // Make sure the program hasn't been auto-restarted:
- if (lldb::SBProcess::GetRestartedFromEvent(vEvent))
- return MIstatus::success;
-
- bool bOk = ChkForStateChanges();
- bOk = bOk && GetProcessStdout();
- bOk = bOk && GetProcessStderr();
- if (!bOk)
- return MIstatus::failure;
-
- // Something changed in the process; get the event and report the process's current
- // status and location
- const lldb::StateType eEventState = lldb::SBProcess::GetStateFromEvent(vEvent);
- if (eEventState == lldb::eStateInvalid)
- return MIstatus::success;
-
- lldb::SBProcess process = lldb::SBProcess::GetProcessFromEvent(vEvent);
- if (!process.IsValid())
- {
- const CMIUtilString msg(CMIUtilString::Format(MIRSRC(IDS_LLDBOUTOFBAND_ERR_PROCESS_INVALID), "SBProcess",
- "HandleProcessEventBroadcastBitStateChanged()"));
- SetErrorDescription(msg);
- return MIstatus::failure;
- }
+bool CMICmnLLDBDebuggerHandleEvents::HandleProcessEventBroadcastBitStateChanged(
+ const lldb::SBEvent &vEvent) {
+ // Make sure the program hasn't been auto-restarted:
+ if (lldb::SBProcess::GetRestartedFromEvent(vEvent))
+ return MIstatus::success;
- bool bShouldBrk = true;
- const char *pEventType = "";
- switch (eEventState)
- {
- case lldb::eStateUnloaded:
- pEventType = "eStateUnloaded";
- break;
- case lldb::eStateConnected:
- pEventType = "eStateConnected";
- break;
- case lldb::eStateAttaching:
- pEventType = "eStateAttaching";
- break;
- case lldb::eStateLaunching:
- pEventType = "eStateLaunching";
- break;
- case lldb::eStateStopped:
- pEventType = "eStateStopped";
- bOk = HandleProcessEventStateStopped(vEvent, bShouldBrk);
- if (bShouldBrk)
- break;
- case lldb::eStateCrashed:
- case lldb::eStateSuspended:
- pEventType = "eStateSuspended";
- bOk = HandleProcessEventStateSuspended(vEvent);
- break;
- case lldb::eStateRunning:
- pEventType = "eStateRunning";
- bOk = HandleProcessEventStateRunning();
- break;
- case lldb::eStateStepping:
- pEventType = "eStateStepping";
- break;
- case lldb::eStateDetached:
- pEventType = "eStateDetached";
- break;
- case lldb::eStateExited:
- // Don't exit from lldb-mi here. We should be able to re-run target.
- pEventType = "eStateExited";
- bOk = HandleProcessEventStateExited();
- break;
- default:
- {
- const CMIUtilString msg(CMIUtilString::Format(MIRSRC(IDS_LLDBOUTOFBAND_ERR_UNKNOWN_EVENT), "SBProcess BroadcastBitStateChanged",
- (MIuint)eEventState));
- SetErrorDescription(msg);
- return MIstatus::failure;
- }
- }
+ bool bOk = ChkForStateChanges();
+ bOk = bOk && GetProcessStdout();
+ bOk = bOk && GetProcessStderr();
+ if (!bOk)
+ return MIstatus::failure;
+
+ // Something changed in the process; get the event and report the process's
+ // current
+ // status and location
+ const lldb::StateType eEventState =
+ lldb::SBProcess::GetStateFromEvent(vEvent);
+ if (eEventState == lldb::eStateInvalid)
+ return MIstatus::success;
- // ToDo: Remove when finished coding application
- m_pLog->WriteLog(CMIUtilString::Format("##### An SB Process event BroadcastBitStateChanged occurred: %s", pEventType));
+ lldb::SBProcess process = lldb::SBProcess::GetProcessFromEvent(vEvent);
+ if (!process.IsValid()) {
+ const CMIUtilString msg(CMIUtilString::Format(
+ MIRSRC(IDS_LLDBOUTOFBAND_ERR_PROCESS_INVALID), "SBProcess",
+ "HandleProcessEventBroadcastBitStateChanged()"));
+ SetErrorDescription(msg);
+ return MIstatus::failure;
+ }
+
+ bool bShouldBrk = true;
+ const char *pEventType = "";
+ switch (eEventState) {
+ case lldb::eStateUnloaded:
+ pEventType = "eStateUnloaded";
+ break;
+ case lldb::eStateConnected:
+ pEventType = "eStateConnected";
+ break;
+ case lldb::eStateAttaching:
+ pEventType = "eStateAttaching";
+ break;
+ case lldb::eStateLaunching:
+ pEventType = "eStateLaunching";
+ break;
+ case lldb::eStateStopped:
+ pEventType = "eStateStopped";
+ bOk = HandleProcessEventStateStopped(vEvent, bShouldBrk);
+ if (bShouldBrk)
+ break;
+ case lldb::eStateCrashed:
+ case lldb::eStateSuspended:
+ pEventType = "eStateSuspended";
+ bOk = HandleProcessEventStateSuspended(vEvent);
+ break;
+ case lldb::eStateRunning:
+ pEventType = "eStateRunning";
+ bOk = HandleProcessEventStateRunning();
+ break;
+ case lldb::eStateStepping:
+ pEventType = "eStateStepping";
+ break;
+ case lldb::eStateDetached:
+ pEventType = "eStateDetached";
+ break;
+ case lldb::eStateExited:
+ // Don't exit from lldb-mi here. We should be able to re-run target.
+ pEventType = "eStateExited";
+ bOk = HandleProcessEventStateExited();
+ break;
+ default: {
+ const CMIUtilString msg(CMIUtilString::Format(
+ MIRSRC(IDS_LLDBOUTOFBAND_ERR_UNKNOWN_EVENT),
+ "SBProcess BroadcastBitStateChanged", (MIuint)eEventState));
+ SetErrorDescription(msg);
+ return MIstatus::failure;
+ }
+ }
+
+ // ToDo: Remove when finished coding application
+ m_pLog->WriteLog(CMIUtilString::Format(
+ "##### An SB Process event BroadcastBitStateChanged occurred: %s",
+ pEventType));
- return bOk;
+ return bOk;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Asynchronous event handler for LLDB Process state suspended.
// Type: Method.
// Args: vEvent - (R) An LLDB event object.
@@ -904,41 +939,42 @@ CMICmnLLDBDebuggerHandleEvents::HandlePr
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebuggerHandleEvents::HandleProcessEventStateSuspended(const lldb::SBEvent &vEvent)
-{
- bool bOk = MIstatus::success;
- lldb::SBDebugger &rDebugger = CMICmnLLDBDebugSessionInfo::Instance().GetDebugger();
- lldb::SBProcess sbProcess = CMICmnLLDBDebugSessionInfo::Instance().GetProcess();
- lldb::SBTarget target = sbProcess.GetTarget();
- if (rDebugger.GetSelectedTarget() == target)
- {
- if (!UpdateSelectedThread())
- return MIstatus::failure;
-
- lldb::SBCommandReturnObject result;
- const lldb::ReturnStatus status = rDebugger.GetCommandInterpreter().HandleCommand("process status", result, false);
- MIunused(status);
- bOk = TextToStderr(result.GetError());
- bOk = bOk && TextToStdout(result.GetOutput());
- }
+bool CMICmnLLDBDebuggerHandleEvents::HandleProcessEventStateSuspended(
+ const lldb::SBEvent &vEvent) {
+ bool bOk = MIstatus::success;
+ lldb::SBDebugger &rDebugger =
+ CMICmnLLDBDebugSessionInfo::Instance().GetDebugger();
+ lldb::SBProcess sbProcess =
+ CMICmnLLDBDebugSessionInfo::Instance().GetProcess();
+ lldb::SBTarget target = sbProcess.GetTarget();
+ if (rDebugger.GetSelectedTarget() == target) {
+ if (!UpdateSelectedThread())
+ return MIstatus::failure;
+
+ lldb::SBCommandReturnObject result;
+ const lldb::ReturnStatus status =
+ rDebugger.GetCommandInterpreter().HandleCommand("process status",
+ result, false);
+ MIunused(status);
+ bOk = TextToStderr(result.GetError());
+ bOk = bOk && TextToStdout(result.GetOutput());
+ } else {
+ lldb::SBStream streamOut;
+ const MIuint nTargetIndex = rDebugger.GetIndexOfTarget(target);
+ if (nTargetIndex != UINT_MAX)
+ streamOut.Printf("Target %d: (", nTargetIndex);
else
- {
- lldb::SBStream streamOut;
- const MIuint nTargetIndex = rDebugger.GetIndexOfTarget(target);
- if (nTargetIndex != UINT_MAX)
- streamOut.Printf("Target %d: (", nTargetIndex);
- else
- streamOut.Printf("Target <unknown index>: (");
- target.GetDescription(streamOut, lldb::eDescriptionLevelBrief);
- streamOut.Printf(") stopped.\n");
- bOk = TextToStdout(streamOut.GetData());
- }
+ streamOut.Printf("Target <unknown index>: (");
+ target.GetDescription(streamOut, lldb::eDescriptionLevelBrief);
+ streamOut.Printf(") stopped.\n");
+ bOk = TextToStdout(streamOut.GetData());
+ }
- return bOk;
+ return bOk;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Print to stdout MI formatted text to indicate process stopped.
// Type: Method.
// Args: vwrbShouldBrk - (W) True = Yes break, false = do not.
@@ -946,66 +982,68 @@ CMICmnLLDBDebuggerHandleEvents::HandlePr
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebuggerHandleEvents::HandleProcessEventStateStopped(const lldb::SBEvent &vrEvent, bool &vwrbShouldBrk)
-{
- if (!UpdateSelectedThread())
- return MIstatus::failure;
+bool CMICmnLLDBDebuggerHandleEvents::HandleProcessEventStateStopped(
+ const lldb::SBEvent &vrEvent, bool &vwrbShouldBrk) {
+ if (!UpdateSelectedThread())
+ return MIstatus::failure;
+
+ const char *pEventType = "";
+ bool bOk = MIstatus::success;
+ lldb::SBProcess sbProcess =
+ CMICmnLLDBDebugSessionInfo::Instance().GetProcess();
+ const lldb::StopReason eStoppedReason =
+ sbProcess.GetSelectedThread().GetStopReason();
+ switch (eStoppedReason) {
+ case lldb::eStopReasonInvalid:
+ pEventType = "eStopReasonInvalid";
+ vwrbShouldBrk = false;
+ break;
+ case lldb::eStopReasonNone:
+ pEventType = "eStopReasonNone";
+ break;
+ case lldb::eStopReasonTrace:
+ pEventType = "eStopReasonTrace";
+ bOk = HandleProcessEventStopReasonTrace();
+ break;
+ case lldb::eStopReasonBreakpoint:
+ pEventType = "eStopReasonBreakpoint";
+ bOk = HandleProcessEventStopReasonBreakpoint();
+ break;
+ case lldb::eStopReasonWatchpoint:
+ pEventType = "eStopReasonWatchpoint";
+ break;
+ case lldb::eStopReasonSignal:
+ pEventType = "eStopReasonSignal";
+ bOk = HandleProcessEventStopSignal(vrEvent);
+ break;
+ case lldb::eStopReasonException:
+ pEventType = "eStopReasonException";
+ bOk = HandleProcessEventStopException();
+ break;
+ case lldb::eStopReasonExec:
+ pEventType = "eStopReasonExec";
+ break;
+ case lldb::eStopReasonPlanComplete:
+ pEventType = "eStopReasonPlanComplete";
+ bOk = HandleProcessEventStopReasonTrace();
+ break;
+ case lldb::eStopReasonThreadExiting:
+ pEventType = "eStopReasonThreadExiting";
+ break;
+ case lldb::eStopReasonInstrumentation:
+ pEventType = "eStopReasonInstrumentation";
+ break;
+ }
+
+ // ToDo: Remove when finished coding application
+ m_pLog->WriteLog(CMIUtilString::Format(
+ "##### An SB Process event stop state occurred: %s", pEventType));
- const char *pEventType = "";
- bool bOk = MIstatus::success;
- lldb::SBProcess sbProcess = CMICmnLLDBDebugSessionInfo::Instance().GetProcess();
- const lldb::StopReason eStoppedReason = sbProcess.GetSelectedThread().GetStopReason();
- switch (eStoppedReason)
- {
- case lldb::eStopReasonInvalid:
- pEventType = "eStopReasonInvalid";
- vwrbShouldBrk = false;
- break;
- case lldb::eStopReasonNone:
- pEventType = "eStopReasonNone";
- break;
- case lldb::eStopReasonTrace:
- pEventType = "eStopReasonTrace";
- bOk = HandleProcessEventStopReasonTrace();
- break;
- case lldb::eStopReasonBreakpoint:
- pEventType = "eStopReasonBreakpoint";
- bOk = HandleProcessEventStopReasonBreakpoint();
- break;
- case lldb::eStopReasonWatchpoint:
- pEventType = "eStopReasonWatchpoint";
- break;
- case lldb::eStopReasonSignal:
- pEventType = "eStopReasonSignal";
- bOk = HandleProcessEventStopSignal(vrEvent);
- break;
- case lldb::eStopReasonException:
- pEventType = "eStopReasonException";
- bOk = HandleProcessEventStopException();
- break;
- case lldb::eStopReasonExec:
- pEventType = "eStopReasonExec";
- break;
- case lldb::eStopReasonPlanComplete:
- pEventType = "eStopReasonPlanComplete";
- bOk = HandleProcessEventStopReasonTrace();
- break;
- case lldb::eStopReasonThreadExiting:
- pEventType = "eStopReasonThreadExiting";
- break;
- case lldb::eStopReasonInstrumentation:
- pEventType = "eStopReasonInstrumentation";
- break;
- }
-
- // ToDo: Remove when finished coding application
- m_pLog->WriteLog(CMIUtilString::Format("##### An SB Process event stop state occurred: %s", pEventType));
-
- return bOk;
+ return bOk;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Asynchronous event handler for LLDB Process stop signal.
// Type: Method.
// Args: vrEvent - (R) An LLDB broadcast event.
@@ -1013,147 +1051,150 @@ CMICmnLLDBDebuggerHandleEvents::HandlePr
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebuggerHandleEvents::HandleProcessEventStopSignal(const lldb::SBEvent &vrEvent)
-{
- bool bOk = MIstatus::success;
-
- InitializeSignals ();
- lldb::SBProcess sbProcess = CMICmnLLDBDebugSessionInfo::Instance().GetProcess();
- const MIuint64 nStopReason = sbProcess.GetSelectedThread().GetStopReasonDataAtIndex(0);
- const bool bInterrupted = lldb::SBProcess::GetInterruptedFromEvent(vrEvent);
- if (nStopReason == m_SIGINT || (nStopReason == m_SIGSTOP && bInterrupted))
- {
- // MI print "*stopped,reason=\"signal-received\",signal-name=\"SIGINT\",signal-meaning=\"Interrupt\",frame={%s},thread-id=\"%d\",stopped-threads=\"all\""
- const CMICmnMIValueConst miValueConst("signal-received");
- const CMICmnMIValueResult miValueResult("reason", miValueConst);
- CMICmnMIOutOfBandRecord miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_Stopped, miValueResult);
- const CMICmnMIValueConst miValueConst2("SIGINT");
- const CMICmnMIValueResult miValueResult2("signal-name", miValueConst2);
- miOutOfBandRecord.Add(miValueResult2);
- const CMICmnMIValueConst miValueConst3("Interrupt");
- const CMICmnMIValueResult miValueResult3("signal-meaning", miValueConst3);
- miOutOfBandRecord.Add(miValueResult3);
- CMICmnMIValueTuple miValueTuple;
- bOk = bOk && MiHelpGetCurrentThreadFrame(miValueTuple);
- const CMICmnMIValueResult miValueResult4("frame", miValueTuple);
- miOutOfBandRecord.Add(miValueResult4);
- const CMIUtilString strThreadId(CMIUtilString::Format("%" PRIu32, sbProcess.GetSelectedThread().GetIndexID()));
- const CMICmnMIValueConst miValueConst5(strThreadId);
- const CMICmnMIValueResult miValueResult5("thread-id", miValueConst5);
- miOutOfBandRecord.Add(miValueResult5);
- const CMICmnMIValueConst miValueConst6("all");
- const CMICmnMIValueResult miValueResult6("stopped-threads", miValueConst6);
- miOutOfBandRecord.Add(miValueResult6);
- bOk = bOk && MiOutOfBandRecordToStdout(miOutOfBandRecord);
- bOk = bOk && CMICmnStreamStdout::WritePrompt();
- }
- else if (nStopReason == m_SIGSTOP)
- {
- // MI print "*stopped,reason=\"signal-received\",signal-name=\"SIGSTOP\",signal-meaning=\"Stop\",frame={%s},thread-id=\"%d\",stopped-threads=\"all\""
- const CMICmnMIValueConst miValueConst("signal-received");
- const CMICmnMIValueResult miValueResult("reason", miValueConst);
- CMICmnMIOutOfBandRecord miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_Stopped, miValueResult);
- const CMICmnMIValueConst miValueConst2("SIGSTOP");
- const CMICmnMIValueResult miValueResult2("signal-name", miValueConst2);
- miOutOfBandRecord.Add(miValueResult2);
- const CMICmnMIValueConst miValueConst3("Stop");
- const CMICmnMIValueResult miValueResult3("signal-meaning", miValueConst3);
- miOutOfBandRecord.Add(miValueResult3);
- CMICmnMIValueTuple miValueTuple;
- bOk = bOk && MiHelpGetCurrentThreadFrame(miValueTuple);
- const CMICmnMIValueResult miValueResult4("frame", miValueTuple);
- miOutOfBandRecord.Add(miValueResult4);
- const CMIUtilString strThreadId(CMIUtilString::Format("%" PRIu32, sbProcess.GetSelectedThread().GetIndexID()));
- const CMICmnMIValueConst miValueConst5(strThreadId);
- const CMICmnMIValueResult miValueResult5("thread-id", miValueConst5);
- miOutOfBandRecord.Add(miValueResult5);
- const CMICmnMIValueConst miValueConst6("all");
- const CMICmnMIValueResult miValueResult6("stopped-threads", miValueConst6);
- miOutOfBandRecord.Add(miValueResult6);
- bOk = bOk && MiOutOfBandRecordToStdout(miOutOfBandRecord);
- bOk = bOk && CMICmnStreamStdout::WritePrompt();
- }
- else if (nStopReason == m_SIGSEGV)
- {
- // MI print "*stopped,reason=\"signal-received\",signal-name=\"SIGSEGV\",signal-meaning=\"Segmentation fault\",thread-id=\"%d\",frame={%s}"
- const CMICmnMIValueConst miValueConst("signal-received");
- const CMICmnMIValueResult miValueResult("reason", miValueConst);
- CMICmnMIOutOfBandRecord miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_Stopped, miValueResult);
- const CMICmnMIValueConst miValueConst2("SIGSEGV");
- const CMICmnMIValueResult miValueResult2("signal-name", miValueConst2);
- miOutOfBandRecord.Add(miValueResult2);
- const CMICmnMIValueConst miValueConst3("Segmentation fault");
- const CMICmnMIValueResult miValueResult3("signal-meaning", miValueConst3);
- miOutOfBandRecord.Add(miValueResult3);
- CMICmnMIValueTuple miValueTuple;
- bOk = bOk && MiHelpGetCurrentThreadFrame(miValueTuple);
- const CMICmnMIValueResult miValueResult4("frame", miValueTuple);
- miOutOfBandRecord.Add(miValueResult4);
- const CMIUtilString strThreadId(CMIUtilString::Format("%d", sbProcess.GetSelectedThread().GetIndexID()));
- const CMICmnMIValueConst miValueConst5(strThreadId);
- const CMICmnMIValueResult miValueResult5("thread-id", miValueConst5);
- miOutOfBandRecord.Add(miValueResult5);
- bOk = bOk && MiOutOfBandRecordToStdout(miOutOfBandRecord);
- // Note no "(gdb)" output here
- }
- else if (nStopReason == m_SIGTRAP)
- {
- lldb::SBThread thread = sbProcess.GetSelectedThread();
- const MIuint nFrames = thread.GetNumFrames();
- if (nFrames > 0)
- {
- lldb::SBFrame frame = thread.GetFrameAtIndex(0);
- const char *pFnName = frame.GetFunctionName();
- if (pFnName != nullptr)
- {
- const CMIUtilString fnName = CMIUtilString(pFnName);
- static const CMIUtilString threadCloneFn = CMIUtilString("__pthread_clone");
-
- if (CMIUtilString::Compare(threadCloneFn, fnName))
- {
- if (sbProcess.IsValid())
- sbProcess.Continue();
- }
- }
+bool CMICmnLLDBDebuggerHandleEvents::HandleProcessEventStopSignal(
+ const lldb::SBEvent &vrEvent) {
+ bool bOk = MIstatus::success;
+
+ InitializeSignals();
+ lldb::SBProcess sbProcess =
+ CMICmnLLDBDebugSessionInfo::Instance().GetProcess();
+ const MIuint64 nStopReason =
+ sbProcess.GetSelectedThread().GetStopReasonDataAtIndex(0);
+ const bool bInterrupted = lldb::SBProcess::GetInterruptedFromEvent(vrEvent);
+ if (nStopReason == m_SIGINT || (nStopReason == m_SIGSTOP && bInterrupted)) {
+ // MI print
+ // "*stopped,reason=\"signal-received\",signal-name=\"SIGINT\",signal-meaning=\"Interrupt\",frame={%s},thread-id=\"%d\",stopped-threads=\"all\""
+ const CMICmnMIValueConst miValueConst("signal-received");
+ const CMICmnMIValueResult miValueResult("reason", miValueConst);
+ CMICmnMIOutOfBandRecord miOutOfBandRecord(
+ CMICmnMIOutOfBandRecord::eOutOfBand_Stopped, miValueResult);
+ const CMICmnMIValueConst miValueConst2("SIGINT");
+ const CMICmnMIValueResult miValueResult2("signal-name", miValueConst2);
+ miOutOfBandRecord.Add(miValueResult2);
+ const CMICmnMIValueConst miValueConst3("Interrupt");
+ const CMICmnMIValueResult miValueResult3("signal-meaning", miValueConst3);
+ miOutOfBandRecord.Add(miValueResult3);
+ CMICmnMIValueTuple miValueTuple;
+ bOk = bOk && MiHelpGetCurrentThreadFrame(miValueTuple);
+ const CMICmnMIValueResult miValueResult4("frame", miValueTuple);
+ miOutOfBandRecord.Add(miValueResult4);
+ const CMIUtilString strThreadId(CMIUtilString::Format(
+ "%" PRIu32, sbProcess.GetSelectedThread().GetIndexID()));
+ const CMICmnMIValueConst miValueConst5(strThreadId);
+ const CMICmnMIValueResult miValueResult5("thread-id", miValueConst5);
+ miOutOfBandRecord.Add(miValueResult5);
+ const CMICmnMIValueConst miValueConst6("all");
+ const CMICmnMIValueResult miValueResult6("stopped-threads", miValueConst6);
+ miOutOfBandRecord.Add(miValueResult6);
+ bOk = bOk && MiOutOfBandRecordToStdout(miOutOfBandRecord);
+ bOk = bOk && CMICmnStreamStdout::WritePrompt();
+ } else if (nStopReason == m_SIGSTOP) {
+ // MI print
+ // "*stopped,reason=\"signal-received\",signal-name=\"SIGSTOP\",signal-meaning=\"Stop\",frame={%s},thread-id=\"%d\",stopped-threads=\"all\""
+ const CMICmnMIValueConst miValueConst("signal-received");
+ const CMICmnMIValueResult miValueResult("reason", miValueConst);
+ CMICmnMIOutOfBandRecord miOutOfBandRecord(
+ CMICmnMIOutOfBandRecord::eOutOfBand_Stopped, miValueResult);
+ const CMICmnMIValueConst miValueConst2("SIGSTOP");
+ const CMICmnMIValueResult miValueResult2("signal-name", miValueConst2);
+ miOutOfBandRecord.Add(miValueResult2);
+ const CMICmnMIValueConst miValueConst3("Stop");
+ const CMICmnMIValueResult miValueResult3("signal-meaning", miValueConst3);
+ miOutOfBandRecord.Add(miValueResult3);
+ CMICmnMIValueTuple miValueTuple;
+ bOk = bOk && MiHelpGetCurrentThreadFrame(miValueTuple);
+ const CMICmnMIValueResult miValueResult4("frame", miValueTuple);
+ miOutOfBandRecord.Add(miValueResult4);
+ const CMIUtilString strThreadId(CMIUtilString::Format(
+ "%" PRIu32, sbProcess.GetSelectedThread().GetIndexID()));
+ const CMICmnMIValueConst miValueConst5(strThreadId);
+ const CMICmnMIValueResult miValueResult5("thread-id", miValueConst5);
+ miOutOfBandRecord.Add(miValueResult5);
+ const CMICmnMIValueConst miValueConst6("all");
+ const CMICmnMIValueResult miValueResult6("stopped-threads", miValueConst6);
+ miOutOfBandRecord.Add(miValueResult6);
+ bOk = bOk && MiOutOfBandRecordToStdout(miOutOfBandRecord);
+ bOk = bOk && CMICmnStreamStdout::WritePrompt();
+ } else if (nStopReason == m_SIGSEGV) {
+ // MI print
+ // "*stopped,reason=\"signal-received\",signal-name=\"SIGSEGV\",signal-meaning=\"Segmentation
+ // fault\",thread-id=\"%d\",frame={%s}"
+ const CMICmnMIValueConst miValueConst("signal-received");
+ const CMICmnMIValueResult miValueResult("reason", miValueConst);
+ CMICmnMIOutOfBandRecord miOutOfBandRecord(
+ CMICmnMIOutOfBandRecord::eOutOfBand_Stopped, miValueResult);
+ const CMICmnMIValueConst miValueConst2("SIGSEGV");
+ const CMICmnMIValueResult miValueResult2("signal-name", miValueConst2);
+ miOutOfBandRecord.Add(miValueResult2);
+ const CMICmnMIValueConst miValueConst3("Segmentation fault");
+ const CMICmnMIValueResult miValueResult3("signal-meaning", miValueConst3);
+ miOutOfBandRecord.Add(miValueResult3);
+ CMICmnMIValueTuple miValueTuple;
+ bOk = bOk && MiHelpGetCurrentThreadFrame(miValueTuple);
+ const CMICmnMIValueResult miValueResult4("frame", miValueTuple);
+ miOutOfBandRecord.Add(miValueResult4);
+ const CMIUtilString strThreadId(CMIUtilString::Format(
+ "%d", sbProcess.GetSelectedThread().GetIndexID()));
+ const CMICmnMIValueConst miValueConst5(strThreadId);
+ const CMICmnMIValueResult miValueResult5("thread-id", miValueConst5);
+ miOutOfBandRecord.Add(miValueResult5);
+ bOk = bOk && MiOutOfBandRecordToStdout(miOutOfBandRecord);
+ // Note no "(gdb)" output here
+ } else if (nStopReason == m_SIGTRAP) {
+ lldb::SBThread thread = sbProcess.GetSelectedThread();
+ const MIuint nFrames = thread.GetNumFrames();
+ if (nFrames > 0) {
+ lldb::SBFrame frame = thread.GetFrameAtIndex(0);
+ const char *pFnName = frame.GetFunctionName();
+ if (pFnName != nullptr) {
+ const CMIUtilString fnName = CMIUtilString(pFnName);
+ static const CMIUtilString threadCloneFn =
+ CMIUtilString("__pthread_clone");
+
+ if (CMIUtilString::Compare(threadCloneFn, fnName)) {
+ if (sbProcess.IsValid())
+ sbProcess.Continue();
}
+ }
}
- else
- {
- // MI print "*stopped,reason=\"signal-received\",signal-name=\"%s\",thread-id=\"%d\",stopped-threads=\"all\""
- // MI print "*stopped,reason=\"signal-received\",signal=\"%d\",thread-id=\"%d\",stopped-threads=\"all\""
- const CMICmnMIValueConst miValueConst("signal-received");
- const CMICmnMIValueResult miValueResult("reason", miValueConst);
- CMICmnMIOutOfBandRecord miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_Stopped, miValueResult);
- lldb::SBUnixSignals sbUnixSignals = sbProcess.GetUnixSignals();
- const char *pSignal = sbUnixSignals.GetSignalAsCString(nStopReason);
- if (pSignal)
- {
- const CMICmnMIValueConst miValueConst2(pSignal);
- const CMICmnMIValueResult miValueResult2("signal-name", miValueConst2);
- miOutOfBandRecord.Add(miValueResult2);
- }
- else
- {
- const CMIUtilString strSignal(CMIUtilString::Format("%" PRIu64, nStopReason));
- const CMICmnMIValueConst miValueConst2(strSignal);
- const CMICmnMIValueResult miValueResult2("signal", miValueConst2);
- miOutOfBandRecord.Add(miValueResult2);
- }
- const CMIUtilString strThreadId(CMIUtilString::Format("%d", sbProcess.GetSelectedThread().GetIndexID()));
- const CMICmnMIValueConst miValueConst3(strThreadId);
- const CMICmnMIValueResult miValueResult3("thread-id", miValueConst3);
- miOutOfBandRecord.Add(miValueResult3);
- const CMICmnMIValueConst miValueConst4("all");
- const CMICmnMIValueResult miValueResult4("stopped-threads", miValueConst4);
- miOutOfBandRecord.Add(miValueResult4);
- bOk = bOk && MiOutOfBandRecordToStdout(miOutOfBandRecord);
- bOk = bOk && CMICmnStreamStdout::WritePrompt();
+ } else {
+ // MI print
+ // "*stopped,reason=\"signal-received\",signal-name=\"%s\",thread-id=\"%d\",stopped-threads=\"all\""
+ // MI print
+ // "*stopped,reason=\"signal-received\",signal=\"%d\",thread-id=\"%d\",stopped-threads=\"all\""
+ const CMICmnMIValueConst miValueConst("signal-received");
+ const CMICmnMIValueResult miValueResult("reason", miValueConst);
+ CMICmnMIOutOfBandRecord miOutOfBandRecord(
+ CMICmnMIOutOfBandRecord::eOutOfBand_Stopped, miValueResult);
+ lldb::SBUnixSignals sbUnixSignals = sbProcess.GetUnixSignals();
+ const char *pSignal = sbUnixSignals.GetSignalAsCString(nStopReason);
+ if (pSignal) {
+ const CMICmnMIValueConst miValueConst2(pSignal);
+ const CMICmnMIValueResult miValueResult2("signal-name", miValueConst2);
+ miOutOfBandRecord.Add(miValueResult2);
+ } else {
+ const CMIUtilString strSignal(
+ CMIUtilString::Format("%" PRIu64, nStopReason));
+ const CMICmnMIValueConst miValueConst2(strSignal);
+ const CMICmnMIValueResult miValueResult2("signal", miValueConst2);
+ miOutOfBandRecord.Add(miValueResult2);
}
- return bOk;
+ const CMIUtilString strThreadId(CMIUtilString::Format(
+ "%d", sbProcess.GetSelectedThread().GetIndexID()));
+ const CMICmnMIValueConst miValueConst3(strThreadId);
+ const CMICmnMIValueResult miValueResult3("thread-id", miValueConst3);
+ miOutOfBandRecord.Add(miValueResult3);
+ const CMICmnMIValueConst miValueConst4("all");
+ const CMICmnMIValueResult miValueResult4("stopped-threads", miValueConst4);
+ miOutOfBandRecord.Add(miValueResult4);
+ bOk = bOk && MiOutOfBandRecordToStdout(miOutOfBandRecord);
+ bOk = bOk && CMICmnStreamStdout::WritePrompt();
+ }
+ return bOk;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Asynchronous event handler for LLDB Process stop exception.
// Type: Method.
// Args: None.
@@ -1161,37 +1202,40 @@ CMICmnLLDBDebuggerHandleEvents::HandlePr
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebuggerHandleEvents::HandleProcessEventStopException()
-{
- const lldb::SBProcess sbProcess = CMICmnLLDBDebugSessionInfo::Instance().GetProcess();
- lldb::SBThread sbThread = sbProcess.GetSelectedThread();
- const size_t nStopDescriptionLen = sbThread.GetStopDescription(nullptr, 0);
- std::unique_ptr<char[]> apStopDescription(new char[nStopDescriptionLen]);
- sbThread.GetStopDescription(apStopDescription.get(), nStopDescriptionLen);
+bool CMICmnLLDBDebuggerHandleEvents::HandleProcessEventStopException() {
+ const lldb::SBProcess sbProcess =
+ CMICmnLLDBDebugSessionInfo::Instance().GetProcess();
+ lldb::SBThread sbThread = sbProcess.GetSelectedThread();
+ const size_t nStopDescriptionLen = sbThread.GetStopDescription(nullptr, 0);
+ std::unique_ptr<char[]> apStopDescription(new char[nStopDescriptionLen]);
+ sbThread.GetStopDescription(apStopDescription.get(), nStopDescriptionLen);
+
+ // MI print
+ // "*stopped,reason=\"exception-received\",exception=\"%s\",thread-id=\"%d\",stopped-threads=\"all\""
+ const CMICmnMIValueConst miValueConst("exception-received");
+ const CMICmnMIValueResult miValueResult("reason", miValueConst);
+ CMICmnMIOutOfBandRecord miOutOfBandRecord(
+ CMICmnMIOutOfBandRecord::eOutOfBand_Stopped, miValueResult);
+ const CMIUtilString strReason(apStopDescription.get());
+ const CMICmnMIValueConst miValueConst2(strReason);
+ const CMICmnMIValueResult miValueResult2("exception", miValueConst2);
+ miOutOfBandRecord.Add(miValueResult2);
+ const CMIUtilString strThreadId(
+ CMIUtilString::Format("%d", sbThread.GetIndexID()));
+ const CMICmnMIValueConst miValueConst3(strThreadId);
+ const CMICmnMIValueResult miValueResult3("thread-id", miValueConst3);
+ miOutOfBandRecord.Add(miValueResult3);
+ const CMICmnMIValueConst miValueConst4("all");
+ const CMICmnMIValueResult miValueResult4("stopped-threads", miValueConst4);
+ miOutOfBandRecord.Add(miValueResult4);
+ bool bOk = MiOutOfBandRecordToStdout(miOutOfBandRecord);
+ bOk = bOk && CMICmnStreamStdout::WritePrompt();
- // MI print "*stopped,reason=\"exception-received\",exception=\"%s\",thread-id=\"%d\",stopped-threads=\"all\""
- const CMICmnMIValueConst miValueConst("exception-received");
- const CMICmnMIValueResult miValueResult("reason", miValueConst);
- CMICmnMIOutOfBandRecord miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_Stopped, miValueResult);
- const CMIUtilString strReason(apStopDescription.get());
- const CMICmnMIValueConst miValueConst2(strReason);
- const CMICmnMIValueResult miValueResult2("exception", miValueConst2);
- miOutOfBandRecord.Add(miValueResult2);
- const CMIUtilString strThreadId(CMIUtilString::Format("%d", sbThread.GetIndexID()));
- const CMICmnMIValueConst miValueConst3(strThreadId);
- const CMICmnMIValueResult miValueResult3("thread-id", miValueConst3);
- miOutOfBandRecord.Add(miValueResult3);
- const CMICmnMIValueConst miValueConst4("all");
- const CMICmnMIValueResult miValueResult4("stopped-threads", miValueConst4);
- miOutOfBandRecord.Add(miValueResult4);
- bool bOk = MiOutOfBandRecordToStdout(miOutOfBandRecord);
- bOk = bOk && CMICmnStreamStdout::WritePrompt();
-
- return bOk;
+ return bOk;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Form partial MI response in a MI value tuple object.
// Type: Method.
// Args: vwrMiValueTuple - (W) MI value tuple object.
@@ -1199,46 +1243,50 @@ CMICmnLLDBDebuggerHandleEvents::HandlePr
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebuggerHandleEvents::MiHelpGetCurrentThreadFrame(CMICmnMIValueTuple &vwrMiValueTuple)
-{
- CMIUtilString strThreadFrame;
- lldb::SBProcess sbProcess = CMICmnLLDBDebugSessionInfo::Instance().GetProcess();
- lldb::SBThread thread = sbProcess.GetSelectedThread();
- const MIuint nFrame = thread.GetNumFrames();
- if (nFrame == 0)
- {
- // MI print "addr=\"??\",func=\"??\",file=\"??\",fullname=\"??\",line=\"??\""
- const CMICmnMIValueConst miValueConst("??");
- const CMICmnMIValueResult miValueResult("addr", miValueConst);
- CMICmnMIValueTuple miValueTuple(miValueResult);
- const CMICmnMIValueResult miValueResult2("func", miValueConst);
- miValueTuple.Add(miValueResult2);
- const CMICmnMIValueResult miValueResult4("file", miValueConst);
- miValueTuple.Add(miValueResult4);
- const CMICmnMIValueResult miValueResult5("fullname", miValueConst);
- miValueTuple.Add(miValueResult5);
- const CMICmnMIValueResult miValueResult6("line", miValueConst);
- miValueTuple.Add(miValueResult6);
+bool CMICmnLLDBDebuggerHandleEvents::MiHelpGetCurrentThreadFrame(
+ CMICmnMIValueTuple &vwrMiValueTuple) {
+ CMIUtilString strThreadFrame;
+ lldb::SBProcess sbProcess =
+ CMICmnLLDBDebugSessionInfo::Instance().GetProcess();
+ lldb::SBThread thread = sbProcess.GetSelectedThread();
+ const MIuint nFrame = thread.GetNumFrames();
+ if (nFrame == 0) {
+ // MI print
+ // "addr=\"??\",func=\"??\",file=\"??\",fullname=\"??\",line=\"??\""
+ const CMICmnMIValueConst miValueConst("??");
+ const CMICmnMIValueResult miValueResult("addr", miValueConst);
+ CMICmnMIValueTuple miValueTuple(miValueResult);
+ const CMICmnMIValueResult miValueResult2("func", miValueConst);
+ miValueTuple.Add(miValueResult2);
+ const CMICmnMIValueResult miValueResult4("file", miValueConst);
+ miValueTuple.Add(miValueResult4);
+ const CMICmnMIValueResult miValueResult5("fullname", miValueConst);
+ miValueTuple.Add(miValueResult5);
+ const CMICmnMIValueResult miValueResult6("line", miValueConst);
+ miValueTuple.Add(miValueResult6);
- vwrMiValueTuple = miValueTuple;
+ vwrMiValueTuple = miValueTuple;
- return MIstatus::success;
- }
+ return MIstatus::success;
+ }
- CMICmnMIValueTuple miValueTuple;
- if (!CMICmnLLDBDebugSessionInfo::Instance().MIResponseFormFrameInfo(thread, 0, CMICmnLLDBDebugSessionInfo::eFrameInfoFormat_NoArguments, miValueTuple))
- {
- SetErrorDescription(CMIUtilString::Format(MIRSRC(IDS_LLDBOUTOFBAND_ERR_FORM_MI_RESPONSE), "MiHelpGetCurrentThreadFrame()"));
- return MIstatus::failure;
- }
+ CMICmnMIValueTuple miValueTuple;
+ if (!CMICmnLLDBDebugSessionInfo::Instance().MIResponseFormFrameInfo(
+ thread, 0, CMICmnLLDBDebugSessionInfo::eFrameInfoFormat_NoArguments,
+ miValueTuple)) {
+ SetErrorDescription(
+ CMIUtilString::Format(MIRSRC(IDS_LLDBOUTOFBAND_ERR_FORM_MI_RESPONSE),
+ "MiHelpGetCurrentThreadFrame()"));
+ return MIstatus::failure;
+ }
- vwrMiValueTuple = miValueTuple;
+ vwrMiValueTuple = miValueTuple;
- return MIstatus::success;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Asynchronous event handler for LLDB Process stop reason breakpoint.
// Type: Method.
// Args: None.
@@ -1246,27 +1294,31 @@ CMICmnLLDBDebuggerHandleEvents::MiHelpGe
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebuggerHandleEvents::HandleProcessEventStopReasonBreakpoint()
-{
- // CODETAG_DEBUG_SESSION_RUNNING_PROG_RECEIVED_SIGINT_PAUSE_PROGRAM
- if (!CMIDriver::Instance().SetDriverStateRunningNotDebugging())
- {
- const CMIUtilString &rErrMsg(CMIDriver::Instance().GetErrorDescription());
- SetErrorDescription(CMIUtilString::Format(MIRSRC(IDS_LLDBOUTOFBAND_ERR_SETNEWDRIVERSTATE),
- "HandleProcessEventStopReasonBreakpoint()", rErrMsg.c_str()));
- return MIstatus::failure;
- }
-
- lldb::SBProcess sbProcess = CMICmnLLDBDebugSessionInfo::Instance().GetProcess();
- const MIuint64 brkPtId = sbProcess.GetSelectedThread().GetStopReasonDataAtIndex(0);
- lldb::SBBreakpoint brkPt = CMICmnLLDBDebugSessionInfo::Instance().GetTarget().GetBreakpointAtIndex((MIuint)brkPtId);
-
- return MiStoppedAtBreakPoint(brkPtId, brkPt);
-}
-
-//++ ------------------------------------------------------------------------------------
-// Details: Form the MI Out-of-band response for stopped reason on hitting a break point.
+bool CMICmnLLDBDebuggerHandleEvents::HandleProcessEventStopReasonBreakpoint() {
+ // CODETAG_DEBUG_SESSION_RUNNING_PROG_RECEIVED_SIGINT_PAUSE_PROGRAM
+ if (!CMIDriver::Instance().SetDriverStateRunningNotDebugging()) {
+ const CMIUtilString &rErrMsg(CMIDriver::Instance().GetErrorDescription());
+ SetErrorDescription(CMIUtilString::Format(
+ MIRSRC(IDS_LLDBOUTOFBAND_ERR_SETNEWDRIVERSTATE),
+ "HandleProcessEventStopReasonBreakpoint()", rErrMsg.c_str()));
+ return MIstatus::failure;
+ }
+
+ lldb::SBProcess sbProcess =
+ CMICmnLLDBDebugSessionInfo::Instance().GetProcess();
+ const MIuint64 brkPtId =
+ sbProcess.GetSelectedThread().GetStopReasonDataAtIndex(0);
+ lldb::SBBreakpoint brkPt =
+ CMICmnLLDBDebugSessionInfo::Instance().GetTarget().GetBreakpointAtIndex(
+ (MIuint)brkPtId);
+
+ return MiStoppedAtBreakPoint(brkPtId, brkPt);
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: Form the MI Out-of-band response for stopped reason on hitting a
+// break point.
// Type: Method.
// Args: vBrkPtId - (R) The LLDB break point's ID
// vBrkPt - (R) THe LLDB break point object.
@@ -1274,87 +1326,97 @@ CMICmnLLDBDebuggerHandleEvents::HandlePr
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebuggerHandleEvents::MiStoppedAtBreakPoint(const MIuint64 vBrkPtId, const lldb::SBBreakpoint &vBrkPt)
-{
- bool bOk = MIstatus::success;
-
- lldb::SBProcess sbProcess = CMICmnLLDBDebugSessionInfo::Instance().GetProcess();
- lldb::SBThread thread = sbProcess.GetSelectedThread();
- const MIuint nFrame = thread.GetNumFrames();
- if (nFrame == 0)
- {
- // MI print "*stopped,reason=\"breakpoint-hit\",disp=\"del\",bkptno=\"%d\",frame={},thread-id=\"%d\",stopped-threads=\"all\""
- const CMICmnMIValueConst miValueConst("breakpoint-hit");
- const CMICmnMIValueResult miValueResult("reason", miValueConst);
- CMICmnMIOutOfBandRecord miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_Stopped, miValueResult);
- const CMICmnMIValueConst miValueConst2("del");
- const CMICmnMIValueResult miValueResult2("disp", miValueConst2);
- miOutOfBandRecord.Add(miValueResult2);
- const CMIUtilString strBkp(CMIUtilString::Format("%d", vBrkPtId));
- const CMICmnMIValueConst miValueConst3(strBkp);
- CMICmnMIValueResult miValueResult3("bkptno", miValueConst3);
- miOutOfBandRecord.Add(miValueResult3);
- const CMICmnMIValueConst miValueConst4("{}");
- const CMICmnMIValueResult miValueResult4("frame", miValueConst4);
- miOutOfBandRecord.Add(miValueResult4);
- const CMIUtilString strThreadId(CMIUtilString::Format("%d", vBrkPt.GetThreadIndex()));
- const CMICmnMIValueConst miValueConst5(strThreadId);
- const CMICmnMIValueResult miValueResult5("thread-id", miValueConst5);
- miOutOfBandRecord.Add(miValueResult5);
- const CMICmnMIValueConst miValueConst6("all");
- const CMICmnMIValueResult miValueResult6("stopped-threads", miValueConst6);
- miOutOfBandRecord.Add(miValueResult6);
- bOk = bOk && MiOutOfBandRecordToStdout(miOutOfBandRecord);
- bOk = bOk && CMICmnStreamStdout::WritePrompt();
- return bOk;
- }
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(CMICmnLLDBDebugSessionInfo::Instance());
-
+bool CMICmnLLDBDebuggerHandleEvents::MiStoppedAtBreakPoint(
+ const MIuint64 vBrkPtId, const lldb::SBBreakpoint &vBrkPt) {
+ bool bOk = MIstatus::success;
+
+ lldb::SBProcess sbProcess =
+ CMICmnLLDBDebugSessionInfo::Instance().GetProcess();
+ lldb::SBThread thread = sbProcess.GetSelectedThread();
+ const MIuint nFrame = thread.GetNumFrames();
+ if (nFrame == 0) {
// MI print
- // "*stopped,reason=\"breakpoint-hit\",disp=\"del\",bkptno=\"%d\",frame={addr=\"0x%016" PRIx64 "\",func=\"%s\",args=[],file=\"%s\",fullname=\"%s\",line=\"%d\"},thread-id=\"%d\",stopped-threads=\"all\""
+ // "*stopped,reason=\"breakpoint-hit\",disp=\"del\",bkptno=\"%d\",frame={},thread-id=\"%d\",stopped-threads=\"all\""
const CMICmnMIValueConst miValueConst("breakpoint-hit");
const CMICmnMIValueResult miValueResult("reason", miValueConst);
- CMICmnMIOutOfBandRecord miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_Stopped, miValueResult);
- const CMICmnMIValueConst miValueConstA("del");
- const CMICmnMIValueResult miValueResultA("disp", miValueConstA);
- miOutOfBandRecord.Add(miValueResultA);
+ CMICmnMIOutOfBandRecord miOutOfBandRecord(
+ CMICmnMIOutOfBandRecord::eOutOfBand_Stopped, miValueResult);
+ const CMICmnMIValueConst miValueConst2("del");
+ const CMICmnMIValueResult miValueResult2("disp", miValueConst2);
+ miOutOfBandRecord.Add(miValueResult2);
const CMIUtilString strBkp(CMIUtilString::Format("%d", vBrkPtId));
- const CMICmnMIValueConst miValueConstB(strBkp);
- CMICmnMIValueResult miValueResultB("bkptno", miValueConstB);
- miOutOfBandRecord.Add(miValueResultB);
-
- // frame={addr=\"0x%016" PRIx64 "\",func=\"%s\",args=[],file=\"%s\",fullname=\"%s\",line=\"%d\"}
- if (bOk)
- {
- CMICmnMIValueTuple miValueTuple;
- bOk = bOk && rSessionInfo.MIResponseFormFrameInfo(thread, 0, CMICmnLLDBDebugSessionInfo::eFrameInfoFormat_AllArguments, miValueTuple);
- const CMICmnMIValueResult miValueResult8("frame", miValueTuple);
- miOutOfBandRecord.Add(miValueResult8);
- }
+ const CMICmnMIValueConst miValueConst3(strBkp);
+ CMICmnMIValueResult miValueResult3("bkptno", miValueConst3);
+ miOutOfBandRecord.Add(miValueResult3);
+ const CMICmnMIValueConst miValueConst4("{}");
+ const CMICmnMIValueResult miValueResult4("frame", miValueConst4);
+ miOutOfBandRecord.Add(miValueResult4);
+ const CMIUtilString strThreadId(
+ CMIUtilString::Format("%d", vBrkPt.GetThreadIndex()));
+ const CMICmnMIValueConst miValueConst5(strThreadId);
+ const CMICmnMIValueResult miValueResult5("thread-id", miValueConst5);
+ miOutOfBandRecord.Add(miValueResult5);
+ const CMICmnMIValueConst miValueConst6("all");
+ const CMICmnMIValueResult miValueResult6("stopped-threads", miValueConst6);
+ miOutOfBandRecord.Add(miValueResult6);
+ bOk = bOk && MiOutOfBandRecordToStdout(miOutOfBandRecord);
+ bOk = bOk && CMICmnStreamStdout::WritePrompt();
+ return bOk;
+ }
- // Add to MI thread-id=\"%d\",stopped-threads=\"all\"
- if (bOk)
- {
- const CMIUtilString strThreadId(CMIUtilString::Format("%d", thread.GetIndexID()));
- const CMICmnMIValueConst miValueConst8(strThreadId);
- const CMICmnMIValueResult miValueResult8("thread-id", miValueConst8);
- miOutOfBandRecord.Add(miValueResult8);
- }
- if (bOk)
- {
- const CMICmnMIValueConst miValueConst9("all");
- const CMICmnMIValueResult miValueResult9("stopped-threads", miValueConst9);
- miOutOfBandRecord.Add(miValueResult9);
- bOk = MiOutOfBandRecordToStdout(miOutOfBandRecord);
- bOk = bOk && CMICmnStreamStdout::WritePrompt();
- }
+ CMICmnLLDBDebugSessionInfo &rSessionInfo(
+ CMICmnLLDBDebugSessionInfo::Instance());
- return MIstatus::success;
+ // MI print
+ // "*stopped,reason=\"breakpoint-hit\",disp=\"del\",bkptno=\"%d\",frame={addr=\"0x%016"
+ // PRIx64
+ // "\",func=\"%s\",args=[],file=\"%s\",fullname=\"%s\",line=\"%d\"},thread-id=\"%d\",stopped-threads=\"all\""
+ const CMICmnMIValueConst miValueConst("breakpoint-hit");
+ const CMICmnMIValueResult miValueResult("reason", miValueConst);
+ CMICmnMIOutOfBandRecord miOutOfBandRecord(
+ CMICmnMIOutOfBandRecord::eOutOfBand_Stopped, miValueResult);
+ const CMICmnMIValueConst miValueConstA("del");
+ const CMICmnMIValueResult miValueResultA("disp", miValueConstA);
+ miOutOfBandRecord.Add(miValueResultA);
+ const CMIUtilString strBkp(CMIUtilString::Format("%d", vBrkPtId));
+ const CMICmnMIValueConst miValueConstB(strBkp);
+ CMICmnMIValueResult miValueResultB("bkptno", miValueConstB);
+ miOutOfBandRecord.Add(miValueResultB);
+
+ // frame={addr=\"0x%016" PRIx64
+ // "\",func=\"%s\",args=[],file=\"%s\",fullname=\"%s\",line=\"%d\"}
+ if (bOk) {
+ CMICmnMIValueTuple miValueTuple;
+ bOk = bOk &&
+ rSessionInfo.MIResponseFormFrameInfo(
+ thread, 0,
+ CMICmnLLDBDebugSessionInfo::eFrameInfoFormat_AllArguments,
+ miValueTuple);
+ const CMICmnMIValueResult miValueResult8("frame", miValueTuple);
+ miOutOfBandRecord.Add(miValueResult8);
+ }
+
+ // Add to MI thread-id=\"%d\",stopped-threads=\"all\"
+ if (bOk) {
+ const CMIUtilString strThreadId(
+ CMIUtilString::Format("%d", thread.GetIndexID()));
+ const CMICmnMIValueConst miValueConst8(strThreadId);
+ const CMICmnMIValueResult miValueResult8("thread-id", miValueConst8);
+ miOutOfBandRecord.Add(miValueResult8);
+ }
+ if (bOk) {
+ const CMICmnMIValueConst miValueConst9("all");
+ const CMICmnMIValueResult miValueResult9("stopped-threads", miValueConst9);
+ miOutOfBandRecord.Add(miValueResult9);
+ bOk = MiOutOfBandRecordToStdout(miOutOfBandRecord);
+ bOk = bOk && CMICmnStreamStdout::WritePrompt();
+ }
+
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Asynchronous event handler for LLDB Process stop reason trace.
// Type: Method.
// Args: None.
@@ -1362,59 +1424,65 @@ CMICmnLLDBDebuggerHandleEvents::MiStoppe
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebuggerHandleEvents::HandleProcessEventStopReasonTrace()
-{
- bool bOk = true;
- lldb::SBProcess sbProcess = CMICmnLLDBDebugSessionInfo::Instance().GetProcess();
- lldb::SBThread thread = sbProcess.GetSelectedThread();
- const MIuint nFrame = thread.GetNumFrames();
- if (nFrame == 0)
- {
- // MI print "*stopped,reason=\"trace\",stopped-threads=\"all\""
- const CMICmnMIValueConst miValueConst("trace");
- const CMICmnMIValueResult miValueResult("reason", miValueConst);
- CMICmnMIOutOfBandRecord miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_Stopped, miValueResult);
- const CMICmnMIValueConst miValueConst2("all");
- const CMICmnMIValueResult miValueResult2("stopped-threads", miValueConst2);
- miOutOfBandRecord.Add(miValueResult2);
- bOk = MiOutOfBandRecordToStdout(miOutOfBandRecord);
- bOk = bOk && CMICmnStreamStdout::WritePrompt();
- return bOk;
- }
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(CMICmnLLDBDebugSessionInfo::Instance());
-
- // MI print
- // "*stopped,reason=\"end-stepping-range\",frame={addr=\"0x%016" PRIx64 "\",func=\"%s\",args=[\"%s\"],file=\"%s\",fullname=\"%s\",line=\"%d\"},thread-id=\"%d\",stopped-threads=\"all\""
-
- // Function args
- CMICmnMIValueTuple miValueTuple;
- if (!rSessionInfo.MIResponseFormFrameInfo(thread, 0, CMICmnLLDBDebugSessionInfo::eFrameInfoFormat_AllArguments, miValueTuple))
- return MIstatus::failure;
-
- const CMICmnMIValueConst miValueConst("end-stepping-range");
+bool CMICmnLLDBDebuggerHandleEvents::HandleProcessEventStopReasonTrace() {
+ bool bOk = true;
+ lldb::SBProcess sbProcess =
+ CMICmnLLDBDebugSessionInfo::Instance().GetProcess();
+ lldb::SBThread thread = sbProcess.GetSelectedThread();
+ const MIuint nFrame = thread.GetNumFrames();
+ if (nFrame == 0) {
+ // MI print "*stopped,reason=\"trace\",stopped-threads=\"all\""
+ const CMICmnMIValueConst miValueConst("trace");
const CMICmnMIValueResult miValueResult("reason", miValueConst);
- CMICmnMIOutOfBandRecord miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_Stopped, miValueResult);
- const CMICmnMIValueResult miValueResult2("frame", miValueTuple);
+ CMICmnMIOutOfBandRecord miOutOfBandRecord(
+ CMICmnMIOutOfBandRecord::eOutOfBand_Stopped, miValueResult);
+ const CMICmnMIValueConst miValueConst2("all");
+ const CMICmnMIValueResult miValueResult2("stopped-threads", miValueConst2);
miOutOfBandRecord.Add(miValueResult2);
-
- // Add to MI thread-id=\"%d\",stopped-threads=\"all\"
- const CMIUtilString strThreadId(CMIUtilString::Format("%d", thread.GetIndexID()));
- const CMICmnMIValueConst miValueConst8(strThreadId);
- const CMICmnMIValueResult miValueResult8("thread-id", miValueConst8);
- miOutOfBandRecord.Add(miValueResult8);
-
- const CMICmnMIValueConst miValueConst9("all");
- const CMICmnMIValueResult miValueResult9("stopped-threads", miValueConst9);
- miOutOfBandRecord.Add(miValueResult9);
bOk = MiOutOfBandRecordToStdout(miOutOfBandRecord);
bOk = bOk && CMICmnStreamStdout::WritePrompt();
-
return bOk;
+ }
+
+ CMICmnLLDBDebugSessionInfo &rSessionInfo(
+ CMICmnLLDBDebugSessionInfo::Instance());
+
+ // MI print
+ // "*stopped,reason=\"end-stepping-range\",frame={addr=\"0x%016" PRIx64
+ // "\",func=\"%s\",args=[\"%s\"],file=\"%s\",fullname=\"%s\",line=\"%d\"},thread-id=\"%d\",stopped-threads=\"all\""
+
+ // Function args
+ CMICmnMIValueTuple miValueTuple;
+ if (!rSessionInfo.MIResponseFormFrameInfo(
+ thread, 0, CMICmnLLDBDebugSessionInfo::eFrameInfoFormat_AllArguments,
+ miValueTuple))
+ return MIstatus::failure;
+
+ const CMICmnMIValueConst miValueConst("end-stepping-range");
+ const CMICmnMIValueResult miValueResult("reason", miValueConst);
+ CMICmnMIOutOfBandRecord miOutOfBandRecord(
+ CMICmnMIOutOfBandRecord::eOutOfBand_Stopped, miValueResult);
+ const CMICmnMIValueResult miValueResult2("frame", miValueTuple);
+ miOutOfBandRecord.Add(miValueResult2);
+
+ // Add to MI thread-id=\"%d\",stopped-threads=\"all\"
+ const CMIUtilString strThreadId(
+ CMIUtilString::Format("%d", thread.GetIndexID()));
+ const CMICmnMIValueConst miValueConst8(strThreadId);
+ const CMICmnMIValueResult miValueResult8("thread-id", miValueConst8);
+ miOutOfBandRecord.Add(miValueResult8);
+
+ const CMICmnMIValueConst miValueConst9("all");
+ const CMICmnMIValueResult miValueResult9("stopped-threads", miValueConst9);
+ miOutOfBandRecord.Add(miValueResult9);
+ bOk = MiOutOfBandRecordToStdout(miOutOfBandRecord);
+ bOk = bOk && CMICmnStreamStdout::WritePrompt();
+
+ return bOk;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Asynchronous function update selected thread.
// Type: Method.
// Args: None.
@@ -1422,70 +1490,72 @@ CMICmnLLDBDebuggerHandleEvents::HandlePr
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebuggerHandleEvents::UpdateSelectedThread()
-{
- lldb::SBProcess process = CMICmnLLDBDebugSessionInfo::Instance().GetDebugger().GetSelectedTarget().GetProcess();
- if (!process.IsValid())
- return MIstatus::success;
-
- lldb::SBThread currentThread = process.GetSelectedThread();
- lldb::SBThread thread;
- const lldb::StopReason eCurrentThreadStoppedReason = currentThread.GetStopReason();
- if (!currentThread.IsValid() || (eCurrentThreadStoppedReason == lldb::eStopReasonInvalid) ||
- (eCurrentThreadStoppedReason == lldb::eStopReasonNone))
- {
- // Prefer a thread that has just completed its plan over another thread as current thread
- lldb::SBThread planThread;
- lldb::SBThread otherThread;
- const size_t nThread = process.GetNumThreads();
- for (MIuint i = 0; i < nThread; i++)
- {
- // GetThreadAtIndex() uses a base 0 index
- // GetThreadByIndexID() uses a base 1 index
- thread = process.GetThreadAtIndex(i);
- const lldb::StopReason eThreadStopReason = thread.GetStopReason();
- switch (eThreadStopReason)
- {
- case lldb::eStopReasonTrace:
- case lldb::eStopReasonBreakpoint:
- case lldb::eStopReasonWatchpoint:
- case lldb::eStopReasonSignal:
- case lldb::eStopReasonException:
- if (!otherThread.IsValid())
- otherThread = thread;
- break;
- case lldb::eStopReasonPlanComplete:
- if (!planThread.IsValid())
- planThread = thread;
- break;
- case lldb::eStopReasonInvalid:
- case lldb::eStopReasonNone:
- default:
- break;
- }
- }
- if (planThread.IsValid())
- process.SetSelectedThread(planThread);
- else if (otherThread.IsValid())
- process.SetSelectedThread(otherThread);
- else
- {
- if (currentThread.IsValid())
- thread = currentThread;
- else
- thread = process.GetThreadAtIndex(0);
+bool CMICmnLLDBDebuggerHandleEvents::UpdateSelectedThread() {
+ lldb::SBProcess process = CMICmnLLDBDebugSessionInfo::Instance()
+ .GetDebugger()
+ .GetSelectedTarget()
+ .GetProcess();
+ if (!process.IsValid())
+ return MIstatus::success;
- if (thread.IsValid())
- process.SetSelectedThread(thread);
- }
- } // if( !currentThread.IsValid() || (eCurrentThreadStoppedReason == lldb::eStopReasonInvalid) || (eCurrentThreadStoppedReason ==
- // lldb::eStopReasonNone) )
+ lldb::SBThread currentThread = process.GetSelectedThread();
+ lldb::SBThread thread;
+ const lldb::StopReason eCurrentThreadStoppedReason =
+ currentThread.GetStopReason();
+ if (!currentThread.IsValid() ||
+ (eCurrentThreadStoppedReason == lldb::eStopReasonInvalid) ||
+ (eCurrentThreadStoppedReason == lldb::eStopReasonNone)) {
+ // Prefer a thread that has just completed its plan over another thread as
+ // current thread
+ lldb::SBThread planThread;
+ lldb::SBThread otherThread;
+ const size_t nThread = process.GetNumThreads();
+ for (MIuint i = 0; i < nThread; i++) {
+ // GetThreadAtIndex() uses a base 0 index
+ // GetThreadByIndexID() uses a base 1 index
+ thread = process.GetThreadAtIndex(i);
+ const lldb::StopReason eThreadStopReason = thread.GetStopReason();
+ switch (eThreadStopReason) {
+ case lldb::eStopReasonTrace:
+ case lldb::eStopReasonBreakpoint:
+ case lldb::eStopReasonWatchpoint:
+ case lldb::eStopReasonSignal:
+ case lldb::eStopReasonException:
+ if (!otherThread.IsValid())
+ otherThread = thread;
+ break;
+ case lldb::eStopReasonPlanComplete:
+ if (!planThread.IsValid())
+ planThread = thread;
+ break;
+ case lldb::eStopReasonInvalid:
+ case lldb::eStopReasonNone:
+ default:
+ break;
+ }
+ }
+ if (planThread.IsValid())
+ process.SetSelectedThread(planThread);
+ else if (otherThread.IsValid())
+ process.SetSelectedThread(otherThread);
+ else {
+ if (currentThread.IsValid())
+ thread = currentThread;
+ else
+ thread = process.GetThreadAtIndex(0);
+
+ if (thread.IsValid())
+ process.SetSelectedThread(thread);
+ }
+ } // if( !currentThread.IsValid() || (eCurrentThreadStoppedReason ==
+ // lldb::eStopReasonInvalid) || (eCurrentThreadStoppedReason ==
+ // lldb::eStopReasonNone) )
- return MIstatus::success;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Print to stdout "*running,thread-id=\"all\"", "(gdb)".
// Type: Method.
// Args: None.
@@ -1493,19 +1563,19 @@ CMICmnLLDBDebuggerHandleEvents::UpdateSe
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebuggerHandleEvents::HandleProcessEventStateRunning()
-{
- CMICmnMIValueConst miValueConst("all");
- CMICmnMIValueResult miValueResult("thread-id", miValueConst);
- CMICmnMIOutOfBandRecord miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_Running, miValueResult);
- bool bOk = MiOutOfBandRecordToStdout(miOutOfBandRecord);
- bOk = bOk && CMICmnStreamStdout::WritePrompt();
+bool CMICmnLLDBDebuggerHandleEvents::HandleProcessEventStateRunning() {
+ CMICmnMIValueConst miValueConst("all");
+ CMICmnMIValueResult miValueResult("thread-id", miValueConst);
+ CMICmnMIOutOfBandRecord miOutOfBandRecord(
+ CMICmnMIOutOfBandRecord::eOutOfBand_Running, miValueResult);
+ bool bOk = MiOutOfBandRecordToStdout(miOutOfBandRecord);
+ bOk = bOk && CMICmnStreamStdout::WritePrompt();
- return bOk;
+ return bOk;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Print to stdout "=thread-exited,id=\"%ld\",group-id=\"i1\"",
// "=thread-group-exited,id=\"i1\",exit-code=\"0\""),
// "*stopped,reason=\"exited-normally\"",
@@ -1516,42 +1586,44 @@ CMICmnLLDBDebuggerHandleEvents::HandlePr
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebuggerHandleEvents::HandleProcessEventStateExited()
-{
- const CMIUtilString strId(CMIUtilString::Format("%ld", 1));
- CMICmnMIValueConst miValueConst(strId);
- CMICmnMIValueResult miValueResult("id", miValueConst);
- CMICmnMIOutOfBandRecord miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_ThreadExited, miValueResult);
- CMICmnMIValueConst miValueConst2("i1");
- CMICmnMIValueResult miValueResult2("group-id", miValueConst2);
- miOutOfBandRecord.Add(miValueResult2);
- bool bOk = MiOutOfBandRecordToStdout(miOutOfBandRecord);
- if (bOk)
- {
- CMICmnMIValueConst miValueConst3("i1");
- CMICmnMIValueResult miValueResult3("id", miValueConst3);
- CMICmnMIOutOfBandRecord miOutOfBandRecord2(CMICmnMIOutOfBandRecord::eOutOfBand_ThreadGroupExited, miValueResult3);
- CMICmnMIValueConst miValueConst2("0");
- CMICmnMIValueResult miValueResult2("exit-code", miValueConst2);
- miOutOfBandRecord2.Add(miValueResult2);
- bOk = bOk && MiOutOfBandRecordToStdout(miOutOfBandRecord2);
- }
- if (bOk)
- {
- CMICmnMIValueConst miValueConst4("exited-normally");
- CMICmnMIValueResult miValueResult4("reason", miValueConst4);
- CMICmnMIOutOfBandRecord miOutOfBandRecord3(CMICmnMIOutOfBandRecord::eOutOfBand_Stopped, miValueResult4);
- bOk = MiOutOfBandRecordToStdout(miOutOfBandRecord3);
- }
- bOk = bOk && CMICmnStreamStdout::WritePrompt();
-
- return bOk;
-}
-
-//++ ------------------------------------------------------------------------------------
-// Details: Drain all stdout so we don't see any output come after we print our prompts.
-// The process has stuff waiting for stdout; get it and write it out to the
+bool CMICmnLLDBDebuggerHandleEvents::HandleProcessEventStateExited() {
+ const CMIUtilString strId(CMIUtilString::Format("%ld", 1));
+ CMICmnMIValueConst miValueConst(strId);
+ CMICmnMIValueResult miValueResult("id", miValueConst);
+ CMICmnMIOutOfBandRecord miOutOfBandRecord(
+ CMICmnMIOutOfBandRecord::eOutOfBand_ThreadExited, miValueResult);
+ CMICmnMIValueConst miValueConst2("i1");
+ CMICmnMIValueResult miValueResult2("group-id", miValueConst2);
+ miOutOfBandRecord.Add(miValueResult2);
+ bool bOk = MiOutOfBandRecordToStdout(miOutOfBandRecord);
+ if (bOk) {
+ CMICmnMIValueConst miValueConst3("i1");
+ CMICmnMIValueResult miValueResult3("id", miValueConst3);
+ CMICmnMIOutOfBandRecord miOutOfBandRecord2(
+ CMICmnMIOutOfBandRecord::eOutOfBand_ThreadGroupExited, miValueResult3);
+ CMICmnMIValueConst miValueConst2("0");
+ CMICmnMIValueResult miValueResult2("exit-code", miValueConst2);
+ miOutOfBandRecord2.Add(miValueResult2);
+ bOk = bOk && MiOutOfBandRecordToStdout(miOutOfBandRecord2);
+ }
+ if (bOk) {
+ CMICmnMIValueConst miValueConst4("exited-normally");
+ CMICmnMIValueResult miValueResult4("reason", miValueConst4);
+ CMICmnMIOutOfBandRecord miOutOfBandRecord3(
+ CMICmnMIOutOfBandRecord::eOutOfBand_Stopped, miValueResult4);
+ bOk = MiOutOfBandRecordToStdout(miOutOfBandRecord3);
+ }
+ bOk = bOk && CMICmnStreamStdout::WritePrompt();
+
+ return bOk;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: Drain all stdout so we don't see any output come after we print our
+// prompts.
+// The process has stuff waiting for stdout; get it and write it out to
+// the
// appropriate place.
// Type: Method.
// Args: None.
@@ -1559,52 +1631,55 @@ CMICmnLLDBDebuggerHandleEvents::HandlePr
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebuggerHandleEvents::GetProcessStdout()
-{
- CMIUtilString text;
- std::unique_ptr<char[]> apStdoutBuffer(new char[1024]);
- lldb::SBProcess process = CMICmnLLDBDebugSessionInfo::Instance().GetDebugger().GetSelectedTarget().GetProcess();
- while (1)
- {
- const size_t nBytes = process.GetSTDOUT(apStdoutBuffer.get(), 1024);
- text.append(apStdoutBuffer.get(), nBytes);
-
- while (1)
- {
- const size_t nNewLine = text.find('\n');
- if (nNewLine == std::string::npos)
- break;
-
- const CMIUtilString line(text.substr(0, nNewLine + 1));
- text.erase(0, nNewLine + 1);
- const bool bEscapeQuotes(true);
- CMICmnMIValueConst miValueConst(line.Escape(bEscapeQuotes));
- CMICmnMIOutOfBandRecord miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_TargetStreamOutput, miValueConst);
- const bool bOk = MiOutOfBandRecordToStdout(miOutOfBandRecord);
- if (!bOk)
- return MIstatus::failure;
- }
-
- if (nBytes == 0)
- {
- if (!text.empty())
- {
- const bool bEscapeQuotes(true);
- CMICmnMIValueConst miValueConst(text.Escape(bEscapeQuotes));
- CMICmnMIOutOfBandRecord miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_TargetStreamOutput, miValueConst);
- return MiOutOfBandRecordToStdout(miOutOfBandRecord);
- }
- break;
- }
+bool CMICmnLLDBDebuggerHandleEvents::GetProcessStdout() {
+ CMIUtilString text;
+ std::unique_ptr<char[]> apStdoutBuffer(new char[1024]);
+ lldb::SBProcess process = CMICmnLLDBDebugSessionInfo::Instance()
+ .GetDebugger()
+ .GetSelectedTarget()
+ .GetProcess();
+ while (1) {
+ const size_t nBytes = process.GetSTDOUT(apStdoutBuffer.get(), 1024);
+ text.append(apStdoutBuffer.get(), nBytes);
+
+ while (1) {
+ const size_t nNewLine = text.find('\n');
+ if (nNewLine == std::string::npos)
+ break;
+
+ const CMIUtilString line(text.substr(0, nNewLine + 1));
+ text.erase(0, nNewLine + 1);
+ const bool bEscapeQuotes(true);
+ CMICmnMIValueConst miValueConst(line.Escape(bEscapeQuotes));
+ CMICmnMIOutOfBandRecord miOutOfBandRecord(
+ CMICmnMIOutOfBandRecord::eOutOfBand_TargetStreamOutput, miValueConst);
+ const bool bOk = MiOutOfBandRecordToStdout(miOutOfBandRecord);
+ if (!bOk)
+ return MIstatus::failure;
}
- return MIstatus::success;
-}
-
-//++ ------------------------------------------------------------------------------------
-// Details: Drain all stderr so we don't see any output come after we print our prompts.
-// The process has stuff waiting for stderr; get it and write it out to the
+ if (nBytes == 0) {
+ if (!text.empty()) {
+ const bool bEscapeQuotes(true);
+ CMICmnMIValueConst miValueConst(text.Escape(bEscapeQuotes));
+ CMICmnMIOutOfBandRecord miOutOfBandRecord(
+ CMICmnMIOutOfBandRecord::eOutOfBand_TargetStreamOutput,
+ miValueConst);
+ return MiOutOfBandRecordToStdout(miOutOfBandRecord);
+ }
+ break;
+ }
+ }
+
+ return MIstatus::success;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: Drain all stderr so we don't see any output come after we print our
+// prompts.
+// The process has stuff waiting for stderr; get it and write it out to
+// the
// appropriate place.
// Type: Method.
// Args: None.
@@ -1612,49 +1687,50 @@ CMICmnLLDBDebuggerHandleEvents::GetProce
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebuggerHandleEvents::GetProcessStderr()
-{
- CMIUtilString text;
- std::unique_ptr<char[]> apStderrBuffer(new char[1024]);
- lldb::SBProcess process = CMICmnLLDBDebugSessionInfo::Instance().GetDebugger().GetSelectedTarget().GetProcess();
- while (1)
- {
- const size_t nBytes = process.GetSTDERR(apStderrBuffer.get(), 1024);
- text.append(apStderrBuffer.get(), nBytes);
-
- while (1)
- {
- const size_t nNewLine = text.find('\n');
- if (nNewLine == std::string::npos)
- break;
-
- const CMIUtilString line(text.substr(0, nNewLine + 1));
- const bool bEscapeQuotes(true);
- CMICmnMIValueConst miValueConst(line.Escape(bEscapeQuotes));
- CMICmnMIOutOfBandRecord miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_TargetStreamOutput, miValueConst);
- const bool bOk = MiOutOfBandRecordToStdout(miOutOfBandRecord);
- if (!bOk)
- return MIstatus::failure;
- }
+bool CMICmnLLDBDebuggerHandleEvents::GetProcessStderr() {
+ CMIUtilString text;
+ std::unique_ptr<char[]> apStderrBuffer(new char[1024]);
+ lldb::SBProcess process = CMICmnLLDBDebugSessionInfo::Instance()
+ .GetDebugger()
+ .GetSelectedTarget()
+ .GetProcess();
+ while (1) {
+ const size_t nBytes = process.GetSTDERR(apStderrBuffer.get(), 1024);
+ text.append(apStderrBuffer.get(), nBytes);
+
+ while (1) {
+ const size_t nNewLine = text.find('\n');
+ if (nNewLine == std::string::npos)
+ break;
+
+ const CMIUtilString line(text.substr(0, nNewLine + 1));
+ const bool bEscapeQuotes(true);
+ CMICmnMIValueConst miValueConst(line.Escape(bEscapeQuotes));
+ CMICmnMIOutOfBandRecord miOutOfBandRecord(
+ CMICmnMIOutOfBandRecord::eOutOfBand_TargetStreamOutput, miValueConst);
+ const bool bOk = MiOutOfBandRecordToStdout(miOutOfBandRecord);
+ if (!bOk)
+ return MIstatus::failure;
+ }
- if (nBytes == 0)
- {
- if (!text.empty())
- {
- const bool bEscapeQuotes(true);
- CMICmnMIValueConst miValueConst(text.Escape(bEscapeQuotes));
- CMICmnMIOutOfBandRecord miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_TargetStreamOutput, miValueConst);
- return MiOutOfBandRecordToStdout(miOutOfBandRecord);
- }
- break;
- }
+ if (nBytes == 0) {
+ if (!text.empty()) {
+ const bool bEscapeQuotes(true);
+ CMICmnMIValueConst miValueConst(text.Escape(bEscapeQuotes));
+ CMICmnMIOutOfBandRecord miOutOfBandRecord(
+ CMICmnMIOutOfBandRecord::eOutOfBand_TargetStreamOutput,
+ miValueConst);
+ return MiOutOfBandRecordToStdout(miOutOfBandRecord);
+ }
+ break;
}
+ }
- return MIstatus::success;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Asynchronous event function check for state changes.
// Type: Method.
// Args: None.
@@ -1662,94 +1738,95 @@ CMICmnLLDBDebuggerHandleEvents::GetProce
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebuggerHandleEvents::ChkForStateChanges()
-{
- CMICmnLLDBDebugSessionInfo &rSessionInfo(CMICmnLLDBDebugSessionInfo::Instance());
- lldb::SBProcess sbProcess = rSessionInfo.GetProcess();
- if (!sbProcess.IsValid())
- return MIstatus::success;
-
- // Check for created threads
- const MIuint nThread = sbProcess.GetNumThreads();
- for (MIuint i = 0; i < nThread; i++)
- {
- // GetThreadAtIndex() uses a base 0 index
- // GetThreadByIndexID() uses a base 1 index
- lldb::SBThread thread = sbProcess.GetThreadAtIndex(i);
- if (!thread.IsValid())
- continue;
-
- const MIuint threadIndexID = thread.GetIndexID();
- const bool bFound = std::find(rSessionInfo.m_vecActiveThreadId.cbegin(), rSessionInfo.m_vecActiveThreadId.cend(), threadIndexID) != rSessionInfo.m_vecActiveThreadId.end();
- if (!bFound)
- {
- rSessionInfo.m_vecActiveThreadId.push_back(threadIndexID);
-
- // Form MI "=thread-created,id=\"%d\",group-id=\"i1\""
- const CMIUtilString strValue(CMIUtilString::Format("%d", threadIndexID));
- const CMICmnMIValueConst miValueConst(strValue);
- const CMICmnMIValueResult miValueResult("id", miValueConst);
- CMICmnMIOutOfBandRecord miOutOfBand(CMICmnMIOutOfBandRecord::eOutOfBand_ThreadCreated, miValueResult);
- const CMICmnMIValueConst miValueConst2("i1");
- const CMICmnMIValueResult miValueResult2("group-id", miValueConst2);
- miOutOfBand.Add(miValueResult2);
- bool bOk = MiOutOfBandRecordToStdout(miOutOfBand);
- if (!bOk)
- return MIstatus::failure;
- }
+bool CMICmnLLDBDebuggerHandleEvents::ChkForStateChanges() {
+ CMICmnLLDBDebugSessionInfo &rSessionInfo(
+ CMICmnLLDBDebugSessionInfo::Instance());
+ lldb::SBProcess sbProcess = rSessionInfo.GetProcess();
+ if (!sbProcess.IsValid())
+ return MIstatus::success;
+
+ // Check for created threads
+ const MIuint nThread = sbProcess.GetNumThreads();
+ for (MIuint i = 0; i < nThread; i++) {
+ // GetThreadAtIndex() uses a base 0 index
+ // GetThreadByIndexID() uses a base 1 index
+ lldb::SBThread thread = sbProcess.GetThreadAtIndex(i);
+ if (!thread.IsValid())
+ continue;
+
+ const MIuint threadIndexID = thread.GetIndexID();
+ const bool bFound =
+ std::find(rSessionInfo.m_vecActiveThreadId.cbegin(),
+ rSessionInfo.m_vecActiveThreadId.cend(),
+ threadIndexID) != rSessionInfo.m_vecActiveThreadId.end();
+ if (!bFound) {
+ rSessionInfo.m_vecActiveThreadId.push_back(threadIndexID);
+
+ // Form MI "=thread-created,id=\"%d\",group-id=\"i1\""
+ const CMIUtilString strValue(CMIUtilString::Format("%d", threadIndexID));
+ const CMICmnMIValueConst miValueConst(strValue);
+ const CMICmnMIValueResult miValueResult("id", miValueConst);
+ CMICmnMIOutOfBandRecord miOutOfBand(
+ CMICmnMIOutOfBandRecord::eOutOfBand_ThreadCreated, miValueResult);
+ const CMICmnMIValueConst miValueConst2("i1");
+ const CMICmnMIValueResult miValueResult2("group-id", miValueConst2);
+ miOutOfBand.Add(miValueResult2);
+ bool bOk = MiOutOfBandRecordToStdout(miOutOfBand);
+ if (!bOk)
+ return MIstatus::failure;
}
+ }
- lldb::SBThread currentThread = sbProcess.GetSelectedThread();
- if (currentThread.IsValid())
- {
- const MIuint currentThreadIndexID = currentThread.GetIndexID();
- if (rSessionInfo.m_currentSelectedThread != currentThreadIndexID)
- {
- rSessionInfo.m_currentSelectedThread = currentThreadIndexID;
-
- // Form MI "=thread-selected,id=\"%d\""
- const CMIUtilString strValue(CMIUtilString::Format("%d", currentThreadIndexID));
- const CMICmnMIValueConst miValueConst(strValue);
- const CMICmnMIValueResult miValueResult("id", miValueConst);
- CMICmnMIOutOfBandRecord miOutOfBand(CMICmnMIOutOfBandRecord::eOutOfBand_ThreadSelected, miValueResult);
- if (!MiOutOfBandRecordToStdout(miOutOfBand))
- return MIstatus::failure;
- }
+ lldb::SBThread currentThread = sbProcess.GetSelectedThread();
+ if (currentThread.IsValid()) {
+ const MIuint currentThreadIndexID = currentThread.GetIndexID();
+ if (rSessionInfo.m_currentSelectedThread != currentThreadIndexID) {
+ rSessionInfo.m_currentSelectedThread = currentThreadIndexID;
+
+ // Form MI "=thread-selected,id=\"%d\""
+ const CMIUtilString strValue(
+ CMIUtilString::Format("%d", currentThreadIndexID));
+ const CMICmnMIValueConst miValueConst(strValue);
+ const CMICmnMIValueResult miValueResult("id", miValueConst);
+ CMICmnMIOutOfBandRecord miOutOfBand(
+ CMICmnMIOutOfBandRecord::eOutOfBand_ThreadSelected, miValueResult);
+ if (!MiOutOfBandRecordToStdout(miOutOfBand))
+ return MIstatus::failure;
}
+ }
- // Check for invalid (removed) threads
- CMICmnLLDBDebugSessionInfo::VecActiveThreadId_t::iterator it = rSessionInfo.m_vecActiveThreadId.begin();
- while (it != rSessionInfo.m_vecActiveThreadId.end())
- {
- const MIuint threadIndexID = *it;
- lldb::SBThread thread = sbProcess.GetThreadByIndexID(threadIndexID);
- if (!thread.IsValid())
- {
- // Form MI "=thread-exited,id=\"%ld\",group-id=\"i1\""
- const CMIUtilString strValue(CMIUtilString::Format("%ld", threadIndexID));
- const CMICmnMIValueConst miValueConst(strValue);
- const CMICmnMIValueResult miValueResult("id", miValueConst);
- CMICmnMIOutOfBandRecord miOutOfBand(CMICmnMIOutOfBandRecord::eOutOfBand_ThreadExited, miValueResult);
- const CMICmnMIValueConst miValueConst2("i1");
- const CMICmnMIValueResult miValueResult2("group-id", miValueConst2);
- miOutOfBand.Add(miValueResult2);
- bool bOk = MiOutOfBandRecordToStdout(miOutOfBand);
- if (!bOk)
- return MIstatus::failure;
+ // Check for invalid (removed) threads
+ CMICmnLLDBDebugSessionInfo::VecActiveThreadId_t::iterator it =
+ rSessionInfo.m_vecActiveThreadId.begin();
+ while (it != rSessionInfo.m_vecActiveThreadId.end()) {
+ const MIuint threadIndexID = *it;
+ lldb::SBThread thread = sbProcess.GetThreadByIndexID(threadIndexID);
+ if (!thread.IsValid()) {
+ // Form MI "=thread-exited,id=\"%ld\",group-id=\"i1\""
+ const CMIUtilString strValue(CMIUtilString::Format("%ld", threadIndexID));
+ const CMICmnMIValueConst miValueConst(strValue);
+ const CMICmnMIValueResult miValueResult("id", miValueConst);
+ CMICmnMIOutOfBandRecord miOutOfBand(
+ CMICmnMIOutOfBandRecord::eOutOfBand_ThreadExited, miValueResult);
+ const CMICmnMIValueConst miValueConst2("i1");
+ const CMICmnMIValueResult miValueResult2("group-id", miValueConst2);
+ miOutOfBand.Add(miValueResult2);
+ bool bOk = MiOutOfBandRecordToStdout(miOutOfBand);
+ if (!bOk)
+ return MIstatus::failure;
- // Remove current thread from cache and get next
- it = rSessionInfo.m_vecActiveThreadId.erase(it);
- }
- else
- // Next
- ++it;
- }
+ // Remove current thread from cache and get next
+ it = rSessionInfo.m_vecActiveThreadId.erase(it);
+ } else
+ // Next
+ ++it;
+ }
- return CMICmnStreamStdout::WritePrompt();
+ return CMICmnStreamStdout::WritePrompt();
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Take a fully formed MI result record and send to the stdout stream.
// Also output to the MI Log file.
// Type: Method.
@@ -1758,14 +1835,15 @@ CMICmnLLDBDebuggerHandleEvents::ChkForSt
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebuggerHandleEvents::MiResultRecordToStdout(const CMICmnMIResultRecord &vrMiResultRecord)
-{
- return TextToStdout(vrMiResultRecord.GetString());
+bool CMICmnLLDBDebuggerHandleEvents::MiResultRecordToStdout(
+ const CMICmnMIResultRecord &vrMiResultRecord) {
+ return TextToStdout(vrMiResultRecord.GetString());
}
-//++ ------------------------------------------------------------------------------------
-// Details: Take a fully formed MI Out-of-band record and send to the stdout stream.
+//++
+//------------------------------------------------------------------------------------
+// Details: Take a fully formed MI Out-of-band record and send to the stdout
+// stream.
// Also output to the MI Log file.
// Type: Method.
// Args: vrMiOutOfBandRecord - (R) MI Out-of-band record object.
@@ -1773,14 +1851,15 @@ CMICmnLLDBDebuggerHandleEvents::MiResult
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebuggerHandleEvents::MiOutOfBandRecordToStdout(const CMICmnMIOutOfBandRecord &vrMiOutOfBandRecord)
-{
- return TextToStdout(vrMiOutOfBandRecord.GetString());
+bool CMICmnLLDBDebuggerHandleEvents::MiOutOfBandRecordToStdout(
+ const CMICmnMIOutOfBandRecord &vrMiOutOfBandRecord) {
+ return TextToStdout(vrMiOutOfBandRecord.GetString());
}
-//++ ------------------------------------------------------------------------------------
-// Details: Take a text data and send to the stdout stream. Also output to the MI Log
+//++
+//------------------------------------------------------------------------------------
+// Details: Take a text data and send to the stdout stream. Also output to the
+// MI Log
// file.
// Type: Method.
// Args: vrTxt - (R) Text.
@@ -1788,14 +1867,14 @@ CMICmnLLDBDebuggerHandleEvents::MiOutOfB
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebuggerHandleEvents::TextToStdout(const CMIUtilString &vrTxt)
-{
- return CMICmnStreamStdout::TextToStdout(vrTxt);
+bool CMICmnLLDBDebuggerHandleEvents::TextToStdout(const CMIUtilString &vrTxt) {
+ return CMICmnStreamStdout::TextToStdout(vrTxt);
}
-//++ ------------------------------------------------------------------------------------
-// Details: Take a text data and send to the stderr stream. Also output to the MI Log
+//++
+//------------------------------------------------------------------------------------
+// Details: Take a text data and send to the stderr stream. Also output to the
+// MI Log
// file.
// Type: Method.
// Args: vrTxt - (R) Text.
@@ -1803,34 +1882,31 @@ CMICmnLLDBDebuggerHandleEvents::TextToSt
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBDebuggerHandleEvents::TextToStderr(const CMIUtilString &vrTxt)
-{
- return CMICmnStreamStderr::TextToStderr(vrTxt);
+bool CMICmnLLDBDebuggerHandleEvents::TextToStderr(const CMIUtilString &vrTxt) {
+ return CMICmnStreamStderr::TextToStderr(vrTxt);
}
-//++ ------------------------------------------------------------------------------------
-// Details: Initialize the member variables with the signal values in this process
+//++
+//------------------------------------------------------------------------------------
+// Details: Initialize the member variables with the signal values in this
+// process
// file.
// Type: Method.
// Args: None
// Return: Noen
// Throws: None.
//--
-void
-CMICmnLLDBDebuggerHandleEvents::InitializeSignals()
-{
- if (!m_bSignalsInitialized)
- {
- lldb::SBProcess sbProcess = CMICmnLLDBDebugSessionInfo::Instance().GetProcess();
- if (sbProcess.IsValid())
- {
- lldb::SBUnixSignals unix_signals = sbProcess.GetUnixSignals();
- m_SIGINT = unix_signals.GetSignalNumberFromName("SIGINT");
- m_SIGSTOP = unix_signals.GetSignalNumberFromName("SIGSTOP");
- m_SIGSEGV = unix_signals.GetSignalNumberFromName("SIGSEGV");
- m_SIGTRAP = unix_signals.GetSignalNumberFromName("SIGTRAP");
- m_bSignalsInitialized = true;
- }
+void CMICmnLLDBDebuggerHandleEvents::InitializeSignals() {
+ if (!m_bSignalsInitialized) {
+ lldb::SBProcess sbProcess =
+ CMICmnLLDBDebugSessionInfo::Instance().GetProcess();
+ if (sbProcess.IsValid()) {
+ lldb::SBUnixSignals unix_signals = sbProcess.GetUnixSignals();
+ m_SIGINT = unix_signals.GetSignalNumberFromName("SIGINT");
+ m_SIGSTOP = unix_signals.GetSignalNumberFromName("SIGSTOP");
+ m_SIGSEGV = unix_signals.GetSignalNumberFromName("SIGSEGV");
+ m_SIGTRAP = unix_signals.GetSignalNumberFromName("SIGTRAP");
+ m_bSignalsInitialized = true;
}
+ }
}
Modified: lldb/trunk/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.h?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.h Tue Sep 6 15:57:50 2016
@@ -21,71 +21,79 @@ class CMICmnMIResultRecord;
class CMICmnStreamStdout;
class CMICmnMIOutOfBandRecord;
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI class to take LLDB SBEvent objects, filter them and form
// MI Out-of-band records from the information inside the event object.
// These records are then pushed to stdout.
// A singleton class.
//--
-class CMICmnLLDBDebuggerHandleEvents : public CMICmnBase, public MI::ISingleton<CMICmnLLDBDebuggerHandleEvents>
-{
- friend class MI::ISingleton<CMICmnLLDBDebuggerHandleEvents>;
+class CMICmnLLDBDebuggerHandleEvents
+ : public CMICmnBase,
+ public MI::ISingleton<CMICmnLLDBDebuggerHandleEvents> {
+ friend class MI::ISingleton<CMICmnLLDBDebuggerHandleEvents>;
- // Methods:
- public:
- bool Initialize() override;
- bool Shutdown() override;
- //
- bool HandleEvent(const lldb::SBEvent &vEvent, bool &vrbHandledEvent);
+ // Methods:
+public:
+ bool Initialize() override;
+ bool Shutdown() override;
+ //
+ bool HandleEvent(const lldb::SBEvent &vEvent, bool &vrbHandledEvent);
- // Methods:
- private:
- /* ctor */ CMICmnLLDBDebuggerHandleEvents();
- /* ctor */ CMICmnLLDBDebuggerHandleEvents(const CMICmnLLDBDebuggerHandleEvents &);
- void operator=(const CMICmnLLDBDebuggerHandleEvents &);
- //
- bool ChkForStateChanges();
- bool GetProcessStdout();
- bool GetProcessStderr();
- bool HandleEventSBBreakPoint(const lldb::SBEvent &vEvent);
- bool HandleEventSBBreakpointCmn(const lldb::SBEvent &vEvent);
- bool HandleEventSBBreakpointAdded(const lldb::SBEvent &vEvent);
- bool HandleEventSBBreakpointLocationsAdded(const lldb::SBEvent &vEvent);
- bool HandleEventSBProcess(const lldb::SBEvent &vEvent);
- bool HandleEventSBTarget(const lldb::SBEvent &vEvent);
- bool HandleEventSBThread(const lldb::SBEvent &vEvent);
- bool HandleEventSBThreadBitStackChanged(const lldb::SBEvent &vEvent);
- bool HandleEventSBThreadSuspended(const lldb::SBEvent &vEvent);
- bool HandleEventSBCommandInterpreter(const lldb::SBEvent &vEvent);
- bool HandleProcessEventBroadcastBitStateChanged(const lldb::SBEvent &vEvent);
- bool HandleProcessEventStateRunning();
- bool HandleProcessEventStateExited();
- bool HandleProcessEventStateStopped(const lldb::SBEvent &vrEvent, bool &vwrbShouldBrk);
- bool HandleProcessEventStopReasonTrace();
- bool HandleProcessEventStopReasonBreakpoint();
- bool HandleProcessEventStopSignal(const lldb::SBEvent &vrEvent);
- bool HandleProcessEventStopException();
- bool HandleProcessEventStateSuspended(const lldb::SBEvent &vEvent);
- bool HandleTargetEventBroadcastBitModulesLoaded(const lldb::SBEvent &vEvent);
- bool HandleTargetEventBroadcastBitModulesUnloaded(const lldb::SBEvent &vEvent);
- bool MiHelpGetModuleInfo(const lldb::SBModule &vModule, const bool vbWithExtraFields,
- CMICmnMIOutOfBandRecord &vwrMiOutOfBandRecord);
- bool MiHelpGetCurrentThreadFrame(CMICmnMIValueTuple &vwrMiValueTuple);
- bool MiResultRecordToStdout(const CMICmnMIResultRecord &vrMiResultRecord);
- bool MiOutOfBandRecordToStdout(const CMICmnMIOutOfBandRecord &vrMiResultRecord);
- bool MiStoppedAtBreakPoint(const MIuint64 vBrkPtId, const lldb::SBBreakpoint &vBrkPt);
- bool TextToStdout(const CMIUtilString &vrTxt);
- bool TextToStderr(const CMIUtilString &vrTxt);
- bool UpdateSelectedThread();
+ // Methods:
+private:
+ /* ctor */ CMICmnLLDBDebuggerHandleEvents();
+ /* ctor */ CMICmnLLDBDebuggerHandleEvents(
+ const CMICmnLLDBDebuggerHandleEvents &);
+ void operator=(const CMICmnLLDBDebuggerHandleEvents &);
+ //
+ bool ChkForStateChanges();
+ bool GetProcessStdout();
+ bool GetProcessStderr();
+ bool HandleEventSBBreakPoint(const lldb::SBEvent &vEvent);
+ bool HandleEventSBBreakpointCmn(const lldb::SBEvent &vEvent);
+ bool HandleEventSBBreakpointAdded(const lldb::SBEvent &vEvent);
+ bool HandleEventSBBreakpointLocationsAdded(const lldb::SBEvent &vEvent);
+ bool HandleEventSBProcess(const lldb::SBEvent &vEvent);
+ bool HandleEventSBTarget(const lldb::SBEvent &vEvent);
+ bool HandleEventSBThread(const lldb::SBEvent &vEvent);
+ bool HandleEventSBThreadBitStackChanged(const lldb::SBEvent &vEvent);
+ bool HandleEventSBThreadSuspended(const lldb::SBEvent &vEvent);
+ bool HandleEventSBCommandInterpreter(const lldb::SBEvent &vEvent);
+ bool HandleProcessEventBroadcastBitStateChanged(const lldb::SBEvent &vEvent);
+ bool HandleProcessEventStateRunning();
+ bool HandleProcessEventStateExited();
+ bool HandleProcessEventStateStopped(const lldb::SBEvent &vrEvent,
+ bool &vwrbShouldBrk);
+ bool HandleProcessEventStopReasonTrace();
+ bool HandleProcessEventStopReasonBreakpoint();
+ bool HandleProcessEventStopSignal(const lldb::SBEvent &vrEvent);
+ bool HandleProcessEventStopException();
+ bool HandleProcessEventStateSuspended(const lldb::SBEvent &vEvent);
+ bool HandleTargetEventBroadcastBitModulesLoaded(const lldb::SBEvent &vEvent);
+ bool
+ HandleTargetEventBroadcastBitModulesUnloaded(const lldb::SBEvent &vEvent);
+ bool MiHelpGetModuleInfo(const lldb::SBModule &vModule,
+ const bool vbWithExtraFields,
+ CMICmnMIOutOfBandRecord &vwrMiOutOfBandRecord);
+ bool MiHelpGetCurrentThreadFrame(CMICmnMIValueTuple &vwrMiValueTuple);
+ bool MiResultRecordToStdout(const CMICmnMIResultRecord &vrMiResultRecord);
+ bool
+ MiOutOfBandRecordToStdout(const CMICmnMIOutOfBandRecord &vrMiResultRecord);
+ bool MiStoppedAtBreakPoint(const MIuint64 vBrkPtId,
+ const lldb::SBBreakpoint &vBrkPt);
+ bool TextToStdout(const CMIUtilString &vrTxt);
+ bool TextToStderr(const CMIUtilString &vrTxt);
+ bool UpdateSelectedThread();
- // Overridden:
- private:
- // From CMICmnBase
- /* dtor */ ~CMICmnLLDBDebuggerHandleEvents() override;
- void InitializeSignals();
- bool m_bSignalsInitialized;
- MIuint64 m_SIGINT;
- MIuint64 m_SIGSTOP;
- MIuint64 m_SIGSEGV;
- MIuint64 m_SIGTRAP;
+ // Overridden:
+private:
+ // From CMICmnBase
+ /* dtor */ ~CMICmnLLDBDebuggerHandleEvents() override;
+ void InitializeSignals();
+ bool m_bSignalsInitialized;
+ MIuint64 m_SIGINT;
+ MIuint64 m_SIGSTOP;
+ MIuint64 m_SIGSEGV;
+ MIuint64 m_SIGTRAP;
};
Modified: lldb/trunk/tools/lldb-mi/MICmnLLDBProxySBValue.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnLLDBProxySBValue.cpp?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnLLDBProxySBValue.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmnLLDBProxySBValue.cpp Tue Sep 6 15:57:50 2016
@@ -13,13 +13,16 @@
#include "lldb/API/SBError.h"
// In-house headers:
+#include "MICmnLLDBDebugSessionInfo.h"
#include "MICmnLLDBProxySBValue.h"
#include "MIUtilString.h"
-#include "MICmnLLDBDebugSessionInfo.h"
-//++ ------------------------------------------------------------------------------------
-// Details: Retrieve the numerical value from the SBValue object. If the function fails
-// it could indicate the SBValue object does not represent an internal type.
+//++
+//------------------------------------------------------------------------------------
+// Details: Retrieve the numerical value from the SBValue object. If the
+// function fails
+// it could indicate the SBValue object does not represent an internal
+// type.
// Type: Static method.
// Args: vrValue - (R) The SBValue object to get a value from.
// vwValue - (W) The numerical value.
@@ -27,35 +30,33 @@
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBProxySBValue::GetValueAsUnsigned(const lldb::SBValue &vrValue, MIuint64 &vwValue)
-{
- lldb::SBValue &rValue = const_cast<lldb::SBValue &>(vrValue);
- bool bCompositeType = true;
- MIuint64 nFailValue = 0;
- MIuint64 nValue = rValue.GetValueAsUnsigned(nFailValue);
- if (nValue == nFailValue)
- {
- nFailValue = 5; // Some arbitrary number
- nValue = rValue.GetValueAsUnsigned(nFailValue);
- if (nValue != nFailValue)
- {
- bCompositeType = false;
- vwValue = nValue;
- }
- }
- else
- {
- bCompositeType = false;
- vwValue = nValue;
+bool CMICmnLLDBProxySBValue::GetValueAsUnsigned(const lldb::SBValue &vrValue,
+ MIuint64 &vwValue) {
+ lldb::SBValue &rValue = const_cast<lldb::SBValue &>(vrValue);
+ bool bCompositeType = true;
+ MIuint64 nFailValue = 0;
+ MIuint64 nValue = rValue.GetValueAsUnsigned(nFailValue);
+ if (nValue == nFailValue) {
+ nFailValue = 5; // Some arbitrary number
+ nValue = rValue.GetValueAsUnsigned(nFailValue);
+ if (nValue != nFailValue) {
+ bCompositeType = false;
+ vwValue = nValue;
}
+ } else {
+ bCompositeType = false;
+ vwValue = nValue;
+ }
- return (bCompositeType ? MIstatus::failure : MIstatus::success);
+ return (bCompositeType ? MIstatus::failure : MIstatus::success);
}
-//++ ------------------------------------------------------------------------------------
-// Details: Retrieve the numerical value from the SBValue object. If the function fails
-// it could indicate the SBValue object does not represent an internal type.
+//++
+//------------------------------------------------------------------------------------
+// Details: Retrieve the numerical value from the SBValue object. If the
+// function fails
+// it could indicate the SBValue object does not represent an internal
+// type.
// Type: Static method.
// Args: vrValue - (R) The SBValue object to get a value from.
// vwValue - (W) The numerical value.
@@ -63,34 +64,31 @@ CMICmnLLDBProxySBValue::GetValueAsUnsign
// MIstatus::failure - Functionality failed.
// Throws: None.
//--
-bool
-CMICmnLLDBProxySBValue::GetValueAsSigned(const lldb::SBValue &vrValue, MIint64 &vwValue)
-{
- lldb::SBValue &rValue = const_cast<lldb::SBValue &>(vrValue);
- bool bCompositeType = true;
- MIuint64 nFailValue = 0;
- MIuint64 nValue = rValue.GetValueAsSigned(nFailValue);
- if (nValue == nFailValue)
- {
- nFailValue = 5; // Some arbitrary number
- nValue = rValue.GetValueAsSigned(nFailValue);
- if (nValue != nFailValue)
- {
- bCompositeType = false;
- vwValue = nValue;
- }
- }
- else
- {
- bCompositeType = false;
- vwValue = nValue;
+bool CMICmnLLDBProxySBValue::GetValueAsSigned(const lldb::SBValue &vrValue,
+ MIint64 &vwValue) {
+ lldb::SBValue &rValue = const_cast<lldb::SBValue &>(vrValue);
+ bool bCompositeType = true;
+ MIuint64 nFailValue = 0;
+ MIuint64 nValue = rValue.GetValueAsSigned(nFailValue);
+ if (nValue == nFailValue) {
+ nFailValue = 5; // Some arbitrary number
+ nValue = rValue.GetValueAsSigned(nFailValue);
+ if (nValue != nFailValue) {
+ bCompositeType = false;
+ vwValue = nValue;
}
+ } else {
+ bCompositeType = false;
+ vwValue = nValue;
+ }
- return (bCompositeType ? MIstatus::failure : MIstatus::success);
+ return (bCompositeType ? MIstatus::failure : MIstatus::success);
}
-//++ ------------------------------------------------------------------------------------
-// Details: Retrieve the NUL terminated string from the SBValue object if it of the type
+//++
+//------------------------------------------------------------------------------------
+// Details: Retrieve the NUL terminated string from the SBValue object if it of
+// the type
// unsigned char *.
// Type: Static method.
// Args: vrValue - (R) The SBValue object to get a value from.
@@ -99,44 +97,42 @@ CMICmnLLDBProxySBValue::GetValueAsSigned
// MIstatus::failure - Functionality failed, not suitable type.
// Throws: None.
//--
-bool
-CMICmnLLDBProxySBValue::GetCString(const lldb::SBValue &vrValue, CMIUtilString &vwCString)
-{
- lldb::SBValue &rValue = const_cast<lldb::SBValue &>(vrValue);
- const char *pCType = rValue.GetTypeName();
- if (pCType == nullptr)
- return MIstatus::failure;
-
- const char *pType = "unsigned char *";
- if (!CMIUtilString::Compare(pCType, pType))
- return MIstatus::failure;
-
- const CMIUtilString strAddr(rValue.GetValue());
- MIint64 nNum = 0;
- if (!strAddr.ExtractNumber(nNum))
- return MIstatus::failure;
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(CMICmnLLDBDebugSessionInfo::Instance());
- lldb::SBProcess sbProcess = rSessionInfo.GetProcess();
- MIuint nBufferSize = 64;
- bool bNeedResize = false;
- char *pBuffer = static_cast<char *>(::malloc(nBufferSize));
- do
- {
- lldb::SBError error;
- const size_t nReadSize = sbProcess.ReadCStringFromMemory((lldb::addr_t)nNum, pBuffer, nBufferSize, error);
- if (nReadSize == (nBufferSize - 1))
- {
- bNeedResize = true;
- nBufferSize = nBufferSize << 1;
- pBuffer = static_cast<char *>(::realloc(pBuffer, nBufferSize));
- }
- else
- bNeedResize = false;
- } while (bNeedResize);
+bool CMICmnLLDBProxySBValue::GetCString(const lldb::SBValue &vrValue,
+ CMIUtilString &vwCString) {
+ lldb::SBValue &rValue = const_cast<lldb::SBValue &>(vrValue);
+ const char *pCType = rValue.GetTypeName();
+ if (pCType == nullptr)
+ return MIstatus::failure;
+
+ const char *pType = "unsigned char *";
+ if (!CMIUtilString::Compare(pCType, pType))
+ return MIstatus::failure;
+
+ const CMIUtilString strAddr(rValue.GetValue());
+ MIint64 nNum = 0;
+ if (!strAddr.ExtractNumber(nNum))
+ return MIstatus::failure;
+
+ CMICmnLLDBDebugSessionInfo &rSessionInfo(
+ CMICmnLLDBDebugSessionInfo::Instance());
+ lldb::SBProcess sbProcess = rSessionInfo.GetProcess();
+ MIuint nBufferSize = 64;
+ bool bNeedResize = false;
+ char *pBuffer = static_cast<char *>(::malloc(nBufferSize));
+ do {
+ lldb::SBError error;
+ const size_t nReadSize = sbProcess.ReadCStringFromMemory(
+ (lldb::addr_t)nNum, pBuffer, nBufferSize, error);
+ if (nReadSize == (nBufferSize - 1)) {
+ bNeedResize = true;
+ nBufferSize = nBufferSize << 1;
+ pBuffer = static_cast<char *>(::realloc(pBuffer, nBufferSize));
+ } else
+ bNeedResize = false;
+ } while (bNeedResize);
- vwCString = pBuffer;
- free((void *)pBuffer);
+ vwCString = pBuffer;
+ free((void *)pBuffer);
- return MIstatus::success;
+ return MIstatus::success;
}
Modified: lldb/trunk/tools/lldb-mi/MICmnLLDBProxySBValue.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnLLDBProxySBValue.h?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnLLDBProxySBValue.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmnLLDBProxySBValue.h Tue Sep 6 15:57:50 2016
@@ -18,15 +18,18 @@
// Declarations:
class CMIUtilString;
-//++ ============================================================================
-// Details: MI proxy wrapper class to lldb::SBValue. The class provides functionality
+//++
+//============================================================================
+// Details: MI proxy wrapper class to lldb::SBValue. The class provides
+// functionality
// to assist in the use of SBValue's particular function usage.
//--
-class CMICmnLLDBProxySBValue
-{
- // Statics:
- public:
- static bool GetValueAsSigned(const lldb::SBValue &vrValue, MIint64 &vwValue);
- static bool GetValueAsUnsigned(const lldb::SBValue &vrValue, MIuint64 &vwValue);
- static bool GetCString(const lldb::SBValue &vrValue, CMIUtilString &vwCString);
+class CMICmnLLDBProxySBValue {
+ // Statics:
+public:
+ static bool GetValueAsSigned(const lldb::SBValue &vrValue, MIint64 &vwValue);
+ static bool GetValueAsUnsigned(const lldb::SBValue &vrValue,
+ MIuint64 &vwValue);
+ static bool GetCString(const lldb::SBValue &vrValue,
+ CMIUtilString &vwCString);
};
Modified: lldb/trunk/tools/lldb-mi/MICmnLLDBUtilSBValue.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnLLDBUtilSBValue.cpp?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnLLDBUtilSBValue.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmnLLDBUtilSBValue.cpp Tue Sep 6 15:57:50 2016
@@ -8,108 +8,118 @@
//===----------------------------------------------------------------------===//
// Third party headers:
-#include <cinttypes>
#include "lldb/API/SBTypeSummary.h"
+#include <cinttypes>
// In-house headers:
-#include "MICmnLLDBUtilSBValue.h"
#include "MICmnLLDBDebugSessionInfo.h"
+#include "MICmnLLDBUtilSBValue.h"
#include "MICmnMIValueConst.h"
#include "MICmnMIValueTuple.h"
#include "MIUtilString.h"
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmnLLDBUtilSBValue constructor.
// Type: Method.
// Args: vrValue - (R) The LLDB value object.
-// vbHandleCharType - (R) True = Yes return text molding to char type,
+// vbHandleCharType - (R) True = Yes return text molding to char
+// type,
// False = just return data.
// Return: None.
// Throws: None.
//--
-CMICmnLLDBUtilSBValue::CMICmnLLDBUtilSBValue(const lldb::SBValue &vrValue, const bool vbHandleCharType /* = false */,
- const bool vbHandleArrayType /* = true */)
- : m_rValue(const_cast<lldb::SBValue &>(vrValue))
- , m_pUnkwn("??")
- , m_pComposite("{...}")
- , m_bHandleCharType(vbHandleCharType)
- , m_bHandleArrayType(vbHandleArrayType)
-{
- m_bValidSBValue = m_rValue.IsValid();
+CMICmnLLDBUtilSBValue::CMICmnLLDBUtilSBValue(
+ const lldb::SBValue &vrValue, const bool vbHandleCharType /* = false */,
+ const bool vbHandleArrayType /* = true */)
+ : m_rValue(const_cast<lldb::SBValue &>(vrValue)), m_pUnkwn("??"),
+ m_pComposite("{...}"), m_bHandleCharType(vbHandleCharType),
+ m_bHandleArrayType(vbHandleArrayType) {
+ m_bValidSBValue = m_rValue.IsValid();
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmnLLDBUtilSBValue destructor.
// Type: Method.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmnLLDBUtilSBValue::~CMICmnLLDBUtilSBValue()
-{
-}
+CMICmnLLDBUtilSBValue::~CMICmnLLDBUtilSBValue() {}
-//++ ------------------------------------------------------------------------------------
-// Details: Retrieve from the LLDB SB Value object the name of the variable. If the name
+//++
+//------------------------------------------------------------------------------------
+// Details: Retrieve from the LLDB SB Value object the name of the variable. If
+// the name
// is invalid (or the SBValue object invalid) then "??" is returned.
// Type: Method.
// Args: None.
// Return: CMIUtilString - Name of the variable or "??" for unknown.
// Throws: None.
//--
-CMIUtilString
-CMICmnLLDBUtilSBValue::GetName() const
-{
- const char *pName = m_bValidSBValue ? m_rValue.GetName() : nullptr;
- const CMIUtilString text((pName != nullptr) ? pName : CMIUtilString());
-
- return text;
+CMIUtilString CMICmnLLDBUtilSBValue::GetName() const {
+ const char *pName = m_bValidSBValue ? m_rValue.GetName() : nullptr;
+ const CMIUtilString text((pName != nullptr) ? pName : CMIUtilString());
+
+ return text;
}
-//++ ------------------------------------------------------------------------------------
-// Details: Retrieve from the LLDB SB Value object the value of the variable described in
-// text. If the value is invalid (or the SBValue object invalid) then "??" is
+//++
+//------------------------------------------------------------------------------------
+// Details: Retrieve from the LLDB SB Value object the value of the variable
+// described in
+// text. If the value is invalid (or the SBValue object invalid) then
+// "??" is
// returned.
// Type: Method.
// Args: None.
// Return: CMIUtilString - Text description of the variable's value or "??".
// Throws: None.
//--
-CMIUtilString
-CMICmnLLDBUtilSBValue::GetValue(const bool vbExpandAggregates /* = false */) const
-{
- if (!m_bValidSBValue)
- return m_pUnkwn;
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(CMICmnLLDBDebugSessionInfo::Instance());
- bool bPrintExpandAggregates = false;
- bPrintExpandAggregates = rSessionInfo.SharedDataRetrieve<bool>(rSessionInfo.m_constStrPrintExpandAggregates,
- bPrintExpandAggregates) && bPrintExpandAggregates;
-
- const bool bHandleArrayTypeAsSimple = m_bHandleArrayType && !vbExpandAggregates && !bPrintExpandAggregates;
- CMIUtilString value;
- const bool bIsSimpleValue = GetSimpleValue(bHandleArrayTypeAsSimple, value);
- if (bIsSimpleValue)
- return value;
-
- if (!vbExpandAggregates && !bPrintExpandAggregates)
- return m_pComposite;
-
- bool bPrintAggregateFieldNames = false;
- bPrintAggregateFieldNames = !rSessionInfo.SharedDataRetrieve<bool>(rSessionInfo.m_constStrPrintAggregateFieldNames,
- bPrintAggregateFieldNames) || bPrintAggregateFieldNames;
-
- CMICmnMIValueTuple miValueTuple;
- const bool bOk = GetCompositeValue(bPrintAggregateFieldNames, miValueTuple);
- if (!bOk)
- return m_pUnkwn;
-
- value = miValueTuple.GetString();
+CMIUtilString CMICmnLLDBUtilSBValue::GetValue(
+ const bool vbExpandAggregates /* = false */) const {
+ if (!m_bValidSBValue)
+ return m_pUnkwn;
+
+ CMICmnLLDBDebugSessionInfo &rSessionInfo(
+ CMICmnLLDBDebugSessionInfo::Instance());
+ bool bPrintExpandAggregates = false;
+ bPrintExpandAggregates = rSessionInfo.SharedDataRetrieve<bool>(
+ rSessionInfo.m_constStrPrintExpandAggregates,
+ bPrintExpandAggregates) &&
+ bPrintExpandAggregates;
+
+ const bool bHandleArrayTypeAsSimple =
+ m_bHandleArrayType && !vbExpandAggregates && !bPrintExpandAggregates;
+ CMIUtilString value;
+ const bool bIsSimpleValue = GetSimpleValue(bHandleArrayTypeAsSimple, value);
+ if (bIsSimpleValue)
return value;
-}
-//++ ------------------------------------------------------------------------------------
-// Details: Retrieve from the LLDB SB Value object the value of the variable described in
+ if (!vbExpandAggregates && !bPrintExpandAggregates)
+ return m_pComposite;
+
+ bool bPrintAggregateFieldNames = false;
+ bPrintAggregateFieldNames =
+ !rSessionInfo.SharedDataRetrieve<bool>(
+ rSessionInfo.m_constStrPrintAggregateFieldNames,
+ bPrintAggregateFieldNames) ||
+ bPrintAggregateFieldNames;
+
+ CMICmnMIValueTuple miValueTuple;
+ const bool bOk = GetCompositeValue(bPrintAggregateFieldNames, miValueTuple);
+ if (!bOk)
+ return m_pUnkwn;
+
+ value = miValueTuple.GetString();
+ return value;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: Retrieve from the LLDB SB Value object the value of the variable
+// described in
// text if it has a simple format (not composite).
// Type: Method.
// Args: vwrValue - (W) The SBValue in a string format.
@@ -117,267 +127,263 @@ CMICmnLLDBUtilSBValue::GetValue(const bo
// MIstatus::failure - Function failed.
// Throws: None.
//--
-bool
-CMICmnLLDBUtilSBValue::GetSimpleValue(const bool vbHandleArrayType, CMIUtilString &vwrValue) const
-{
- const MIuint nChildren = m_rValue.GetNumChildren();
- if (nChildren == 0)
- {
- vwrValue = GetValueSummary(!m_bHandleCharType && IsCharType(), m_pUnkwn);
- return MIstatus::success;
- }
- else if (IsPointerType())
- {
- vwrValue = GetValueSummary(!m_bHandleCharType && IsPointeeCharType(), m_pUnkwn);
- return MIstatus::success;
+bool CMICmnLLDBUtilSBValue::GetSimpleValue(const bool vbHandleArrayType,
+ CMIUtilString &vwrValue) const {
+ const MIuint nChildren = m_rValue.GetNumChildren();
+ if (nChildren == 0) {
+ vwrValue = GetValueSummary(!m_bHandleCharType && IsCharType(), m_pUnkwn);
+ return MIstatus::success;
+ } else if (IsPointerType()) {
+ vwrValue =
+ GetValueSummary(!m_bHandleCharType && IsPointeeCharType(), m_pUnkwn);
+ return MIstatus::success;
+ } else if (IsArrayType()) {
+ CMICmnLLDBDebugSessionInfo &rSessionInfo(
+ CMICmnLLDBDebugSessionInfo::Instance());
+ bool bPrintCharArrayAsString = false;
+ bPrintCharArrayAsString = rSessionInfo.SharedDataRetrieve<bool>(
+ rSessionInfo.m_constStrPrintCharArrayAsString,
+ bPrintCharArrayAsString) &&
+ bPrintCharArrayAsString;
+ if (bPrintCharArrayAsString && m_bHandleCharType &&
+ IsFirstChildCharType()) {
+ vwrValue = GetValueSummary(false);
+ return MIstatus::success;
+ } else if (vbHandleArrayType) {
+ vwrValue = CMIUtilString::Format("[%u]", nChildren);
+ return MIstatus::success;
}
- else if (IsArrayType())
- {
- CMICmnLLDBDebugSessionInfo &rSessionInfo(CMICmnLLDBDebugSessionInfo::Instance());
- bool bPrintCharArrayAsString = false;
- bPrintCharArrayAsString = rSessionInfo.SharedDataRetrieve<bool>(rSessionInfo.m_constStrPrintCharArrayAsString,
- bPrintCharArrayAsString) && bPrintCharArrayAsString;
- if (bPrintCharArrayAsString && m_bHandleCharType && IsFirstChildCharType())
- {
- vwrValue = GetValueSummary(false);
- return MIstatus::success;
- }
- else if (vbHandleArrayType)
- {
- vwrValue = CMIUtilString::Format("[%u]", nChildren);
- return MIstatus::success;
- }
+ } else {
+ // Treat composite value which has registered summary
+ // (for example with AddCXXSummary) as simple value
+ vwrValue = GetValueSummary(false);
+ if (!vwrValue.empty())
+ return MIstatus::success;
+ }
+
+ // Composite variable type i.e. struct
+ return MIstatus::failure;
+}
+
+bool CMICmnLLDBUtilSBValue::GetCompositeValue(
+ const bool vbPrintFieldNames, CMICmnMIValueTuple &vwrMiValueTuple,
+ const MIuint vnDepth /* = 1 */) const {
+ const MIuint nMaxDepth = 10;
+ const MIuint nChildren = m_rValue.GetNumChildren();
+ for (MIuint i = 0; i < nChildren; ++i) {
+ const lldb::SBValue member = m_rValue.GetChildAtIndex(i);
+ const CMICmnLLDBUtilSBValue utilMember(member, m_bHandleCharType,
+ m_bHandleArrayType);
+ const bool bHandleArrayTypeAsSimple = false;
+ CMIUtilString value;
+ const bool bIsSimpleValue =
+ utilMember.GetSimpleValue(bHandleArrayTypeAsSimple, value);
+ if (bIsSimpleValue) {
+ // OK. Value is simple (not composite) and was successfully got
+ } else if (vnDepth < nMaxDepth) {
+ // Need to get value from composite type
+ CMICmnMIValueTuple miValueTuple;
+ const bool bOk = utilMember.GetCompositeValue(vbPrintFieldNames,
+ miValueTuple, vnDepth + 1);
+ if (!bOk)
+ // Can't obtain composite type
+ value = m_pUnkwn;
+ else
+ // OK. Value is composite and was successfully got
+ value = miValueTuple.GetString();
+ } else {
+ // Need to get value from composite type, but vnMaxDepth is reached
+ value = m_pComposite;
}
- else
- {
- // Treat composite value which has registered summary
- // (for example with AddCXXSummary) as simple value
- vwrValue = GetValueSummary(false);
- if (!vwrValue.empty())
- return MIstatus::success;
+ const bool bNoQuotes = true;
+ const CMICmnMIValueConst miValueConst(value, bNoQuotes);
+ if (vbPrintFieldNames) {
+ const bool bUseSpacing = true;
+ const CMICmnMIValueResult miValueResult(utilMember.GetName(),
+ miValueConst, bUseSpacing);
+ vwrMiValueTuple.Add(miValueResult, bUseSpacing);
+ } else {
+ const bool bUseSpacing = false;
+ vwrMiValueTuple.Add(miValueConst, bUseSpacing);
}
+ }
- // Composite variable type i.e. struct
- return MIstatus::failure;
-}
-
-bool
-CMICmnLLDBUtilSBValue::GetCompositeValue(const bool vbPrintFieldNames, CMICmnMIValueTuple &vwrMiValueTuple,
- const MIuint vnDepth /* = 1 */) const
-{
- const MIuint nMaxDepth = 10;
- const MIuint nChildren = m_rValue.GetNumChildren();
- for (MIuint i = 0; i < nChildren; ++i)
- {
- const lldb::SBValue member = m_rValue.GetChildAtIndex(i);
- const CMICmnLLDBUtilSBValue utilMember(member, m_bHandleCharType, m_bHandleArrayType);
- const bool bHandleArrayTypeAsSimple = false;
- CMIUtilString value;
- const bool bIsSimpleValue = utilMember.GetSimpleValue(bHandleArrayTypeAsSimple, value);
- if (bIsSimpleValue)
- {
- // OK. Value is simple (not composite) and was successfully got
- }
- else if (vnDepth < nMaxDepth)
- {
- // Need to get value from composite type
- CMICmnMIValueTuple miValueTuple;
- const bool bOk = utilMember.GetCompositeValue(vbPrintFieldNames, miValueTuple, vnDepth + 1);
- if (!bOk)
- // Can't obtain composite type
- value = m_pUnkwn;
- else
- // OK. Value is composite and was successfully got
- value = miValueTuple.GetString();
- }
- else
- {
- // Need to get value from composite type, but vnMaxDepth is reached
- value = m_pComposite;
- }
- const bool bNoQuotes = true;
- const CMICmnMIValueConst miValueConst(value, bNoQuotes);
- if (vbPrintFieldNames)
- {
- const bool bUseSpacing = true;
- const CMICmnMIValueResult miValueResult(utilMember.GetName(), miValueConst, bUseSpacing);
- vwrMiValueTuple.Add(miValueResult, bUseSpacing);
- }
- else
- {
- const bool bUseSpacing = false;
- vwrMiValueTuple.Add(miValueConst, bUseSpacing);
- }
- }
-
- return MIstatus::success;
+ return MIstatus::success;
}
// Returns value or value + summary, depending on valueOnly parameter value.
// If result is an empty string returns failVal.
CMIUtilString
-CMICmnLLDBUtilSBValue::GetValueSummary(bool valueOnly, const CMIUtilString& failVal) const
-{
- if (!m_rValue.IsValid())
- return failVal;
-
- CMIUtilString value, valSummary;
- const char* c_value = m_rValue.GetValue();
- if (valueOnly)
- return c_value == nullptr ? failVal : c_value;
-
- const char* c_summary = m_rValue.GetSummary();
- if (c_value)
- value = c_value;
- else if (c_summary == nullptr)
- return failVal;
-
- if (c_summary && c_summary[0])
- {
- valSummary = c_summary;
- lldb::SBTypeSummary summary = m_rValue.GetTypeSummary();
- if (summary.IsValid() && summary.DoesPrintValue(m_rValue) && !value.empty())
- {
- valSummary.insert(0, value + " ");
- }
- return valSummary;
+CMICmnLLDBUtilSBValue::GetValueSummary(bool valueOnly,
+ const CMIUtilString &failVal) const {
+ if (!m_rValue.IsValid())
+ return failVal;
+
+ CMIUtilString value, valSummary;
+ const char *c_value = m_rValue.GetValue();
+ if (valueOnly)
+ return c_value == nullptr ? failVal : c_value;
+
+ const char *c_summary = m_rValue.GetSummary();
+ if (c_value)
+ value = c_value;
+ else if (c_summary == nullptr)
+ return failVal;
+
+ if (c_summary && c_summary[0]) {
+ valSummary = c_summary;
+ lldb::SBTypeSummary summary = m_rValue.GetTypeSummary();
+ if (summary.IsValid() && summary.DoesPrintValue(m_rValue) &&
+ !value.empty()) {
+ valSummary.insert(0, value + " ");
}
- // no summary - return just value
- return value;
+ return valSummary;
+ }
+ // no summary - return just value
+ return value;
}
-//++ ------------------------------------------------------------------------------------
-// Details: Check that basic type is a char type. Char type can be signed or unsigned.
+//++
+//------------------------------------------------------------------------------------
+// Details: Check that basic type is a char type. Char type can be signed or
+// unsigned.
// Type: Static.
// Args: eType - type to check
// Return: bool - True = Yes is a char type, false = some other type.
// Throws: None.
//--
-bool
-CMICmnLLDBUtilSBValue::IsCharBasicType(lldb::BasicType eType)
-{
- switch (eType)
- {
- case lldb::eBasicTypeChar:
- case lldb::eBasicTypeSignedChar:
- case lldb::eBasicTypeUnsignedChar:
- case lldb::eBasicTypeChar16:
- case lldb::eBasicTypeChar32:
- return true;
- default:
- return false;
- }
-}
-
-//++ ------------------------------------------------------------------------------------
-// Details: Retrieve the flag stating whether this value object is a char type or some
+bool CMICmnLLDBUtilSBValue::IsCharBasicType(lldb::BasicType eType) {
+ switch (eType) {
+ case lldb::eBasicTypeChar:
+ case lldb::eBasicTypeSignedChar:
+ case lldb::eBasicTypeUnsignedChar:
+ case lldb::eBasicTypeChar16:
+ case lldb::eBasicTypeChar32:
+ return true;
+ default:
+ return false;
+ }
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: Retrieve the flag stating whether this value object is a char type
+// or some
// other type. Char type can be signed or unsigned.
// Type: Method.
// Args: None.
// Return: bool - True = Yes is a char type, false = some other type.
// Throws: None.
//--
-bool
-CMICmnLLDBUtilSBValue::IsCharType() const
-{
- const lldb::BasicType eType = m_rValue.GetType().GetBasicType();
- return IsCharBasicType(eType);
+bool CMICmnLLDBUtilSBValue::IsCharType() const {
+ const lldb::BasicType eType = m_rValue.GetType().GetBasicType();
+ return IsCharBasicType(eType);
}
-//++ ------------------------------------------------------------------------------------
-// Details: Retrieve the flag stating whether first child value object of *this object is
-// a char type or some other type. Returns false if there are not children. Char
+//++
+//------------------------------------------------------------------------------------
+// Details: Retrieve the flag stating whether first child value object of *this
+// object is
+// a char type or some other type. Returns false if there are not
+// children. Char
// type can be signed or unsigned.
// Type: Method.
// Args: None.
// Return: bool - True = Yes is a char type, false = some other type.
// Throws: None.
//--
-bool
-CMICmnLLDBUtilSBValue::IsFirstChildCharType() const
-{
- const MIuint nChildren = m_rValue.GetNumChildren();
+bool CMICmnLLDBUtilSBValue::IsFirstChildCharType() const {
+ const MIuint nChildren = m_rValue.GetNumChildren();
- // Is it a basic type
- if (nChildren == 0)
- return false;
+ // Is it a basic type
+ if (nChildren == 0)
+ return false;
- const lldb::SBValue member = m_rValue.GetChildAtIndex(0);
- const CMICmnLLDBUtilSBValue utilValue(member);
- return utilValue.IsCharType();
+ const lldb::SBValue member = m_rValue.GetChildAtIndex(0);
+ const CMICmnLLDBUtilSBValue utilValue(member);
+ return utilValue.IsCharType();
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Retrieve the flag stating whether pointee object of *this object is
-// a char type or some other type. Returns false if there are not children. Char
+// a char type or some other type. Returns false if there are not
+// children. Char
// type can be signed or unsigned.
// Type: Method.
// Args: None.
// Return: bool - True = Yes is a char type, false = some other type.
// Throws: None.
//--
-bool
-CMICmnLLDBUtilSBValue::IsPointeeCharType() const
-{
- const MIuint nChildren = m_rValue.GetNumChildren();
-
- // Is it a basic type
- if (nChildren == 0)
- return false;
-
- const lldb::BasicType eType = m_rValue.GetType().GetPointeeType().GetBasicType();
- return IsCharBasicType(eType);
-}
-
-//++ ------------------------------------------------------------------------------------
-// Details: Retrieve the flag stating whether this value object is a integer type or some
-// other type. Char type can be signed or unsigned and short or long/very long.
+bool CMICmnLLDBUtilSBValue::IsPointeeCharType() const {
+ const MIuint nChildren = m_rValue.GetNumChildren();
+
+ // Is it a basic type
+ if (nChildren == 0)
+ return false;
+
+ const lldb::BasicType eType =
+ m_rValue.GetType().GetPointeeType().GetBasicType();
+ return IsCharBasicType(eType);
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: Retrieve the flag stating whether this value object is a integer
+// type or some
+// other type. Char type can be signed or unsigned and short or
+// long/very long.
// Type: Method.
// Args: None.
// Return: bool - True = Yes is a integer type, false = some other type.
// Throws: None.
//--
-bool
-CMICmnLLDBUtilSBValue::IsIntegerType() const
-{
- const lldb::BasicType eType = m_rValue.GetType().GetBasicType();
- return ((eType == lldb::eBasicTypeShort) || (eType == lldb::eBasicTypeUnsignedShort) ||
- (eType == lldb::eBasicTypeInt) || (eType == lldb::eBasicTypeUnsignedInt) ||
- (eType == lldb::eBasicTypeLong) || (eType == lldb::eBasicTypeUnsignedLong) ||
- (eType == lldb::eBasicTypeLongLong) || (eType == lldb::eBasicTypeUnsignedLongLong) ||
- (eType == lldb::eBasicTypeInt128) || (eType == lldb::eBasicTypeUnsignedInt128));
-}
-
-//++ ------------------------------------------------------------------------------------
-// Details: Retrieve the flag stating whether this value object is a pointer type or some
+bool CMICmnLLDBUtilSBValue::IsIntegerType() const {
+ const lldb::BasicType eType = m_rValue.GetType().GetBasicType();
+ return ((eType == lldb::eBasicTypeShort) ||
+ (eType == lldb::eBasicTypeUnsignedShort) ||
+ (eType == lldb::eBasicTypeInt) ||
+ (eType == lldb::eBasicTypeUnsignedInt) ||
+ (eType == lldb::eBasicTypeLong) ||
+ (eType == lldb::eBasicTypeUnsignedLong) ||
+ (eType == lldb::eBasicTypeLongLong) ||
+ (eType == lldb::eBasicTypeUnsignedLongLong) ||
+ (eType == lldb::eBasicTypeInt128) ||
+ (eType == lldb::eBasicTypeUnsignedInt128));
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: Retrieve the flag stating whether this value object is a pointer
+// type or some
// other type.
// Type: Method.
// Args: None.
// Return: bool - True = Yes is a pointer type, false = some other type.
// Throws: None.
//--
-bool
-CMICmnLLDBUtilSBValue::IsPointerType() const
-{
- return m_rValue.GetType().IsPointerType();
+bool CMICmnLLDBUtilSBValue::IsPointerType() const {
+ return m_rValue.GetType().IsPointerType();
}
-//++ ------------------------------------------------------------------------------------
-// Details: Retrieve the flag stating whether this value object is an array type or some
+//++
+//------------------------------------------------------------------------------------
+// Details: Retrieve the flag stating whether this value object is an array type
+// or some
// other type.
// Type: Method.
// Args: None.
// Return: bool - True = Yes is an array type, false = some other type.
// Throws: None.
//--
-bool
-CMICmnLLDBUtilSBValue::IsArrayType() const
-{
- return m_rValue.GetType().IsArrayType();
+bool CMICmnLLDBUtilSBValue::IsArrayType() const {
+ return m_rValue.GetType().IsArrayType();
}
-//++ ------------------------------------------------------------------------------------
-// Details: Retrieve the C string data of value object by read the memory where the
+//++
+//------------------------------------------------------------------------------------
+// Details: Retrieve the C string data of value object by read the memory where
+// the
// variable is held.
// Type: Method.
// Args: vrValue - (R) LLDB SBValue variable object.
@@ -386,131 +392,124 @@ CMICmnLLDBUtilSBValue::IsArrayType() con
//--
template <typename charT>
CMIUtilString
-CMICmnLLDBUtilSBValue::ReadCStringFromHostMemory(lldb::SBValue &vrValue, const MIuint vnMaxLen) const
-{
- std::string result;
- lldb::addr_t addr = vrValue.GetLoadAddress(), end_addr = addr + vnMaxLen * sizeof(charT);
- lldb::SBProcess process = CMICmnLLDBDebugSessionInfo::Instance().GetProcess();
- lldb::SBError error;
- while (addr < end_addr)
- {
- charT ch;
- const MIuint64 nReadBytes = process.ReadMemory(addr, &ch, sizeof(ch), error);
- if (error.Fail() || nReadBytes != sizeof(ch))
- return m_pUnkwn;
- else if (ch == 0)
- break;
- result.append(CMIUtilString::ConvertToPrintableASCII(ch, true /* bEscapeQuotes */));
- addr += sizeof(ch);
- }
+CMICmnLLDBUtilSBValue::ReadCStringFromHostMemory(lldb::SBValue &vrValue,
+ const MIuint vnMaxLen) const {
+ std::string result;
+ lldb::addr_t addr = vrValue.GetLoadAddress(),
+ end_addr = addr + vnMaxLen * sizeof(charT);
+ lldb::SBProcess process = CMICmnLLDBDebugSessionInfo::Instance().GetProcess();
+ lldb::SBError error;
+ while (addr < end_addr) {
+ charT ch;
+ const MIuint64 nReadBytes =
+ process.ReadMemory(addr, &ch, sizeof(ch), error);
+ if (error.Fail() || nReadBytes != sizeof(ch))
+ return m_pUnkwn;
+ else if (ch == 0)
+ break;
+ result.append(
+ CMIUtilString::ConvertToPrintableASCII(ch, true /* bEscapeQuotes */));
+ addr += sizeof(ch);
+ }
- return result;
+ return result;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Retrieve the state of the value object's name.
// Type: Method.
// Args: None.
// Return: bool - True = yes name is indeterminate, false = name is valid.
// Throws: None.
//--
-bool
-CMICmnLLDBUtilSBValue::IsNameUnknown() const
-{
- const CMIUtilString name(GetName());
- return (name == m_pUnkwn);
+bool CMICmnLLDBUtilSBValue::IsNameUnknown() const {
+ const CMIUtilString name(GetName());
+ return (name == m_pUnkwn);
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Retrieve the state of the value object's value data.
// Type: Method.
// Args: None.
// Return: bool - True = yes value is indeterminate, false = value valid.
// Throws: None.
//--
-bool
-CMICmnLLDBUtilSBValue::IsValueUnknown() const
-{
- const CMIUtilString value(GetValue());
- return (value == m_pUnkwn);
+bool CMICmnLLDBUtilSBValue::IsValueUnknown() const {
+ const CMIUtilString value(GetValue());
+ return (value == m_pUnkwn);
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Retrieve the value object's type name if valid.
// Type: Method.
// Args: None.
// Return: CMIUtilString - The type name or "??".
// Throws: None.
//--
-CMIUtilString
-CMICmnLLDBUtilSBValue::GetTypeName() const
-{
- const char *pName = m_bValidSBValue ? m_rValue.GetTypeName() : nullptr;
- const CMIUtilString text((pName != nullptr) ? pName : m_pUnkwn);
+CMIUtilString CMICmnLLDBUtilSBValue::GetTypeName() const {
+ const char *pName = m_bValidSBValue ? m_rValue.GetTypeName() : nullptr;
+ const CMIUtilString text((pName != nullptr) ? pName : m_pUnkwn);
- return text;
+ return text;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Retrieve the value object's display type name if valid.
// Type: Method.
// Args: None.
// Return: CMIUtilString - The type name or "??".
// Throws: None.
//--
-CMIUtilString
-CMICmnLLDBUtilSBValue::GetTypeNameDisplay() const
-{
- const char *pName = m_bValidSBValue ? m_rValue.GetDisplayTypeName() : nullptr;
- const CMIUtilString text((pName != nullptr) ? pName : m_pUnkwn);
+CMIUtilString CMICmnLLDBUtilSBValue::GetTypeNameDisplay() const {
+ const char *pName = m_bValidSBValue ? m_rValue.GetDisplayTypeName() : nullptr;
+ const CMIUtilString text((pName != nullptr) ? pName : m_pUnkwn);
- return text;
+ return text;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Retrieve whether the value object's is valid or not.
// Type: Method.
// Args: None.
// Return: bool - True = valid, false = not valid.
// Throws: None.
//--
-bool
-CMICmnLLDBUtilSBValue::IsValid() const
-{
- return m_bValidSBValue;
-}
+bool CMICmnLLDBUtilSBValue::IsValid() const { return m_bValidSBValue; }
-//++ ------------------------------------------------------------------------------------
-// Details: Retrieve the value object' has a name. A value object can be valid but still
+//++
+//------------------------------------------------------------------------------------
+// Details: Retrieve the value object' has a name. A value object can be valid
+// but still
// have no name which suggest it is not a variable.
// Type: Method.
// Args: None.
// Return: bool - True = valid, false = not valid.
// Throws: None.
//--
-bool
-CMICmnLLDBUtilSBValue::HasName() const
-{
- bool bHasAName = false;
-
- const char *pName = m_bValidSBValue ? m_rValue.GetDisplayTypeName() : nullptr;
- if (pName != nullptr)
- {
- bHasAName = (CMIUtilString(pName).length() > 0);
- }
+bool CMICmnLLDBUtilSBValue::HasName() const {
+ bool bHasAName = false;
+
+ const char *pName = m_bValidSBValue ? m_rValue.GetDisplayTypeName() : nullptr;
+ if (pName != nullptr) {
+ bHasAName = (CMIUtilString(pName).length() > 0);
+ }
- return bHasAName;
+ return bHasAName;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Determine if the value object' represents a LLDB variable i.e. "$0".
// Type: Method.
// Args: None.
// Return: bool - True = Yes LLDB variable, false = no.
// Throws: None.
//--
-bool
-CMICmnLLDBUtilSBValue::IsLLDBVariable() const
-{
- return (GetName().at(0) == '$');
+bool CMICmnLLDBUtilSBValue::IsLLDBVariable() const {
+ return (GetName().at(0) == '$');
}
Modified: lldb/trunk/tools/lldb-mi/MICmnLLDBUtilSBValue.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnLLDBUtilSBValue.h?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnLLDBUtilSBValue.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmnLLDBUtilSBValue.h Tue Sep 6 15:57:50 2016
@@ -13,57 +13,68 @@
#include "lldb/API/SBValue.h"
// In-house headers:
-#include "MIDataTypes.h"
#include "MICmnMIValueTuple.h"
+#include "MIDataTypes.h"
// Declarations:
class CMIUtilString;
-//++ ============================================================================
+//++
+//============================================================================
// Details: Utility helper class to lldb::SBValue. Using a lldb::SBValue extract
// value object information to help form verbose debug information.
//--
-class CMICmnLLDBUtilSBValue
-{
- // Methods:
- public:
- /* ctor */ CMICmnLLDBUtilSBValue(const lldb::SBValue &vrValue, const bool vbHandleCharType = false,
- const bool vbHandleArrayType = true);
- /* dtor */ ~CMICmnLLDBUtilSBValue();
- //
- CMIUtilString GetName() const;
- CMIUtilString GetValue(const bool vbExpandAggregates = false) const;
- CMIUtilString GetTypeName() const;
- CMIUtilString GetTypeNameDisplay() const;
- bool IsCharType() const;
- bool IsFirstChildCharType() const;
- bool IsPointeeCharType() const;
- bool IsIntegerType() const;
- bool IsPointerType() const;
- bool IsArrayType() const;
- bool IsLLDBVariable() const;
- bool IsNameUnknown() const;
- bool IsValueUnknown() const;
- bool IsValid() const;
- bool HasName() const;
-
- // Methods:
- private:
- template <typename charT> CMIUtilString ReadCStringFromHostMemory(lldb::SBValue &vrValue, const MIuint vnMaxLen = UINT32_MAX) const;
- bool GetSimpleValue(const bool vbHandleArrayType, CMIUtilString &vrValue) const;
- bool GetCompositeValue(const bool vbPrintFieldNames, CMICmnMIValueTuple &vwrMiValueTuple, const MIuint vnDepth = 1) const;
- CMIUtilString GetValueSummary(bool valueOnly, const CMIUtilString& failVal = CMIUtilString()) const;
-
- // Statics:
- private:
- static bool IsCharBasicType(lldb::BasicType eType);
-
- // Attributes:
- private:
- lldb::SBValue &m_rValue;
- const char *m_pUnkwn;
- const char *m_pComposite;
- bool m_bValidSBValue; // True = SBValue is a valid object, false = not valid.
- bool m_bHandleCharType; // True = Yes return text molding to char type, false = just return data.
- bool m_bHandleArrayType; // True = Yes return special stub for array type, false = just return data.
+class CMICmnLLDBUtilSBValue {
+ // Methods:
+public:
+ /* ctor */ CMICmnLLDBUtilSBValue(const lldb::SBValue &vrValue,
+ const bool vbHandleCharType = false,
+ const bool vbHandleArrayType = true);
+ /* dtor */ ~CMICmnLLDBUtilSBValue();
+ //
+ CMIUtilString GetName() const;
+ CMIUtilString GetValue(const bool vbExpandAggregates = false) const;
+ CMIUtilString GetTypeName() const;
+ CMIUtilString GetTypeNameDisplay() const;
+ bool IsCharType() const;
+ bool IsFirstChildCharType() const;
+ bool IsPointeeCharType() const;
+ bool IsIntegerType() const;
+ bool IsPointerType() const;
+ bool IsArrayType() const;
+ bool IsLLDBVariable() const;
+ bool IsNameUnknown() const;
+ bool IsValueUnknown() const;
+ bool IsValid() const;
+ bool HasName() const;
+
+ // Methods:
+private:
+ template <typename charT>
+ CMIUtilString
+ ReadCStringFromHostMemory(lldb::SBValue &vrValue,
+ const MIuint vnMaxLen = UINT32_MAX) const;
+ bool GetSimpleValue(const bool vbHandleArrayType,
+ CMIUtilString &vrValue) const;
+ bool GetCompositeValue(const bool vbPrintFieldNames,
+ CMICmnMIValueTuple &vwrMiValueTuple,
+ const MIuint vnDepth = 1) const;
+ CMIUtilString
+ GetValueSummary(bool valueOnly,
+ const CMIUtilString &failVal = CMIUtilString()) const;
+
+ // Statics:
+private:
+ static bool IsCharBasicType(lldb::BasicType eType);
+
+ // Attributes:
+private:
+ lldb::SBValue &m_rValue;
+ const char *m_pUnkwn;
+ const char *m_pComposite;
+ bool m_bValidSBValue; // True = SBValue is a valid object, false = not valid.
+ bool m_bHandleCharType; // True = Yes return text molding to char type, false
+ // = just return data.
+ bool m_bHandleArrayType; // True = Yes return special stub for array type,
+ // false = just return data.
};
Modified: lldb/trunk/tools/lldb-mi/MICmnLog.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnLog.cpp?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnLog.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmnLog.cpp Tue Sep 6 15:57:50 2016
@@ -10,37 +10,34 @@
// In-house headers:
#include "MICmnLog.h"
#include "MICmnLogMediumFile.h"
-#include "MIDriverMgr.h"
#include "MICmnResources.h"
+#include "MIDriverMgr.h"
#include "MIUtilDateTimeStd.h"
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmnLog constructor.
// Type: Method.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmnLog::CMICmnLog()
- : m_bEnabled(false)
- , m_bInitializingATM(false)
-{
- // Do not use this constructor, use Initialize()
+CMICmnLog::CMICmnLog() : m_bEnabled(false), m_bInitializingATM(false) {
+ // Do not use this constructor, use Initialize()
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmnLog destructor.
// Type: Method.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmnLog::~CMICmnLog()
-{
- Shutdown();
-}
+CMICmnLog::~CMICmnLog() { Shutdown(); }
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Initialize resources for *this Logger.
// Type: Method.
// Args: None.
@@ -48,52 +45,57 @@ CMICmnLog::~CMICmnLog()
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmnLog::Initialize()
-{
- m_clientUsageRefCnt++;
-
- if (m_bInitialized)
- return MIstatus::success;
-
- ClrErrorDescription();
-
- // Mediums set inside because explicitly initing in MIDriverMain.cpp causes compile errors with CAtlFile
- CMICmnLogMediumFile &rFileLog(CMICmnLogMediumFile::Instance());
- bool bOk = RegisterMedium(rFileLog);
- if (bOk)
- {
- // Set the Log trace file's header
- const CMIUtilString &rCR(rFileLog.GetLineReturn());
- CMIUtilDateTimeStd date;
- CMIUtilString msg;
- msg = CMIUtilString::Format("%s\n", CMIDriverMgr::Instance().GetAppVersion().c_str());
- CMIUtilString logHdr(msg);
- msg = CMIUtilString::Format(MIRSRC(IDS_LOG_MSG_CREATION_DATE), date.GetDate().c_str(), date.GetTime().c_str(), rCR.c_str());
- logHdr += msg;
- msg = CMIUtilString::Format(MIRSRC(IDS_LOG_MSG_FILE_LOGGER_PATH), rFileLog.GetFileNamePath().c_str(), rCR.c_str());
- logHdr += msg;
-
- bOk = rFileLog.SetHeaderTxt(logHdr);
-
- // Note log file medium's status is not available until we write at least once to the file (so just write the title 1st line)
- m_bInitializingATM = true;
- CMICmnLog::WriteLog(".");
- if (!rFileLog.IsOk())
- {
- const CMIUtilString msg(
- CMIUtilString::Format(MIRSRC(IDS_LOG_ERR_FILE_LOGGER_DISABLED), rFileLog.GetErrorDescription().c_str()));
- CMICmnLog::WriteLog(msg);
- }
- m_bInitializingATM = false;
+bool CMICmnLog::Initialize() {
+ m_clientUsageRefCnt++;
+
+ if (m_bInitialized)
+ return MIstatus::success;
+
+ ClrErrorDescription();
+
+ // Mediums set inside because explicitly initing in MIDriverMain.cpp causes
+ // compile errors with CAtlFile
+ CMICmnLogMediumFile &rFileLog(CMICmnLogMediumFile::Instance());
+ bool bOk = RegisterMedium(rFileLog);
+ if (bOk) {
+ // Set the Log trace file's header
+ const CMIUtilString &rCR(rFileLog.GetLineReturn());
+ CMIUtilDateTimeStd date;
+ CMIUtilString msg;
+ msg = CMIUtilString::Format(
+ "%s\n", CMIDriverMgr::Instance().GetAppVersion().c_str());
+ CMIUtilString logHdr(msg);
+ msg = CMIUtilString::Format(MIRSRC(IDS_LOG_MSG_CREATION_DATE),
+ date.GetDate().c_str(), date.GetTime().c_str(),
+ rCR.c_str());
+ logHdr += msg;
+ msg =
+ CMIUtilString::Format(MIRSRC(IDS_LOG_MSG_FILE_LOGGER_PATH),
+ rFileLog.GetFileNamePath().c_str(), rCR.c_str());
+ logHdr += msg;
+
+ bOk = rFileLog.SetHeaderTxt(logHdr);
+
+ // Note log file medium's status is not available until we write at least
+ // once to the file (so just write the title 1st line)
+ m_bInitializingATM = true;
+ CMICmnLog::WriteLog(".");
+ if (!rFileLog.IsOk()) {
+ const CMIUtilString msg(
+ CMIUtilString::Format(MIRSRC(IDS_LOG_ERR_FILE_LOGGER_DISABLED),
+ rFileLog.GetErrorDescription().c_str()));
+ CMICmnLog::WriteLog(msg);
}
+ m_bInitializingATM = false;
+ }
- m_bInitialized = bOk;
+ m_bInitialized = bOk;
- return bOk;
+ return bOk;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Release resources for *this Logger.
// Type: Method.
// Args: None.
@@ -101,55 +103,52 @@ CMICmnLog::Initialize()
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmnLog::Shutdown()
-{
- if (--m_clientUsageRefCnt > 0)
- return MIstatus::success;
+bool CMICmnLog::Shutdown() {
+ if (--m_clientUsageRefCnt > 0)
+ return MIstatus::success;
- if (!m_bInitialized)
- return MIstatus::success;
+ if (!m_bInitialized)
+ return MIstatus::success;
- ClrErrorDescription();
+ ClrErrorDescription();
- const bool bOk = UnregisterMediumAll();
+ const bool bOk = UnregisterMediumAll();
- m_bInitialized = bOk;
+ m_bInitialized = bOk;
- return bOk;
+ return bOk;
}
-//++ ------------------------------------------------------------------------------------
-// Details: Enabled or disable *this Logger from writing any data to registered clients.
+//++
+//------------------------------------------------------------------------------------
+// Details: Enabled or disable *this Logger from writing any data to registered
+// clients.
// Type: Method.
// Args: vbYes - (R) True = Logger enabled, false = disabled.
// Return: MIstatus::success - Functional succeeded.
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmnLog::SetEnabled(const bool vbYes)
-{
- m_bEnabled = vbYes;
+bool CMICmnLog::SetEnabled(const bool vbYes) {
+ m_bEnabled = vbYes;
- return MIstatus::success;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
-// Details: Retrieve state whether *this Logger is enabled writing data to registered clients.
+//++
+//------------------------------------------------------------------------------------
+// Details: Retrieve state whether *this Logger is enabled writing data to
+// registered clients.
// Type: Method.
// Args: None.
// Return: True = Logger enable.
// False = disabled.
// Throws: None.
//--
-bool
-CMICmnLog::GetEnabled() const
-{
- return m_bEnabled;
-}
+bool CMICmnLog::GetEnabled() const { return m_bEnabled; }
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Unregister all the Mediums registered with *this Logger.
// Type: Method.
// Args: None.
@@ -157,22 +156,20 @@ CMICmnLog::GetEnabled() const
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmnLog::UnregisterMediumAll()
-{
- MapMediumToName_t::const_iterator it = m_mapMediumToName.begin();
- for (; it != m_mapMediumToName.end(); it++)
- {
- IMedium *pMedium = (*it).first;
- pMedium->Shutdown();
- }
+bool CMICmnLog::UnregisterMediumAll() {
+ MapMediumToName_t::const_iterator it = m_mapMediumToName.begin();
+ for (; it != m_mapMediumToName.end(); it++) {
+ IMedium *pMedium = (*it).first;
+ pMedium->Shutdown();
+ }
- m_mapMediumToName.clear();
+ m_mapMediumToName.clear();
- return MIstatus::success;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Register a Medium with *this Logger.
// Type: Method.
// Args: vrMedium - (R) The medium to register.
@@ -180,28 +177,28 @@ CMICmnLog::UnregisterMediumAll()
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmnLog::RegisterMedium(const IMedium &vrMedium)
-{
- if (HaveMediumAlready(vrMedium))
- return MIstatus::success;
-
- IMedium *pMedium = const_cast<IMedium *>(&vrMedium);
- if (!pMedium->Initialize())
- {
- const CMIUtilString &rStrMedName(pMedium->GetName());
- const CMIUtilString &rStrMedErr(pMedium->GetError());
- SetErrorDescription(CMIUtilString::Format(MIRSRC(IDS_LOG_MEDIUM_ERR_INIT), rStrMedName.c_str(), rStrMedErr.c_str()));
- return MIstatus::failure;
- }
+bool CMICmnLog::RegisterMedium(const IMedium &vrMedium) {
+ if (HaveMediumAlready(vrMedium))
+ return MIstatus::success;
- MapPairMediumToName_t pr(pMedium, pMedium->GetName());
- m_mapMediumToName.insert(pr);
+ IMedium *pMedium = const_cast<IMedium *>(&vrMedium);
+ if (!pMedium->Initialize()) {
+ const CMIUtilString &rStrMedName(pMedium->GetName());
+ const CMIUtilString &rStrMedErr(pMedium->GetError());
+ SetErrorDescription(CMIUtilString::Format(MIRSRC(IDS_LOG_MEDIUM_ERR_INIT),
+ rStrMedName.c_str(),
+ rStrMedErr.c_str()));
+ return MIstatus::failure;
+ }
- return MIstatus::success;
+ MapPairMediumToName_t pr(pMedium, pMedium->GetName());
+ m_mapMediumToName.insert(pr);
+
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Query the Logger to see if a medium is already registered.
// Type: Method.
// Args: vrMedium - (R) The medium to query.
@@ -209,18 +206,17 @@ CMICmnLog::RegisterMedium(const IMedium
// False - not registered.
// Throws: None.
//--
-bool
-CMICmnLog::HaveMediumAlready(const IMedium &vrMedium) const
-{
- IMedium *pMedium = const_cast<IMedium *>(&vrMedium);
- const MapMediumToName_t::const_iterator it = m_mapMediumToName.find(pMedium);
- if (it != m_mapMediumToName.end())
- return true;
+bool CMICmnLog::HaveMediumAlready(const IMedium &vrMedium) const {
+ IMedium *pMedium = const_cast<IMedium *>(&vrMedium);
+ const MapMediumToName_t::const_iterator it = m_mapMediumToName.find(pMedium);
+ if (it != m_mapMediumToName.end())
+ return true;
- return false;
+ return false;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Unregister a medium from the Logger.
// Type: Method.
// Args: vrMedium - (R) The medium to unregister.
@@ -228,22 +224,26 @@ CMICmnLog::HaveMediumAlready(const IMedi
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmnLog::UnregisterMedium(const IMedium &vrMedium)
-{
- IMedium *pMedium = const_cast<IMedium *>(&vrMedium);
- m_mapMediumToName.erase(pMedium);
-
- return MIstatus::success;
-}
-
-//++ ------------------------------------------------------------------------------------
-// Details: The callee client uses this function to write to the Logger. The data to be
-// written is given out to all the mediums registered. The verbosity type parameter
-// indicates to the medium(s) the type of data or message given to it. The medium has
-// modes of verbosity and depending on the verbosity set determines which writes
+bool CMICmnLog::UnregisterMedium(const IMedium &vrMedium) {
+ IMedium *pMedium = const_cast<IMedium *>(&vrMedium);
+ m_mapMediumToName.erase(pMedium);
+
+ return MIstatus::success;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: The callee client uses this function to write to the Logger. The
+// data to be
+// written is given out to all the mediums registered. The verbosity
+// type parameter
+// indicates to the medium(s) the type of data or message given to it.
+// The medium has
+// modes of verbosity and depending on the verbosity set determines
+// which writes
// go in to the logger.
-// The logger must be initialized successfully before a write to any registered
+// The logger must be initialized successfully before a write to any
+// registered
// can be carried out.
// Type: Method.
// Args: vData - (R) The data to write to the logger.
@@ -252,58 +252,55 @@ CMICmnLog::UnregisterMedium(const IMediu
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmnLog::Write(const CMIUtilString &vData, const ELogVerbosity veType)
-{
- if (!m_bInitialized && !m_bInitializingATM)
- return MIstatus::success;
- if (m_bRecursiveDive)
- return MIstatus::success;
- if (!m_bEnabled)
- return MIstatus::success;
-
- m_bRecursiveDive = true;
-
- MIuint cnt = 0;
- MIuint cntErr = 0;
- {
- MapMediumToName_t::const_iterator it = m_mapMediumToName.begin();
- while (it != m_mapMediumToName.end())
- {
- IMedium *pMedium = (*it).first;
- const CMIUtilString &rNameMedium = (*it).second;
- MIunused(rNameMedium);
- if (pMedium->Write(vData, veType))
- cnt++;
- else
- cntErr++;
-
- // Next
- ++it;
- }
- }
+bool CMICmnLog::Write(const CMIUtilString &vData, const ELogVerbosity veType) {
+ if (!m_bInitialized && !m_bInitializingATM)
+ return MIstatus::success;
+ if (m_bRecursiveDive)
+ return MIstatus::success;
+ if (!m_bEnabled)
+ return MIstatus::success;
- bool bOk = MIstatus::success;
- const MIuint mediumCnt = m_mapMediumToName.size();
- if ((cnt == 0) && (mediumCnt > 0))
- {
- SetErrorDescription(MIRSRC(IDS_LOG_MEDIUM_ERR_WRITE_ANY));
- bOk = MIstatus::failure;
- }
- if (bOk && (cntErr != 0))
- {
- SetErrorDescription(MIRSRC(IDS_LOG_MEDIUM_ERR_WRITE_MEDIUMFAIL));
- bOk = MIstatus::failure;
+ m_bRecursiveDive = true;
+
+ MIuint cnt = 0;
+ MIuint cntErr = 0;
+ {
+ MapMediumToName_t::const_iterator it = m_mapMediumToName.begin();
+ while (it != m_mapMediumToName.end()) {
+ IMedium *pMedium = (*it).first;
+ const CMIUtilString &rNameMedium = (*it).second;
+ MIunused(rNameMedium);
+ if (pMedium->Write(vData, veType))
+ cnt++;
+ else
+ cntErr++;
+
+ // Next
+ ++it;
}
+ }
+
+ bool bOk = MIstatus::success;
+ const MIuint mediumCnt = m_mapMediumToName.size();
+ if ((cnt == 0) && (mediumCnt > 0)) {
+ SetErrorDescription(MIRSRC(IDS_LOG_MEDIUM_ERR_WRITE_ANY));
+ bOk = MIstatus::failure;
+ }
+ if (bOk && (cntErr != 0)) {
+ SetErrorDescription(MIRSRC(IDS_LOG_MEDIUM_ERR_WRITE_MEDIUMFAIL));
+ bOk = MIstatus::failure;
+ }
- m_bRecursiveDive = false;
+ m_bRecursiveDive = false;
- return bOk;
+ return bOk;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Short cut function call to write only to the Log file.
-// The logger must be initialized successfully before a write to any registered
+// The logger must be initialized successfully before a write to any
+// registered
// can be carried out.
// Type: Static.
// Args: vData - (R) The data to write to the logger.
@@ -311,47 +308,42 @@ CMICmnLog::Write(const CMIUtilString &vD
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmnLog::WriteLog(const CMIUtilString &vData)
-{
- return CMICmnLog::Instance().Write(vData, CMICmnLog::eLogVerbosity_Log);
+bool CMICmnLog::WriteLog(const CMIUtilString &vData) {
+ return CMICmnLog::Instance().Write(vData, CMICmnLog::eLogVerbosity_Log);
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Retrieve a string detailing the last error.
// Type: Method.
// Args: None,
// Return: CMIUtilString.
// Throws: None.
//--
-const CMIUtilString &
-CMICmnLog::GetErrorDescription() const
-{
- return m_strMILastErrorDescription;
+const CMIUtilString &CMICmnLog::GetErrorDescription() const {
+ return m_strMILastErrorDescription;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Set the internal description of the last error.
// Type: Method.
// Args: (R) String containing a description of the last error.
// Return: None.
// Throws: None.
//--
-void
-CMICmnLog::SetErrorDescription(const CMIUtilString &vrTxt) const
-{
- m_strMILastErrorDescription = vrTxt;
+void CMICmnLog::SetErrorDescription(const CMIUtilString &vrTxt) const {
+ m_strMILastErrorDescription = vrTxt;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Clear the last error.
// Type: None.
// Args: None.
// Return: None.
// Throws: None.
//--
-void
-CMICmnLog::ClrErrorDescription() const
-{
- m_strMILastErrorDescription = CMIUtilString("");
+void CMICmnLog::ClrErrorDescription() const {
+ m_strMILastErrorDescription = CMIUtilString("");
}
Modified: lldb/trunk/tools/lldb-mi/MICmnLog.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnLog.h?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnLog.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmnLog.h Tue Sep 6 15:57:50 2016
@@ -13,11 +13,12 @@
#include <map>
// In-house headers:
-#include "MIUtilString.h"
#include "MICmnBase.h"
#include "MIUtilSingletonBase.h"
+#include "MIUtilString.h"
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI common code implementation class. Handle application trace
// activity logging. Medium objects derived from the Medium abstract
/// class are registered with this logger. The function Write is called
@@ -27,102 +28,112 @@
// application.
// Singleton class.
//--
-class CMICmnLog : public MI::ISingleton<CMICmnLog>
-{
- friend MI::ISingleton<CMICmnLog>;
-
- // Enumeration:
- public:
- //++
- // Description: Data given to the Logger can be of several types. The Logger can be
- // set at levels of verbosity. Can determine how data is sent to one or
- // mediums.
- //--
- enum ELogVerbosity
- { // Descriptions of what 'may' occur, depends ultimately on the medium itself. See the medium.
- eLogVerbosity_FnTrace = 0x00000004, // Debug function stack call tracing
- eLogVerbosity_DbgOp = 0x00000008, // Send a string to the debugger for display (not implemented)
- eLogVerbosity_ClientMsg = 0x00000010, // A client using MI can insert messages into the log (not implemented)
- eLogVerbosity_Log = 0x00000020 // Send to only the Log file.
- };
-
- // Class:
- public:
- //++
- // Description: Register a medium derived from this interface which will be
- // called writing log trace data i.e. a file or a console.
- // Medium objects registered are not owned by *this logger.
- //--
- class IMedium
- {
- public:
- virtual bool Initialize() = 0;
- virtual const CMIUtilString &GetName() const = 0;
- virtual bool Write(const CMIUtilString &vData, const ELogVerbosity veType) = 0;
- virtual const CMIUtilString &GetError() const = 0;
- virtual bool Shutdown() = 0;
-
- // Not part of the interface, ignore
- // AD: This virtual destructor seems to hit a bug in the stdlib
- // where vector delete is incorrectly called. Workaround is
- // to comment this out while I investigate.
- /* dtor */ virtual ~IMedium() {}
- };
-
- // Statics:
- public:
- static bool WriteLog(const CMIUtilString &vData);
-
- // Methods:
- public:
- bool RegisterMedium(const IMedium &vrMedium);
- bool UnregisterMedium(const IMedium &vrMedium);
- bool Write(const CMIUtilString &vData, const ELogVerbosity veType);
- bool SetEnabled(const bool vbYes);
- bool GetEnabled() const;
-
- // MI common object handling - duplicate of CMICmnBase functions, necessary for LINUX build
- // Done to stop locking on object construction init circular dependency.
- const CMIUtilString &GetErrorDescription() const;
- void SetErrorDescription(const CMIUtilString &vrTxt) const;
- void ClrErrorDescription() const;
+class CMICmnLog : public MI::ISingleton<CMICmnLog> {
+ friend MI::ISingleton<CMICmnLog>;
- // Overridden:
+ // Enumeration:
+public:
+ //++
+ // Description: Data given to the Logger can be of several types. The Logger
+ // can be
+ // set at levels of verbosity. Can determine how data is sent to
+ // one or
+ // mediums.
+ //--
+ enum ELogVerbosity { // Descriptions of what 'may' occur, depends ultimately
+ // on the medium itself. See the medium.
+ eLogVerbosity_FnTrace = 0x00000004, // Debug function stack call tracing
+ eLogVerbosity_DbgOp = 0x00000008, // Send a string to the debugger for
+ // display (not implemented)
+ eLogVerbosity_ClientMsg = 0x00000010, // A client using MI can insert
+ // messages into the log (not
+ // implemented)
+ eLogVerbosity_Log = 0x00000020 // Send to only the Log file.
+ };
+
+ // Class:
+public:
+ //++
+ // Description: Register a medium derived from this interface which will be
+ // called writing log trace data i.e. a file or a console.
+ // Medium objects registered are not owned by *this logger.
+ //--
+ class IMedium {
public:
- // From MI::ISingleton
- bool Initialize() override;
- bool Shutdown() override;
-
- // Methods:
- private:
- /* ctor */ CMICmnLog();
- /* ctor */ CMICmnLog(const CMICmnLog &);
- void operator=(const CMICmnLog &);
-
- // Overridden:
- private:
- // From CMICmnBase
- /* dtor */ ~CMICmnLog() override;
-
- // Typedef:
- private:
- typedef std::map<IMedium *, CMIUtilString> MapMediumToName_t;
- typedef std::pair<IMedium *, CMIUtilString> MapPairMediumToName_t;
-
- // Methods:
- private:
- bool HaveMediumAlready(const IMedium &vrMedium) const;
- bool UnregisterMediumAll();
-
- // Attributes:
- private:
- bool m_bRecursiveDive; // True = yes recursive, false = no
- MapMediumToName_t m_mapMediumToName;
- bool m_bEnabled; // True = Logger enabled for writing to mediums, false = medium not written to
- bool m_bInitializingATM; // True = Yes in process of initing *this logger, false = not initing
- //
- // MI common object handling - duplicate of CMICmnBase functions, necessary for LINUX build
- bool m_bInitialized; // True = yes successfully initialized, false = no yet or failed
- mutable CMIUtilString m_strMILastErrorDescription;
- MIint m_clientUsageRefCnt; // Count of client using *this object so not shutdown() object to early
+ virtual bool Initialize() = 0;
+ virtual const CMIUtilString &GetName() const = 0;
+ virtual bool Write(const CMIUtilString &vData,
+ const ELogVerbosity veType) = 0;
+ virtual const CMIUtilString &GetError() const = 0;
+ virtual bool Shutdown() = 0;
+
+ // Not part of the interface, ignore
+ // AD: This virtual destructor seems to hit a bug in the stdlib
+ // where vector delete is incorrectly called. Workaround is
+ // to comment this out while I investigate.
+ /* dtor */ virtual ~IMedium() {}
+ };
+
+ // Statics:
+public:
+ static bool WriteLog(const CMIUtilString &vData);
+
+ // Methods:
+public:
+ bool RegisterMedium(const IMedium &vrMedium);
+ bool UnregisterMedium(const IMedium &vrMedium);
+ bool Write(const CMIUtilString &vData, const ELogVerbosity veType);
+ bool SetEnabled(const bool vbYes);
+ bool GetEnabled() const;
+
+ // MI common object handling - duplicate of CMICmnBase functions, necessary
+ // for LINUX build
+ // Done to stop locking on object construction init circular dependency.
+ const CMIUtilString &GetErrorDescription() const;
+ void SetErrorDescription(const CMIUtilString &vrTxt) const;
+ void ClrErrorDescription() const;
+
+ // Overridden:
+public:
+ // From MI::ISingleton
+ bool Initialize() override;
+ bool Shutdown() override;
+
+ // Methods:
+private:
+ /* ctor */ CMICmnLog();
+ /* ctor */ CMICmnLog(const CMICmnLog &);
+ void operator=(const CMICmnLog &);
+
+ // Overridden:
+private:
+ // From CMICmnBase
+ /* dtor */ ~CMICmnLog() override;
+
+ // Typedef:
+private:
+ typedef std::map<IMedium *, CMIUtilString> MapMediumToName_t;
+ typedef std::pair<IMedium *, CMIUtilString> MapPairMediumToName_t;
+
+ // Methods:
+private:
+ bool HaveMediumAlready(const IMedium &vrMedium) const;
+ bool UnregisterMediumAll();
+
+ // Attributes:
+private:
+ bool m_bRecursiveDive; // True = yes recursive, false = no
+ MapMediumToName_t m_mapMediumToName;
+ bool m_bEnabled; // True = Logger enabled for writing to mediums, false =
+ // medium not written to
+ bool m_bInitializingATM; // True = Yes in process of initing *this logger,
+ // false = not initing
+ //
+ // MI common object handling - duplicate of CMICmnBase functions, necessary
+ // for LINUX build
+ bool m_bInitialized; // True = yes successfully initialized, false = no yet or
+ // failed
+ mutable CMIUtilString m_strMILastErrorDescription;
+ MIint m_clientUsageRefCnt; // Count of client using *this object so not
+ // shutdown() object to early
};
Modified: lldb/trunk/tools/lldb-mi/MICmnLogMediumFile.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnLogMediumFile.cpp?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnLogMediumFile.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmnLogMediumFile.cpp Tue Sep 6 15:57:50 2016
@@ -11,7 +11,8 @@
#include "MICmnLogMediumFile.h"
#include "MICmnResources.h"
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmnLogMediumFile constructor.
// Type: Method.
// Args: None.
@@ -19,44 +20,41 @@
// Throws: None.
//--
CMICmnLogMediumFile::CMICmnLogMediumFile()
- : m_constThisMediumName(MIRSRC(IDS_MEDIUMFILE_NAME))
- , m_constMediumFileNameFormat("lldb-mi-%s.log")
- , m_strMediumFileName(MIRSRC(IDS_MEDIUMFILE_ERR_INVALID_PATH))
- , m_strMediumFileDirectory(".")
- , m_fileNamePath(MIRSRC(IDS_MEDIUMFILE_ERR_INVALID_PATH))
- , m_eVerbosityType(CMICmnLog::eLogVerbosity_Log)
- , m_strDate(CMIUtilDateTimeStd().GetDate())
- , m_fileHeaderTxt(MIRSRC(IDS_MEDIUMFILE_ERR_FILE_HEADER))
-{
-}
+ : m_constThisMediumName(MIRSRC(IDS_MEDIUMFILE_NAME)),
+ m_constMediumFileNameFormat("lldb-mi-%s.log"),
+ m_strMediumFileName(MIRSRC(IDS_MEDIUMFILE_ERR_INVALID_PATH)),
+ m_strMediumFileDirectory("."),
+ m_fileNamePath(MIRSRC(IDS_MEDIUMFILE_ERR_INVALID_PATH)),
+ m_eVerbosityType(CMICmnLog::eLogVerbosity_Log),
+ m_strDate(CMIUtilDateTimeStd().GetDate()),
+ m_fileHeaderTxt(MIRSRC(IDS_MEDIUMFILE_ERR_FILE_HEADER)) {}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmnLogMediumFile destructor.
// Type: Overridden.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmnLogMediumFile::~CMICmnLogMediumFile()
-{
-}
+CMICmnLogMediumFile::~CMICmnLogMediumFile() {}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Get the singleton instance of *this class.
// Type: Static.
// Args: None.
// Return: CMICmnLogMediumFile - Reference to *this object.
// Throws: None.
//--
-CMICmnLogMediumFile &
-CMICmnLogMediumFile::Instance()
-{
- static CMICmnLogMediumFile instance;
+CMICmnLogMediumFile &CMICmnLogMediumFile::Instance() {
+ static CMICmnLogMediumFile instance;
- return instance;
+ return instance;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Initialize setup *this medium ready for use.
// Type: Overridden.
// Args: None.
@@ -64,49 +62,49 @@ CMICmnLogMediumFile::Instance()
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmnLogMediumFile::Initialize()
-{
- m_bInitialized = true;
- return FileFormFileNamePath();
+bool CMICmnLogMediumFile::Initialize() {
+ m_bInitialized = true;
+ return FileFormFileNamePath();
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Unbind detach or release resources used by *this medium.
// Type: Method.
// Args: None.
// Return: None.
// Throws: None.
//--
-bool
-CMICmnLogMediumFile::Shutdown()
-{
- if (m_bInitialized)
- {
- m_bInitialized = false;
- m_file.Close();
- }
- return MIstatus::success;
+bool CMICmnLogMediumFile::Shutdown() {
+ if (m_bInitialized) {
+ m_bInitialized = false;
+ m_file.Close();
+ }
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Retrieve the name of *this medium.
// Type: Overridden.
// Args: None.
// Return: CMIUtilString - Text data.
// Throws: None.
//--
-const CMIUtilString &
-CMICmnLogMediumFile::GetName() const
-{
- return m_constThisMediumName;
+const CMIUtilString &CMICmnLogMediumFile::GetName() const {
+ return m_constThisMediumName;
}
-//++ ------------------------------------------------------------------------------------
-// Details: The callee client calls the write function on the Logger. The data to be
-// written is given out to all the mediums registered. The verbosity type parameter
-// indicates to the medium the type of data or message given to it. The medium has
-// modes of verbosity and depending on the verbosity set determines which data is
+//++
+//------------------------------------------------------------------------------------
+// Details: The callee client calls the write function on the Logger. The data
+// to be
+// written is given out to all the mediums registered. The verbosity
+// type parameter
+// indicates to the medium the type of data or message given to it. The
+// medium has
+// modes of verbosity and depending on the verbosity set determines
+// which data is
// sent to the medium's output.
// Type: Method.
// Args: vData - (R) The data to write to the logger.
@@ -115,43 +113,39 @@ CMICmnLogMediumFile::GetName() const
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmnLogMediumFile::Write(const CMIUtilString &vData, const CMICmnLog::ELogVerbosity veType)
-{
- if (m_bInitialized && m_file.IsOk())
- {
- const bool bDoWrite = (m_eVerbosityType & veType);
- if (bDoWrite)
- {
- bool bNewCreated = false;
- bool bOk = m_file.CreateWrite(m_fileNamePath, bNewCreated);
- if (bOk)
- {
- if (bNewCreated)
- bOk = FileWriteHeader();
- bOk = bOk && FileWriteEnglish(MassagedData(vData, veType));
- }
- return bOk;
- }
+bool CMICmnLogMediumFile::Write(const CMIUtilString &vData,
+ const CMICmnLog::ELogVerbosity veType) {
+ if (m_bInitialized && m_file.IsOk()) {
+ const bool bDoWrite = (m_eVerbosityType & veType);
+ if (bDoWrite) {
+ bool bNewCreated = false;
+ bool bOk = m_file.CreateWrite(m_fileNamePath, bNewCreated);
+ if (bOk) {
+ if (bNewCreated)
+ bOk = FileWriteHeader();
+ bOk = bOk && FileWriteEnglish(MassagedData(vData, veType));
+ }
+ return bOk;
}
+ }
- return MIstatus::failure;
+ return MIstatus::failure;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Retrieve *this medium's last error condition.
// Type: Method.
// Args: None.
// Return: CString & - Text description.
// Throws: None.
//--
-const CMIUtilString &
-CMICmnLogMediumFile::GetError() const
-{
- return m_strMILastErrorDescription;
+const CMIUtilString &CMICmnLogMediumFile::GetError() const {
+ return m_strMILastErrorDescription;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Set the verbosity mode for this medium.
// Type: Method.
// Args: veType - (R) Mask value.
@@ -159,40 +153,35 @@ CMICmnLogMediumFile::GetError() const
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmnLogMediumFile::SetVerbosity(const MIuint veType)
-{
- m_eVerbosityType = veType;
- return MIstatus::success;
+bool CMICmnLogMediumFile::SetVerbosity(const MIuint veType) {
+ m_eVerbosityType = veType;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Get the verbosity mode for this medium.
// Type: Method.
// Args: veType - (R) Mask value.
// Return: CMICmnLog::ELogVerbosity - Mask value.
// Throws: None.
//--
-MIuint
-CMICmnLogMediumFile::GetVerbosity() const
-{
- return m_eVerbosityType;
-}
+MIuint CMICmnLogMediumFile::GetVerbosity() const { return m_eVerbosityType; }
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Write data to a file English font.
// Type: Method.
// Args: vData - (R) The data to write to the logger.
// Return: None.
// Throws: None.
//--
-bool
-CMICmnLogMediumFile::FileWriteEnglish(const CMIUtilString &vData)
-{
- return m_file.Write(vData);
+bool CMICmnLogMediumFile::FileWriteEnglish(const CMIUtilString &vData) {
+ return m_file.Write(vData);
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Determine and form the medium file's directory path and name.
// Type: Method.
// Args: None.
@@ -200,55 +189,59 @@ CMICmnLogMediumFile::FileWriteEnglish(co
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmnLogMediumFile::FileFormFileNamePath()
-{
- ClrErrorDescription();
+bool CMICmnLogMediumFile::FileFormFileNamePath() {
+ ClrErrorDescription();
- m_fileNamePath = MIRSRC(IDS_MEDIUMFILE_ERR_INVALID_PATH);
+ m_fileNamePath = MIRSRC(IDS_MEDIUMFILE_ERR_INVALID_PATH);
- CMIUtilDateTimeStd date;
- m_strMediumFileName = CMIUtilString::Format(m_constMediumFileNameFormat.c_str(), date.GetDateTimeLogFilename().c_str());
+ CMIUtilDateTimeStd date;
+ m_strMediumFileName =
+ CMIUtilString::Format(m_constMediumFileNameFormat.c_str(),
+ date.GetDateTimeLogFilename().c_str());
#if defined(_MSC_VER)
- m_fileNamePath = CMIUtilString::Format("%s\\%s", m_strMediumFileDirectory.c_str(), m_strMediumFileName.c_str());
+ m_fileNamePath = CMIUtilString::Format(
+ "%s\\%s", m_strMediumFileDirectory.c_str(), m_strMediumFileName.c_str());
#else
- m_fileNamePath = CMIUtilString::Format("%s/%s", m_strMediumFileDirectory.c_str(), m_strMediumFileName.c_str());
+ m_fileNamePath = CMIUtilString::Format(
+ "%s/%s", m_strMediumFileDirectory.c_str(), m_strMediumFileName.c_str());
#endif // defined ( _MSC_VER )
- return MIstatus::success;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Retrieve the medium file's directory path and name.
// Type: Method.
// Args: None.
// Return: CMIUtilString & - File path.
// Throws: None.
//--
-const CMIUtilString &
-CMICmnLogMediumFile::GetFileNamePath() const
-{
- return m_fileNamePath;
+const CMIUtilString &CMICmnLogMediumFile::GetFileNamePath() const {
+ return m_fileNamePath;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Retrieve the medium file's name.
// Type: Method.
// Args: None.
// Return: CMIUtilString & - File name.
// Throws: None.
//--
-const CMIUtilString &
-CMICmnLogMediumFile::GetFileName() const
-{
- return m_strMediumFileName;
+const CMIUtilString &CMICmnLogMediumFile::GetFileName() const {
+ return m_strMediumFileName;
}
-//++ ------------------------------------------------------------------------------------
-// Details: Massage the data to behave correct when submitted to file. Insert extra log
-// specific text. The veType is there to allow in the future to parse the log and
-// filter in out specific types of message to make viewing the log more manageable.
+//++
+//------------------------------------------------------------------------------------
+// Details: Massage the data to behave correct when submitted to file. Insert
+// extra log
+// specific text. The veType is there to allow in the future to parse
+// the log and
+// filter in out specific types of message to make viewing the log more
+// manageable.
// Type: Method.
// Args: vData - (R) Raw data.
// veType - (R) Message type.
@@ -256,58 +249,58 @@ CMICmnLogMediumFile::GetFileName() const
// Throws: None.
//--
CMIUtilString
-CMICmnLogMediumFile::MassagedData(const CMIUtilString &vData, const CMICmnLog::ELogVerbosity veType)
-{
- const CMIUtilString strCr("\n");
- CMIUtilString data;
- const char verbosityCode(ConvertLogVerbosityTypeToId(veType));
- const CMIUtilString dt(CMIUtilString::Format("%s %s", m_strDate.c_str(), m_dateTime.GetTime().c_str()));
-
- data = CMIUtilString::Format("%c,%s,%s", verbosityCode, dt.c_str(), vData.c_str());
- data = ConvertCr(data);
-
- // Look for EOL...
- const size_t pos = vData.rfind(strCr);
- if (pos == vData.size())
- return data;
+CMICmnLogMediumFile::MassagedData(const CMIUtilString &vData,
+ const CMICmnLog::ELogVerbosity veType) {
+ const CMIUtilString strCr("\n");
+ CMIUtilString data;
+ const char verbosityCode(ConvertLogVerbosityTypeToId(veType));
+ const CMIUtilString dt(CMIUtilString::Format("%s %s", m_strDate.c_str(),
+ m_dateTime.GetTime().c_str()));
+
+ data = CMIUtilString::Format("%c,%s,%s", verbosityCode, dt.c_str(),
+ vData.c_str());
+ data = ConvertCr(data);
+
+ // Look for EOL...
+ const size_t pos = vData.rfind(strCr);
+ if (pos == vData.size())
+ return data;
- // ... did not have an EOL so add one
- data += GetLineReturn();
+ // ... did not have an EOL so add one
+ data += GetLineReturn();
- return data;
+ return data;
}
-//++ ------------------------------------------------------------------------------------
-// Details: Convert the Log's verbosity type number into a single char character.
+//++
+//------------------------------------------------------------------------------------
+// Details: Convert the Log's verbosity type number into a single char
+// character.
// Type: Method.
// Args: veType - (R) Message type.
// Return: wchar_t - A letter.
// Throws: None.
//--
-char
-CMICmnLogMediumFile::ConvertLogVerbosityTypeToId(const CMICmnLog::ELogVerbosity veType) const
-{
- char c = 0;
- if (veType != 0)
- {
- MIuint cnt = 0;
- MIuint number(veType);
- while (1 != number)
- {
- number = number >> 1;
- ++cnt;
- }
- c = 'A' + cnt;
- }
- else
- {
- c = '*';
+char CMICmnLogMediumFile::ConvertLogVerbosityTypeToId(
+ const CMICmnLog::ELogVerbosity veType) const {
+ char c = 0;
+ if (veType != 0) {
+ MIuint cnt = 0;
+ MIuint number(veType);
+ while (1 != number) {
+ number = number >> 1;
+ ++cnt;
}
+ c = 'A' + cnt;
+ } else {
+ c = '*';
+ }
- return c;
+ return c;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Retrieve state of whether the file medium is ok.
// Type: Method.
// Args: None.
@@ -315,13 +308,10 @@ CMICmnLogMediumFile::ConvertLogVerbosity
// False - file has a problem.
// Throws: None.
//--
-bool
-CMICmnLogMediumFile::IsOk() const
-{
- return m_file.IsOk();
-}
+bool CMICmnLogMediumFile::IsOk() const { return m_file.IsOk(); }
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Status on the file log medium existing already.
// Type: Method.
// Args: None.
@@ -329,13 +319,12 @@ CMICmnLogMediumFile::IsOk() const
// False - Not found.
// Throws: None.
//--
-bool
-CMICmnLogMediumFile::IsFileExist() const
-{
- return m_file.IsFileExist(GetFileNamePath());
+bool CMICmnLogMediumFile::IsFileExist() const {
+ return m_file.IsFileExist(GetFileNamePath());
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Write the header text the logger file.
// Type: Method.
// Args: vText - (R) Text.
@@ -343,72 +332,69 @@ CMICmnLogMediumFile::IsFileExist() const
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmnLogMediumFile::FileWriteHeader()
-{
- return FileWriteEnglish(ConvertCr(m_fileHeaderTxt));
+bool CMICmnLogMediumFile::FileWriteHeader() {
+ return FileWriteEnglish(ConvertCr(m_fileHeaderTxt));
}
-//++ ------------------------------------------------------------------------------------
-// Details: Convert any carriage line returns to be compatible with the platform the
+//++
+//------------------------------------------------------------------------------------
+// Details: Convert any carriage line returns to be compatible with the platform
+// the
// Log file is being written to.
// Type: Method.
// Args: vData - (R) Text data.
// Return: CMIUtilString - Converted string data.
// Throws: None.
//--
-CMIUtilString
-CMICmnLogMediumFile::ConvertCr(const CMIUtilString &vData) const
-{
- const CMIUtilString strCr("\n");
- const CMIUtilString &rCrCmpat(GetLineReturn());
-
- if (strCr == rCrCmpat)
- return vData;
-
- const size_t nSizeCmpat(rCrCmpat.size());
- const size_t nSize(strCr.size());
- CMIUtilString strConv(vData);
- size_t pos = strConv.find(strCr);
- while (pos != CMIUtilString::npos)
- {
- strConv.replace(pos, nSize, rCrCmpat);
- pos = strConv.find(strCr, pos + nSizeCmpat);
- }
-
- return strConv;
-}
-
-//++ ------------------------------------------------------------------------------------
-// Details: Set the header text that is written to the logger file at the beginning.
+CMIUtilString CMICmnLogMediumFile::ConvertCr(const CMIUtilString &vData) const {
+ const CMIUtilString strCr("\n");
+ const CMIUtilString &rCrCmpat(GetLineReturn());
+
+ if (strCr == rCrCmpat)
+ return vData;
+
+ const size_t nSizeCmpat(rCrCmpat.size());
+ const size_t nSize(strCr.size());
+ CMIUtilString strConv(vData);
+ size_t pos = strConv.find(strCr);
+ while (pos != CMIUtilString::npos) {
+ strConv.replace(pos, nSize, rCrCmpat);
+ pos = strConv.find(strCr, pos + nSizeCmpat);
+ }
+
+ return strConv;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: Set the header text that is written to the logger file at the
+// beginning.
// Type: Method.
// Args: vText - (R) Text.
// Return: MIstatus::success - Functional succeeded.
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmnLogMediumFile::SetHeaderTxt(const CMIUtilString &vText)
-{
- m_fileHeaderTxt = vText;
+bool CMICmnLogMediumFile::SetHeaderTxt(const CMIUtilString &vText) {
+ m_fileHeaderTxt = vText;
- return MIstatus::success;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Retrieve the file current carriage line return characters used.
// Type: Method.
// Args: None.
// Return: CMIUtilString & - Text.
// Throws: None.
//--
-const CMIUtilString &
-CMICmnLogMediumFile::GetLineReturn() const
-{
- return m_file.GetLineReturn();
+const CMIUtilString &CMICmnLogMediumFile::GetLineReturn() const {
+ return m_file.GetLineReturn();
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Set the directory to place the log file.
// Type: Method.
// Args: vPath - (R) Path to log.
@@ -416,10 +402,8 @@ CMICmnLogMediumFile::GetLineReturn() con
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmnLogMediumFile::SetDirectory(const CMIUtilString &vPath)
-{
- m_strMediumFileDirectory = vPath;
+bool CMICmnLogMediumFile::SetDirectory(const CMIUtilString &vPath) {
+ m_strMediumFileDirectory = vPath;
- return FileFormFileNamePath();
+ return FileFormFileNamePath();
}
Modified: lldb/trunk/tools/lldb-mi/MICmnLogMediumFile.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnLogMediumFile.h?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnLogMediumFile.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmnLogMediumFile.h Tue Sep 6 15:57:50 2016
@@ -10,73 +10,76 @@
#pragma once
// In-house headers:
-#include "MIUtilFileStd.h"
-#include "MIUtilString.h"
#include "MICmnBase.h"
#include "MICmnLog.h"
#include "MIUtilDateTimeStd.h"
+#include "MIUtilFileStd.h"
+#include "MIUtilString.h"
-//++ ============================================================================
-// Details: MI common code implementation class. Logs application fn trace/message/
+//++
+//============================================================================
+// Details: MI common code implementation class. Logs application fn
+// trace/message/
// error messages to a file. Used as part of the CMICmnLog Logger
// system. When instantiated *this object is register with the Logger
// which the Logger when given data to write to registered medium comes
// *this medium.
// Singleton class.
//--
-class CMICmnLogMediumFile : public CMICmnBase, public CMICmnLog::IMedium
-{
- // Statics:
- public:
- static CMICmnLogMediumFile &Instance();
-
- // Methods:
- public:
- bool SetHeaderTxt(const CMIUtilString &vText);
- bool SetVerbosity(const MIuint veType);
- MIuint GetVerbosity() const;
- const CMIUtilString &GetFileName() const;
- const CMIUtilString &GetFileNamePath() const;
- bool IsOk() const;
- bool IsFileExist() const;
- const CMIUtilString &GetLineReturn() const;
- bool SetDirectory(const CMIUtilString &vPath);
-
- // Overridden:
- public:
- // From CMICmnBase
- /* dtor */ ~CMICmnLogMediumFile() override;
- // From CMICmnLog::IMedium
- bool Initialize() override;
- const CMIUtilString &GetName() const override;
- bool Write(const CMIUtilString &vData, const CMICmnLog::ELogVerbosity veType) override;
- const CMIUtilString &GetError() const override;
- bool Shutdown() override;
-
- // Methods:
- private:
- /* ctor */ CMICmnLogMediumFile();
- /* ctor */ CMICmnLogMediumFile(const CMICmnLogMediumFile &);
- void operator=(const CMICmnLogMediumFile &);
-
- bool FileWriteEnglish(const CMIUtilString &vData);
- bool FileFormFileNamePath();
- CMIUtilString MassagedData(const CMIUtilString &vData, const CMICmnLog::ELogVerbosity veType);
- bool FileWriteHeader();
- char ConvertLogVerbosityTypeToId(const CMICmnLog::ELogVerbosity veType) const;
- CMIUtilString ConvertCr(const CMIUtilString &vData) const;
-
- // Attributes:
- private:
- const CMIUtilString m_constThisMediumName;
- const CMIUtilString m_constMediumFileNameFormat;
- //
- CMIUtilString m_strMediumFileName;
- CMIUtilString m_strMediumFileDirectory;
- CMIUtilString m_fileNamePath;
- MIuint m_eVerbosityType;
- CMIUtilString m_strDate;
- CMIUtilString m_fileHeaderTxt;
- CMIUtilFileStd m_file;
- CMIUtilDateTimeStd m_dateTime;
+class CMICmnLogMediumFile : public CMICmnBase, public CMICmnLog::IMedium {
+ // Statics:
+public:
+ static CMICmnLogMediumFile &Instance();
+
+ // Methods:
+public:
+ bool SetHeaderTxt(const CMIUtilString &vText);
+ bool SetVerbosity(const MIuint veType);
+ MIuint GetVerbosity() const;
+ const CMIUtilString &GetFileName() const;
+ const CMIUtilString &GetFileNamePath() const;
+ bool IsOk() const;
+ bool IsFileExist() const;
+ const CMIUtilString &GetLineReturn() const;
+ bool SetDirectory(const CMIUtilString &vPath);
+
+ // Overridden:
+public:
+ // From CMICmnBase
+ /* dtor */ ~CMICmnLogMediumFile() override;
+ // From CMICmnLog::IMedium
+ bool Initialize() override;
+ const CMIUtilString &GetName() const override;
+ bool Write(const CMIUtilString &vData,
+ const CMICmnLog::ELogVerbosity veType) override;
+ const CMIUtilString &GetError() const override;
+ bool Shutdown() override;
+
+ // Methods:
+private:
+ /* ctor */ CMICmnLogMediumFile();
+ /* ctor */ CMICmnLogMediumFile(const CMICmnLogMediumFile &);
+ void operator=(const CMICmnLogMediumFile &);
+
+ bool FileWriteEnglish(const CMIUtilString &vData);
+ bool FileFormFileNamePath();
+ CMIUtilString MassagedData(const CMIUtilString &vData,
+ const CMICmnLog::ELogVerbosity veType);
+ bool FileWriteHeader();
+ char ConvertLogVerbosityTypeToId(const CMICmnLog::ELogVerbosity veType) const;
+ CMIUtilString ConvertCr(const CMIUtilString &vData) const;
+
+ // Attributes:
+private:
+ const CMIUtilString m_constThisMediumName;
+ const CMIUtilString m_constMediumFileNameFormat;
+ //
+ CMIUtilString m_strMediumFileName;
+ CMIUtilString m_strMediumFileDirectory;
+ CMIUtilString m_fileNamePath;
+ MIuint m_eVerbosityType;
+ CMIUtilString m_strDate;
+ CMIUtilString m_fileHeaderTxt;
+ CMIUtilFileStd m_file;
+ CMIUtilDateTimeStd m_dateTime;
};
Modified: lldb/trunk/tools/lldb-mi/MICmnMIOutOfBandRecord.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnMIOutOfBandRecord.cpp?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnMIOutOfBandRecord.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmnMIOutOfBandRecord.cpp Tue Sep 6 15:57:50 2016
@@ -16,99 +16,98 @@
// Instantiations:
static const char *
-MapOutOfBandToText(CMICmnMIOutOfBandRecord::OutOfBand_e veType)
-{
- switch (veType)
- {
- case CMICmnMIOutOfBandRecord::eOutOfBand_Running:
- return "running";
- case CMICmnMIOutOfBandRecord::eOutOfBand_Stopped:
- return "stopped";
- case CMICmnMIOutOfBandRecord::eOutOfBand_BreakPointCreated:
- return "breakpoint-created";
- case CMICmnMIOutOfBandRecord::eOutOfBand_BreakPointModified:
- return "breakpoint-modified";
- case CMICmnMIOutOfBandRecord::eOutOfBand_Thread:
- return ""; // "" Meant to be empty
- case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadGroupAdded:
- return "thread-group-added";
- case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadGroupExited:
- return "thread-group-exited";
- case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadGroupRemoved:
- return "thread-group-removed";
- case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadGroupStarted:
- return "thread-group-started";
- case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadCreated:
- return "thread-created";
- case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadExited:
- return "thread-exited";
- case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadSelected:
- return "thread-selected";
- case CMICmnMIOutOfBandRecord::eOutOfBand_TargetModuleLoaded:
- return "library-loaded";
- case CMICmnMIOutOfBandRecord::eOutOfBand_TargetModuleUnloaded:
- return "library-unloaded";
- case CMICmnMIOutOfBandRecord::eOutOfBand_TargetStreamOutput:
- return "";
- }
- assert(false && "unknown CMICmnMIOutofBandRecord::OutOfBand_e");
- return NULL;
+MapOutOfBandToText(CMICmnMIOutOfBandRecord::OutOfBand_e veType) {
+ switch (veType) {
+ case CMICmnMIOutOfBandRecord::eOutOfBand_Running:
+ return "running";
+ case CMICmnMIOutOfBandRecord::eOutOfBand_Stopped:
+ return "stopped";
+ case CMICmnMIOutOfBandRecord::eOutOfBand_BreakPointCreated:
+ return "breakpoint-created";
+ case CMICmnMIOutOfBandRecord::eOutOfBand_BreakPointModified:
+ return "breakpoint-modified";
+ case CMICmnMIOutOfBandRecord::eOutOfBand_Thread:
+ return ""; // "" Meant to be empty
+ case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadGroupAdded:
+ return "thread-group-added";
+ case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadGroupExited:
+ return "thread-group-exited";
+ case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadGroupRemoved:
+ return "thread-group-removed";
+ case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadGroupStarted:
+ return "thread-group-started";
+ case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadCreated:
+ return "thread-created";
+ case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadExited:
+ return "thread-exited";
+ case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadSelected:
+ return "thread-selected";
+ case CMICmnMIOutOfBandRecord::eOutOfBand_TargetModuleLoaded:
+ return "library-loaded";
+ case CMICmnMIOutOfBandRecord::eOutOfBand_TargetModuleUnloaded:
+ return "library-unloaded";
+ case CMICmnMIOutOfBandRecord::eOutOfBand_TargetStreamOutput:
+ return "";
+ }
+ assert(false && "unknown CMICmnMIOutofBandRecord::OutOfBand_e");
+ return NULL;
}
static const char *
-MapOutOfBandToToken(CMICmnMIOutOfBandRecord::OutOfBand_e veType)
-{
- switch (veType)
- {
- case CMICmnMIOutOfBandRecord::eOutOfBand_Running:
- return "*";
- case CMICmnMIOutOfBandRecord::eOutOfBand_Stopped:
- return "*";
- case CMICmnMIOutOfBandRecord::eOutOfBand_BreakPointCreated:
- return "=";
- case CMICmnMIOutOfBandRecord::eOutOfBand_BreakPointModified:
- return "=";
- case CMICmnMIOutOfBandRecord::eOutOfBand_Thread:
- return "@";
- case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadGroupAdded:
- return "=";
- case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadGroupExited:
- return "=";
- case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadGroupRemoved:
- return "=";
- case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadGroupStarted:
- return "=";
- case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadCreated:
- return "=";
- case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadExited:
- return "=";
- case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadSelected:
- return "=";
- case CMICmnMIOutOfBandRecord::eOutOfBand_TargetModuleLoaded:
- return "=";
- case CMICmnMIOutOfBandRecord::eOutOfBand_TargetModuleUnloaded:
- return "=";
- case CMICmnMIOutOfBandRecord::eOutOfBand_TargetStreamOutput:
- return "@";
- }
- assert(false && "unknown CMICmnMIOutofBandRecord::OutOfBand_e");
- return NULL;
-}
-
-//++ ------------------------------------------------------------------------------------
-// Details: Build the Out-of-band record's mandatory data part. The part up to the first
+MapOutOfBandToToken(CMICmnMIOutOfBandRecord::OutOfBand_e veType) {
+ switch (veType) {
+ case CMICmnMIOutOfBandRecord::eOutOfBand_Running:
+ return "*";
+ case CMICmnMIOutOfBandRecord::eOutOfBand_Stopped:
+ return "*";
+ case CMICmnMIOutOfBandRecord::eOutOfBand_BreakPointCreated:
+ return "=";
+ case CMICmnMIOutOfBandRecord::eOutOfBand_BreakPointModified:
+ return "=";
+ case CMICmnMIOutOfBandRecord::eOutOfBand_Thread:
+ return "@";
+ case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadGroupAdded:
+ return "=";
+ case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadGroupExited:
+ return "=";
+ case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadGroupRemoved:
+ return "=";
+ case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadGroupStarted:
+ return "=";
+ case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadCreated:
+ return "=";
+ case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadExited:
+ return "=";
+ case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadSelected:
+ return "=";
+ case CMICmnMIOutOfBandRecord::eOutOfBand_TargetModuleLoaded:
+ return "=";
+ case CMICmnMIOutOfBandRecord::eOutOfBand_TargetModuleUnloaded:
+ return "=";
+ case CMICmnMIOutOfBandRecord::eOutOfBand_TargetStreamOutput:
+ return "@";
+ }
+ assert(false && "unknown CMICmnMIOutofBandRecord::OutOfBand_e");
+ return NULL;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: Build the Out-of-band record's mandatory data part. The part up to
+// the first
// (additional) result i.e. async-record ==> "*" type.
// Args: veType - (R) A MI Out-of-Band enumeration.
// Return: CMIUtilString - The async record text.
// Throws: None.
//--
static CMIUtilString
-BuildAsyncRecord(CMICmnMIOutOfBandRecord::OutOfBand_e veType)
-{
- return CMIUtilString::Format("%s%s", MapOutOfBandToToken(veType), MapOutOfBandToText(veType));
+BuildAsyncRecord(CMICmnMIOutOfBandRecord::OutOfBand_e veType) {
+ return CMIUtilString::Format("%s%s", MapOutOfBandToToken(veType),
+ MapOutOfBandToText(veType));
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmnMIOutOfBandRecord constructor.
// Type: Method.
// Args: None.
@@ -116,11 +115,10 @@ BuildAsyncRecord(CMICmnMIOutOfBandRecord
// Throws: None.
//--
CMICmnMIOutOfBandRecord::CMICmnMIOutOfBandRecord()
- : m_strAsyncRecord(MIRSRC(IDS_CMD_ERR_EVENT_HANDLED_BUT_NO_ACTION))
-{
-}
+ : m_strAsyncRecord(MIRSRC(IDS_CMD_ERR_EVENT_HANDLED_BUT_NO_ACTION)) {}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmnMIOutOfBandRecord constructor.
// Type: Method.
// Args: veType - (R) A MI Out-of-Bound enumeration.
@@ -128,11 +126,10 @@ CMICmnMIOutOfBandRecord::CMICmnMIOutOfBa
// Throws: None.
//--
CMICmnMIOutOfBandRecord::CMICmnMIOutOfBandRecord(OutOfBand_e veType)
- : m_strAsyncRecord(BuildAsyncRecord(veType))
-{
-}
+ : m_strAsyncRecord(BuildAsyncRecord(veType)) {}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmnMIOutOfBandRecord constructor.
// Type: Method.
// Args: veType - (R) A MI Out-of-Bound enumeration.
@@ -140,13 +137,14 @@ CMICmnMIOutOfBandRecord::CMICmnMIOutOfBa
// Return: None.
// Throws: None.
//--
-CMICmnMIOutOfBandRecord::CMICmnMIOutOfBandRecord(OutOfBand_e veType, const CMICmnMIValueConst &vConst)
- : m_strAsyncRecord(BuildAsyncRecord(veType))
-{
- m_strAsyncRecord += vConst.GetString();
+CMICmnMIOutOfBandRecord::CMICmnMIOutOfBandRecord(
+ OutOfBand_e veType, const CMICmnMIValueConst &vConst)
+ : m_strAsyncRecord(BuildAsyncRecord(veType)) {
+ m_strAsyncRecord += vConst.GetString();
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmnMIOutOfBandRecord constructor.
// Type: Method.
// Args: veType - (R) A MI Out-of-Bound enumeration.
@@ -154,49 +152,50 @@ CMICmnMIOutOfBandRecord::CMICmnMIOutOfBa
// Return: None.
// Throws: None.
//--
-CMICmnMIOutOfBandRecord::CMICmnMIOutOfBandRecord(OutOfBand_e veType, const CMICmnMIValueResult &vResult)
- : m_strAsyncRecord(BuildAsyncRecord(veType))
-{
- Add(vResult);
+CMICmnMIOutOfBandRecord::CMICmnMIOutOfBandRecord(
+ OutOfBand_e veType, const CMICmnMIValueResult &vResult)
+ : m_strAsyncRecord(BuildAsyncRecord(veType)) {
+ Add(vResult);
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmnMIOutOfBandRecord destructor.
// Type: Overrideable.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmnMIOutOfBandRecord::~CMICmnMIOutOfBandRecord()
-{
-}
+CMICmnMIOutOfBandRecord::~CMICmnMIOutOfBandRecord() {}
-//++ ------------------------------------------------------------------------------------
-// Details: Return the MI Out-of-band record as a string. The string is a direct result of
-// work done on *this Out-of-band record so if not enough data is added then it is
-// possible to return a malformed Out-of-band record. If nothing has been set or
-// added to *this MI Out-of-band record object then text "<Invalid>" will be returned.
+//++
+//------------------------------------------------------------------------------------
+// Details: Return the MI Out-of-band record as a string. The string is a direct
+// result of
+// work done on *this Out-of-band record so if not enough data is added
+// then it is
+// possible to return a malformed Out-of-band record. If nothing has
+// been set or
+// added to *this MI Out-of-band record object then text "<Invalid>"
+// will be returned.
// Type: Method.
// Args: None.
// Return: CMIUtilString & - MI output text.
// Throws: None.
//--
-const CMIUtilString &
-CMICmnMIOutOfBandRecord::GetString() const
-{
- return m_strAsyncRecord;
+const CMIUtilString &CMICmnMIOutOfBandRecord::GetString() const {
+ return m_strAsyncRecord;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Add to *this Out-of-band record additional information.
// Type: Method.
// Args: vResult - (R) A MI result object.
// Return: None.
// Throws: None.
//--
-void
-CMICmnMIOutOfBandRecord::Add(const CMICmnMIValueResult &vResult)
-{
- m_strAsyncRecord += ",";
- m_strAsyncRecord += vResult.GetString();
+void CMICmnMIOutOfBandRecord::Add(const CMICmnMIValueResult &vResult) {
+ m_strAsyncRecord += ",";
+ m_strAsyncRecord += vResult.GetString();
}
Modified: lldb/trunk/tools/lldb-mi/MICmnMIOutOfBandRecord.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnMIOutOfBandRecord.h?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnMIOutOfBandRecord.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmnMIOutOfBandRecord.h Tue Sep 6 15:57:50 2016
@@ -11,72 +11,82 @@
// In-house headers:
#include "MICmnBase.h"
-#include "MIUtilString.h"
#include "MICmnMIValueConst.h"
#include "MICmnMIValueResult.h"
+#include "MIUtilString.h"
-//++ ============================================================================
-// Details: MI common code MI Out-of-band (Async) Record class. A class that encapsulates
+//++
+//============================================================================
+// Details: MI common code MI Out-of-band (Async) Record class. A class that
+// encapsulates
// MI result record data and the forming/format of data added to it.
-// Out-of-band records are used to notify the GDB/MI client of additional
-// changes that have occurred. Those changes can either be a consequence
-// of GDB/MI (e.g., a breakpoint modified) or a result of target activity
+// Out-of-band records are used to notify the GDB/MI client of
+// additional
+// changes that have occurred. Those changes can either be a
+// consequence
+// of GDB/MI (e.g., a breakpoint modified) or a result of target
+// activity
// (e.g., target stopped).
// The syntax is as follows:
// "*" type ( "," result )*
// type ==> running | stopped
//
// The Out-of-band record can be retrieve at any time *this object is
-// instantiated so unless work is done on *this Out-of-band record then it is
-// possible to return a malformed Out-of-band record. If nothing has been set
-// or added to *this MI Out-of-band record object then text "<Invalid>" will
+// instantiated so unless work is done on *this Out-of-band record then
+// it is
+// possible to return a malformed Out-of-band record. If nothing has
+// been set
+// or added to *this MI Out-of-band record object then text "<Invalid>"
+// will
// be returned.
//
// More information see:
// http://ftp.gnu.org/old-gnu/Manuals/gdb-5.1.1/html_chapter/gdb_22.html//
//--
-class CMICmnMIOutOfBandRecord : public CMICmnBase
-{
- // Enumerations:
- public:
- //++
- // Details: Enumeration of the type of Out-of-band for *this Out-of-band record
- //--
- enum OutOfBand_e
- {
- eOutOfBand_Running = 0,
- eOutOfBand_Stopped,
- eOutOfBand_BreakPointCreated,
- eOutOfBand_BreakPointModified,
- eOutOfBand_Thread,
- eOutOfBand_ThreadGroupAdded,
- eOutOfBand_ThreadGroupExited,
- eOutOfBand_ThreadGroupRemoved,
- eOutOfBand_ThreadGroupStarted,
- eOutOfBand_ThreadCreated,
- eOutOfBand_ThreadExited,
- eOutOfBand_ThreadSelected,
- eOutOfBand_TargetModuleLoaded,
- eOutOfBand_TargetModuleUnloaded,
- eOutOfBand_TargetStreamOutput
- };
+class CMICmnMIOutOfBandRecord : public CMICmnBase {
+ // Enumerations:
+public:
+ //++
+ // Details: Enumeration of the type of Out-of-band for *this Out-of-band
+ // record
+ //--
+ enum OutOfBand_e {
+ eOutOfBand_Running = 0,
+ eOutOfBand_Stopped,
+ eOutOfBand_BreakPointCreated,
+ eOutOfBand_BreakPointModified,
+ eOutOfBand_Thread,
+ eOutOfBand_ThreadGroupAdded,
+ eOutOfBand_ThreadGroupExited,
+ eOutOfBand_ThreadGroupRemoved,
+ eOutOfBand_ThreadGroupStarted,
+ eOutOfBand_ThreadCreated,
+ eOutOfBand_ThreadExited,
+ eOutOfBand_ThreadSelected,
+ eOutOfBand_TargetModuleLoaded,
+ eOutOfBand_TargetModuleUnloaded,
+ eOutOfBand_TargetStreamOutput
+ };
- // Methods:
- public:
- /* ctor */ CMICmnMIOutOfBandRecord();
- /* ctor */ CMICmnMIOutOfBandRecord(OutOfBand_e veType);
- /* ctor */ CMICmnMIOutOfBandRecord(OutOfBand_e veType, const CMICmnMIValueConst &vConst);
- /* ctor */ CMICmnMIOutOfBandRecord(OutOfBand_e veType, const CMICmnMIValueResult &vResult);
- //
- const CMIUtilString &GetString() const;
- void Add(const CMICmnMIValueResult &vResult);
+ // Methods:
+public:
+ /* ctor */ CMICmnMIOutOfBandRecord();
+ /* ctor */ CMICmnMIOutOfBandRecord(OutOfBand_e veType);
+ /* ctor */ CMICmnMIOutOfBandRecord(OutOfBand_e veType,
+ const CMICmnMIValueConst &vConst);
+ /* ctor */ CMICmnMIOutOfBandRecord(OutOfBand_e veType,
+ const CMICmnMIValueResult &vResult);
+ //
+ const CMIUtilString &GetString() const;
+ void Add(const CMICmnMIValueResult &vResult);
- // Overridden:
- public:
- // From CMICmnBase
- /* dtor */ ~CMICmnMIOutOfBandRecord() override;
+ // Overridden:
+public:
+ // From CMICmnBase
+ /* dtor */ ~CMICmnMIOutOfBandRecord() override;
- // Attributes:
- private:
- CMIUtilString m_strAsyncRecord; // Holds the text version of the result record to date
+ // Attributes:
+private:
+ CMIUtilString
+ m_strAsyncRecord; // Holds the text version of the result record to date
};
Modified: lldb/trunk/tools/lldb-mi/MICmnMIResultRecord.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnMIResultRecord.cpp?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnMIResultRecord.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmnMIResultRecord.cpp Tue Sep 6 15:57:50 2016
@@ -14,48 +14,51 @@
#include "MICmnMIResultRecord.h"
#include "MICmnResources.h"
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Map a result class to the corresponding string.
// Args: veType - (R) A MI result class enumeration.
// Return: const char* - The string corresponding to the result class.
// Throws: None.
//--
-static const char*
-MapResultClassToResultClassText(CMICmnMIResultRecord::ResultClass_e veType)
-{
- switch (veType)
- {
- case CMICmnMIResultRecord::eResultClass_Done:
- return "done";
- case CMICmnMIResultRecord::eResultClass_Running:
- return "running";
- case CMICmnMIResultRecord::eResultClass_Connected:
- return "connected";
- case CMICmnMIResultRecord::eResultClass_Error:
- return "error";
- case CMICmnMIResultRecord::eResultClass_Exit:
- return "exit";
- }
- assert(false && "unknown CMICmnMIResultRecord::ResultClass_e");
- return NULL;
-}
-
-//++ ------------------------------------------------------------------------------------
-// Details: Build the result record's mandatory data part. The part up to the first
-// (additional) result i.e. result-record ==> [ token ] "^" result-class.
+static const char *
+MapResultClassToResultClassText(CMICmnMIResultRecord::ResultClass_e veType) {
+ switch (veType) {
+ case CMICmnMIResultRecord::eResultClass_Done:
+ return "done";
+ case CMICmnMIResultRecord::eResultClass_Running:
+ return "running";
+ case CMICmnMIResultRecord::eResultClass_Connected:
+ return "connected";
+ case CMICmnMIResultRecord::eResultClass_Error:
+ return "error";
+ case CMICmnMIResultRecord::eResultClass_Exit:
+ return "exit";
+ }
+ assert(false && "unknown CMICmnMIResultRecord::ResultClass_e");
+ return NULL;
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: Build the result record's mandatory data part. The part up to the
+// first
+// (additional) result i.e. result-record ==> [ token ] "^"
+// result-class.
// Args: vrToken - (R) The command's transaction ID or token.
// veType - (R) A MI result class enumeration.
// Return: CMIUtilString & - MI result record mandatory data
// Throws: None.
//--
static const CMIUtilString
-BuildResultRecord(const CMIUtilString &vrToken, CMICmnMIResultRecord::ResultClass_e veType)
-{
- const char *pStrResultRecord = MapResultClassToResultClassText(veType);
- return CMIUtilString::Format("%s^%s", vrToken.c_str(), pStrResultRecord);
+BuildResultRecord(const CMIUtilString &vrToken,
+ CMICmnMIResultRecord::ResultClass_e veType) {
+ const char *pStrResultRecord = MapResultClassToResultClassText(veType);
+ return CMIUtilString::Format("%s^%s", vrToken.c_str(), pStrResultRecord);
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmnMIResultRecord constructor.
// Type: Method.
// Args: None.
@@ -63,11 +66,10 @@ BuildResultRecord(const CMIUtilString &v
// Throws: None.
//--
CMICmnMIResultRecord::CMICmnMIResultRecord()
- : m_strResultRecord(MIRSRC(IDS_CMD_ERR_CMD_RUN_BUT_NO_ACTION))
-{
-}
+ : m_strResultRecord(MIRSRC(IDS_CMD_ERR_CMD_RUN_BUT_NO_ACTION)) {}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmnMIResultRecord constructor.
// Type: Method.
// Args: vrToken - (R) The command's transaction ID or token.
@@ -75,12 +77,12 @@ CMICmnMIResultRecord::CMICmnMIResultReco
// Return: None.
// Throws: None.
//--
-CMICmnMIResultRecord::CMICmnMIResultRecord(const CMIUtilString &vrToken, ResultClass_e veType)
- : m_strResultRecord(BuildResultRecord(vrToken, veType))
-{
-}
+CMICmnMIResultRecord::CMICmnMIResultRecord(const CMIUtilString &vrToken,
+ ResultClass_e veType)
+ : m_strResultRecord(BuildResultRecord(vrToken, veType)) {}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmnMIResultRecord constructor.
// Type: Method.
// Args: vrToken - (R) The command's transaction ID or token.
@@ -89,49 +91,51 @@ CMICmnMIResultRecord::CMICmnMIResultReco
// Return: None.
// Throws: None.
//--
-CMICmnMIResultRecord::CMICmnMIResultRecord(const CMIUtilString &vrToken, ResultClass_e veType, const CMICmnMIValueResult &vValue)
- : m_strResultRecord(BuildResultRecord(vrToken, veType))
-{
- Add(vValue);
+CMICmnMIResultRecord::CMICmnMIResultRecord(const CMIUtilString &vrToken,
+ ResultClass_e veType,
+ const CMICmnMIValueResult &vValue)
+ : m_strResultRecord(BuildResultRecord(vrToken, veType)) {
+ Add(vValue);
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmnMIResultRecord destructor.
// Type: Overrideable.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmnMIResultRecord::~CMICmnMIResultRecord()
-{
-}
+CMICmnMIResultRecord::~CMICmnMIResultRecord() {}
-//++ ------------------------------------------------------------------------------------
-// Details: Return the MI result record as a string. The string is a direct result of
-// work done on *this result record so if not enough data is added then it is
-// possible to return a malformed result record. If nothing has been set or
-// added to *this MI result record object then text "<Invalid>" will be returned.
+//++
+//------------------------------------------------------------------------------------
+// Details: Return the MI result record as a string. The string is a direct
+// result of
+// work done on *this result record so if not enough data is added then
+// it is
+// possible to return a malformed result record. If nothing has been
+// set or
+// added to *this MI result record object then text "<Invalid>" will be
+// returned.
// Type: Method.
// Args: None.
// Return: CMIUtilString & - MI output text.
// Throws: None.
//--
-const CMIUtilString &
-CMICmnMIResultRecord::GetString() const
-{
- return m_strResultRecord;
+const CMIUtilString &CMICmnMIResultRecord::GetString() const {
+ return m_strResultRecord;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Add to *this result record additional information.
// Type: Method.
// Args: vMIValue - (R) A MI value derived object.
// Return: None.
// Throws: None.
//--
-void
-CMICmnMIResultRecord::Add(const CMICmnMIValue &vMIValue)
-{
- m_strResultRecord += ",";
- m_strResultRecord += vMIValue.GetString();
+void CMICmnMIResultRecord::Add(const CMICmnMIValue &vMIValue) {
+ m_strResultRecord += ",";
+ m_strResultRecord += vMIValue.GetString();
}
Modified: lldb/trunk/tools/lldb-mi/MICmnMIResultRecord.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnMIResultRecord.h?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnMIResultRecord.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmnMIResultRecord.h Tue Sep 6 15:57:50 2016
@@ -11,10 +11,11 @@
// In-house headers:
#include "MICmnBase.h"
-#include "MIUtilString.h"
#include "MICmnMIValueResult.h"
+#include "MIUtilString.h"
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI common code MI Result Record class. A class that encapsulates
// MI result record data and the forming/format of data added to it.
// The syntax is as follows:
@@ -25,49 +26,55 @@
// result-class ==> "done" | "running" | "connected" | "error" | "exit"
// result ==> variable "=" value
// value ==> const | tuple | list
-// const ==> c-string (7 bit iso c string content) i.e. "all" inc quotes
+// const ==> c-string (7 bit iso c string content) i.e. "all" inc
+// quotes
// tuple ==> "{}" | "{" result ( "," result )* "}"
-// list ==> "[]" | "[" value ( "," value )* "]" | "[" result ( "," result )* "]"
+// list ==> "[]" | "[" value ( "," value )* "]" | "[" result ( ","
+// result )* "]"
//
// The result record can be retrieve at any time *this object is
-// instantiated so unless work is done on *this result record then it is
-// possible to return a malformed result record. If nothing has been set
+// instantiated so unless work is done on *this result record then it
+// is
+// possible to return a malformed result record. If nothing has been
+// set
// or added to *this MI result record object then text "<Invalid>" will
// be returned.
// More information see:
// http://ftp.gnu.org/old-gnu/Manuals/gdb-5.1.1/html_chapter/gdb_22.html
//--
-class CMICmnMIResultRecord : public CMICmnBase
-{
- // Enumerations:
- public:
- //++
- // Details: Enumeration of the result class for *this result record
- //--
- enum ResultClass_e
- {
- eResultClass_Done = 0,
- eResultClass_Running,
- eResultClass_Connected,
- eResultClass_Error,
- eResultClass_Exit
- };
+class CMICmnMIResultRecord : public CMICmnBase {
+ // Enumerations:
+public:
+ //++
+ // Details: Enumeration of the result class for *this result record
+ //--
+ enum ResultClass_e {
+ eResultClass_Done = 0,
+ eResultClass_Running,
+ eResultClass_Connected,
+ eResultClass_Error,
+ eResultClass_Exit
+ };
- // Methods:
- public:
- /* ctor */ CMICmnMIResultRecord();
- /* ctor */ CMICmnMIResultRecord(const CMIUtilString &vrToken, ResultClass_e veType);
- /* ctor */ CMICmnMIResultRecord(const CMIUtilString &vrToken, ResultClass_e veType, const CMICmnMIValueResult &vValue);
- //
- const CMIUtilString &GetString() const;
- void Add(const CMICmnMIValue &vMIValue);
+ // Methods:
+public:
+ /* ctor */ CMICmnMIResultRecord();
+ /* ctor */ CMICmnMIResultRecord(const CMIUtilString &vrToken,
+ ResultClass_e veType);
+ /* ctor */ CMICmnMIResultRecord(const CMIUtilString &vrToken,
+ ResultClass_e veType,
+ const CMICmnMIValueResult &vValue);
+ //
+ const CMIUtilString &GetString() const;
+ void Add(const CMICmnMIValue &vMIValue);
- // Overridden:
- public:
- // From CMICmnBase
- /* dtor */ ~CMICmnMIResultRecord() override;
+ // Overridden:
+public:
+ // From CMICmnBase
+ /* dtor */ ~CMICmnMIResultRecord() override;
- // Attributes:
- private:
- CMIUtilString m_strResultRecord; // Holds the text version of the result record to date
+ // Attributes:
+private:
+ CMIUtilString
+ m_strResultRecord; // Holds the text version of the result record to date
};
Modified: lldb/trunk/tools/lldb-mi/MICmnMIValue.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnMIValue.cpp?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnMIValue.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmnMIValue.cpp Tue Sep 6 15:57:50 2016
@@ -11,7 +11,8 @@
#include "MICmnMIValue.h"
#include "MICmnResources.h"
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmnMIValue constructor.
// Type: Method.
// Args: None.
@@ -19,34 +20,28 @@
// Throws: None.
//--
CMICmnMIValue::CMICmnMIValue()
- : m_strValue(MIRSRC(IDS_WORD_INVALIDBRKTS))
- , m_bJustConstructed(true)
-{
-}
+ : m_strValue(MIRSRC(IDS_WORD_INVALIDBRKTS)), m_bJustConstructed(true) {}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmnMIValue destructor.
// Type: Overrideable.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmnMIValue::~CMICmnMIValue()
-{
-}
+CMICmnMIValue::~CMICmnMIValue() {}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Return the MI value as a string. The string is a direct result of
// work done on *this value so if not enough data is added then it is
// possible to return a malformed value. If nothing has been set or
-// added to *this MI value object then text "<Invalid>" will be returned.
+// added to *this MI value object then text "<Invalid>" will be
+// returned.
// Type: Method.
// Args: None.
// Return: CMIUtilString & - MI output text.
// Throws: None.
//--
-const CMIUtilString &
-CMICmnMIValue::GetString() const
-{
- return m_strValue;
-}
+const CMIUtilString &CMICmnMIValue::GetString() const { return m_strValue; }
Modified: lldb/trunk/tools/lldb-mi/MICmnMIValue.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnMIValue.h?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnMIValue.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmnMIValue.h Tue Sep 6 15:57:50 2016
@@ -12,7 +12,8 @@
// In-house headers:
#include "MICmnBase.h"
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI common code MI Result class. Part of the CMICmnMIValueRecord
// set of objects.
// The syntax is as follows:
@@ -25,25 +26,26 @@
// value ==> const | tuple | list
// const ==> c-string (7 bit iso c string content)
// tuple ==> "{}" | "{" result ( "," result )* "}"
-// list ==> "[]" | "[" value ( "," value )* "]" | "[" result ( "," result )* "]"
+// list ==> "[]" | "[" value ( "," value )* "]" | "[" result ( ","
+// result )* "]"
// More information see:
// http://ftp.gnu.org/old-gnu/Manuals/gdb-5.1.1/html_chapter/gdb_22.html
//--
-class CMICmnMIValue : public CMICmnBase
-{
- // Methods:
- public:
- /* ctor */ CMICmnMIValue();
- //
- const CMIUtilString &GetString() const;
+class CMICmnMIValue : public CMICmnBase {
+ // Methods:
+public:
+ /* ctor */ CMICmnMIValue();
+ //
+ const CMIUtilString &GetString() const;
- // Overridden:
- public:
- // From CMICmnBase
- /* dtor */ ~CMICmnMIValue() override;
+ // Overridden:
+public:
+ // From CMICmnBase
+ /* dtor */ ~CMICmnMIValue() override;
- // Attributes:
- protected:
- CMIUtilString m_strValue;
- bool m_bJustConstructed; // True = *this just constructed with no value, false = *this has had value added to it
+ // Attributes:
+protected:
+ CMIUtilString m_strValue;
+ bool m_bJustConstructed; // True = *this just constructed with no value, false
+ // = *this has had value added to it
};
Modified: lldb/trunk/tools/lldb-mi/MICmnMIValueConst.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnMIValueConst.cpp?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnMIValueConst.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmnMIValueConst.cpp Tue Sep 6 15:57:50 2016
@@ -13,7 +13,8 @@
// Instantiations:
const CMIUtilString CMICmnMIValueConst::ms_constStrDblQuote("\"");
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmnMIValueConst constructor.
// Type: Method.
// Args: vString - (R) MI Const c-string value.
@@ -21,39 +22,38 @@ const CMIUtilString CMICmnMIValueConst::
// Throws: None.
//--
CMICmnMIValueConst::CMICmnMIValueConst(const CMIUtilString &vString)
- : m_strPartConst(vString)
- , m_bNoQuotes(false)
-{
- BuildConst();
+ : m_strPartConst(vString), m_bNoQuotes(false) {
+ BuildConst();
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmnMIValueConst constructor.
// Type: Method.
// Args: vString - (R) MI Const c-string value.
-// vbNoQuotes - (R) True = return string not surrounded with quotes, false = use quotes.
+// vbNoQuotes - (R) True = return string not surrounded with quotes,
+// false = use quotes.
// Return: None.
// Throws: None.
//--
-CMICmnMIValueConst::CMICmnMIValueConst(const CMIUtilString &vString, const bool vbNoQuotes)
- : m_strPartConst(vString)
- , m_bNoQuotes(vbNoQuotes)
-{
- BuildConst();
+CMICmnMIValueConst::CMICmnMIValueConst(const CMIUtilString &vString,
+ const bool vbNoQuotes)
+ : m_strPartConst(vString), m_bNoQuotes(vbNoQuotes) {
+ BuildConst();
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmnMIValueConst destructor.
// Type: Overrideable.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmnMIValueConst::~CMICmnMIValueConst()
-{
-}
+CMICmnMIValueConst::~CMICmnMIValueConst() {}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Build the Value Const data.
// Type: Method.
// Args: None.
@@ -61,27 +61,22 @@ CMICmnMIValueConst::~CMICmnMIValueConst(
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmnMIValueConst::BuildConst()
-{
- if (m_strPartConst.length() != 0)
- {
- const CMIUtilString strValue(m_strPartConst.StripCREndOfLine());
- if (m_bNoQuotes)
- {
- m_strValue = strValue;
- }
- else
- {
- const char *pFormat = "%s%s%s";
- m_strValue = CMIUtilString::Format(pFormat, ms_constStrDblQuote.c_str(), strValue.c_str(), ms_constStrDblQuote.c_str());
- }
- }
- else
- {
- const char *pFormat = "%s%s";
- m_strValue = CMIUtilString::Format(pFormat, ms_constStrDblQuote.c_str(), ms_constStrDblQuote.c_str());
+bool CMICmnMIValueConst::BuildConst() {
+ if (m_strPartConst.length() != 0) {
+ const CMIUtilString strValue(m_strPartConst.StripCREndOfLine());
+ if (m_bNoQuotes) {
+ m_strValue = strValue;
+ } else {
+ const char *pFormat = "%s%s%s";
+ m_strValue =
+ CMIUtilString::Format(pFormat, ms_constStrDblQuote.c_str(),
+ strValue.c_str(), ms_constStrDblQuote.c_str());
}
+ } else {
+ const char *pFormat = "%s%s";
+ m_strValue = CMIUtilString::Format(pFormat, ms_constStrDblQuote.c_str(),
+ ms_constStrDblQuote.c_str());
+ }
- return MIstatus::success;
+ return MIstatus::success;
}
Modified: lldb/trunk/tools/lldb-mi/MICmnMIValueConst.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnMIValueConst.h?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnMIValueConst.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmnMIValueConst.h Tue Sep 6 15:57:50 2016
@@ -12,7 +12,8 @@
// In-house headers:
#include "MICmnMIValue.h"
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI common code MI Result class. Part of the CMICmnMIValueConstRecord
// set of objects.
// The syntax is as follows:
@@ -25,32 +26,35 @@
// value ==> const | tuple | list
// const ==> c-string (7 bit iso c string content)
// tuple ==> "{}" | "{" result ( "," result )* "}"
-// list ==> "[]" | "[" value ( "," value )* "]" | "[" result ( "," result )* "]"
+// list ==> "[]" | "[" value ( "," value )* "]" | "[" result ( ","
+// result )* "]"
// More information see:
// http://ftp.gnu.org/old-gnu/Manuals/gdb-5.1.1/html_chapter/gdb_22.html
//
-// The text formed in *this Result class is stripped of any '\n' characters.
+// The text formed in *this Result class is stripped of any '\n'
+// characters.
//--
-class CMICmnMIValueConst : public CMICmnMIValue
-{
- // Methods:
- public:
- /* ctor */ CMICmnMIValueConst(const CMIUtilString &vString);
- /* ctor */ CMICmnMIValueConst(const CMIUtilString &vString, const bool vbNoQuotes);
+class CMICmnMIValueConst : public CMICmnMIValue {
+ // Methods:
+public:
+ /* ctor */ CMICmnMIValueConst(const CMIUtilString &vString);
+ /* ctor */ CMICmnMIValueConst(const CMIUtilString &vString,
+ const bool vbNoQuotes);
- // Overridden:
- public:
- // From CMICmnBase
- /* dtor */ ~CMICmnMIValueConst() override;
+ // Overridden:
+public:
+ // From CMICmnBase
+ /* dtor */ ~CMICmnMIValueConst() override;
- // Methods:
- private:
- bool BuildConst();
+ // Methods:
+private:
+ bool BuildConst();
- // Attributes:
- private:
- static const CMIUtilString ms_constStrDblQuote;
- //
- CMIUtilString m_strPartConst;
- bool m_bNoQuotes; // True = return string not surrounded with quotes, false = use quotes
+ // Attributes:
+private:
+ static const CMIUtilString ms_constStrDblQuote;
+ //
+ CMIUtilString m_strPartConst;
+ bool m_bNoQuotes; // True = return string not surrounded with quotes, false =
+ // use quotes
};
Modified: lldb/trunk/tools/lldb-mi/MICmnMIValueList.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnMIValueList.cpp?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnMIValueList.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmnMIValueList.cpp Tue Sep 6 15:57:50 2016
@@ -11,19 +11,21 @@
#include "MICmnMIValueList.h"
#include "MICmnResources.h"
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmnMIValueList constructor.
// Type: Method.
-// Args: vbValueTypeList - (R) True = yes value type list, false = result type list.
+// Args: vbValueTypeList - (R) True = yes value type list, false = result
+// type list.
// Return: None.
// Throws: None.
//--
-CMICmnMIValueList::CMICmnMIValueList(const bool vbValueTypeList)
-{
- m_strValue = "[]";
+CMICmnMIValueList::CMICmnMIValueList(const bool vbValueTypeList) {
+ m_strValue = "[]";
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmnMIValueList constructor.
// Construct a results only list.
// return MIstatus::failure.
@@ -32,14 +34,14 @@ CMICmnMIValueList::CMICmnMIValueList(con
// Return: None.
// Throws: None.
//--
-CMICmnMIValueList::CMICmnMIValueList(const CMICmnMIValueResult &vResult)
-{
- m_strValue = vResult.GetString();
- BuildList();
- m_bJustConstructed = false;
+CMICmnMIValueList::CMICmnMIValueList(const CMICmnMIValueResult &vResult) {
+ m_strValue = vResult.GetString();
+ BuildList();
+ m_bJustConstructed = false;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmnMIValueList constructor.
// Construct a value only list.
// Type: Method.
@@ -47,145 +49,140 @@ CMICmnMIValueList::CMICmnMIValueList(con
// Return: None.
// Throws: None.
//--
-CMICmnMIValueList::CMICmnMIValueList(const CMICmnMIValue &vValue)
-{
- m_strValue = vValue.GetString();
- BuildList();
- m_bJustConstructed = false;
+CMICmnMIValueList::CMICmnMIValueList(const CMICmnMIValue &vValue) {
+ m_strValue = vValue.GetString();
+ BuildList();
+ m_bJustConstructed = false;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmnMIValueList destructor.
// Type: Overrideable.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmnMIValueList::~CMICmnMIValueList()
-{
-}
+CMICmnMIValueList::~CMICmnMIValueList() {}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Build the result value's mandatory data part, one tuple
// Type: Method.
// Args: None.
// Return: None.
// Throws: None.
//--
-void
-CMICmnMIValueList::BuildList()
-{
- const char *pFormat = "[%s]";
- m_strValue = CMIUtilString::Format(pFormat, m_strValue.c_str());
+void CMICmnMIValueList::BuildList() {
+ const char *pFormat = "[%s]";
+ m_strValue = CMIUtilString::Format(pFormat, m_strValue.c_str());
}
-//++ ------------------------------------------------------------------------------------
-// Details: Add another MI result object to the value list's of list is results.
-// Only result objects can be added to a list of result otherwise this function
+//++
+//------------------------------------------------------------------------------------
+// Details: Add another MI result object to the value list's of list is
+// results.
+// Only result objects can be added to a list of result otherwise this
+// function
// will return MIstatus::failure.
// Type: Method.
// Args: vResult - (R) The MI result object.
// Return: None.
// Throws: None.
//--
-void
-CMICmnMIValueList::Add(const CMICmnMIValueResult &vResult)
-{
- BuildList(vResult);
+void CMICmnMIValueList::Add(const CMICmnMIValueResult &vResult) {
+ BuildList(vResult);
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Add another MI value object to the value list's of list is values.
-// Only values objects can be added to a list of values otherwise this function
+// Only values objects can be added to a list of values otherwise this
+// function
// will return MIstatus::failure.
// Type: Method.
// Args: vValue - (R) The MI value object.
// Return: None.
// Throws: None.
//--
-void
-CMICmnMIValueList::Add(const CMICmnMIValue &vValue)
-{
- BuildList(vValue);
-}
+void CMICmnMIValueList::Add(const CMICmnMIValue &vValue) { BuildList(vValue); }
-//++ ------------------------------------------------------------------------------------
-// Details: Add another MI result object to the value list's of list is results.
-// Only result objects can be added to a list of result otherwise this function
+//++
+//------------------------------------------------------------------------------------
+// Details: Add another MI result object to the value list's of list is
+// results.
+// Only result objects can be added to a list of result otherwise this
+// function
// will return MIstatus::failure.
// Type: Method.
// Args: vResult - (R) The MI result object.
// Return: None.
// Throws: None.
//--
-void
-CMICmnMIValueList::BuildList(const CMICmnMIValueResult &vResult)
-{
- // Clear out the default "<Invalid>" text
- if (m_bJustConstructed)
- {
- m_bJustConstructed = false;
- m_strValue = vResult.GetString();
- BuildList();
- return;
- }
-
- const CMIUtilString data(ExtractContentNoBrackets());
- const char *pFormat = "[%s,%s]";
- m_strValue = CMIUtilString::Format(pFormat, data.c_str(), vResult.GetString().c_str());
+void CMICmnMIValueList::BuildList(const CMICmnMIValueResult &vResult) {
+ // Clear out the default "<Invalid>" text
+ if (m_bJustConstructed) {
+ m_bJustConstructed = false;
+ m_strValue = vResult.GetString();
+ BuildList();
+ return;
+ }
+
+ const CMIUtilString data(ExtractContentNoBrackets());
+ const char *pFormat = "[%s,%s]";
+ m_strValue =
+ CMIUtilString::Format(pFormat, data.c_str(), vResult.GetString().c_str());
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Add another MI value object to the value list's of list is values.
-// Only values objects can be added to a list of values otherwise this function
+// Only values objects can be added to a list of values otherwise this
+// function
// will return MIstatus::failure.
// Type: Method.
// Args: vValue - (R) The MI value object.
// Return: None.
// Throws: None.
//--
-void
-CMICmnMIValueList::BuildList(const CMICmnMIValue &vValue)
-{
- // Clear out the default "<Invalid>" text
- if (m_bJustConstructed)
- {
- m_bJustConstructed = false;
- m_strValue = vValue.GetString();
- BuildList();
- return;
- }
-
- // Remove already present '[' and ']' from the start and end
- m_strValue = m_strValue.Trim();
- size_t len = m_strValue.size();
- if ( (len > 1) && (m_strValue[0] == '[') && (m_strValue[len - 1] == ']') )
- m_strValue = m_strValue.substr(1, len - 2);
- const char *pFormat = "[%s,%s]";
- m_strValue = CMIUtilString::Format(pFormat, m_strValue.c_str(), vValue.GetString().c_str());
-}
+void CMICmnMIValueList::BuildList(const CMICmnMIValue &vValue) {
+ // Clear out the default "<Invalid>" text
+ if (m_bJustConstructed) {
+ m_bJustConstructed = false;
+ m_strValue = vValue.GetString();
+ BuildList();
+ return;
+ }
-//++ ------------------------------------------------------------------------------------
-// Details: Retrieve the contents of *this value object but without the outer most
+ // Remove already present '[' and ']' from the start and end
+ m_strValue = m_strValue.Trim();
+ size_t len = m_strValue.size();
+ if ((len > 1) && (m_strValue[0] == '[') && (m_strValue[len - 1] == ']'))
+ m_strValue = m_strValue.substr(1, len - 2);
+ const char *pFormat = "[%s,%s]";
+ m_strValue = CMIUtilString::Format(pFormat, m_strValue.c_str(),
+ vValue.GetString().c_str());
+}
+
+//++
+//------------------------------------------------------------------------------------
+// Details: Retrieve the contents of *this value object but without the outer
+// most
// brackets.
// Type: Method.
// Args: None.
// Return: CMIUtilString - Data within the object.
// Throws: None.
//--
-CMIUtilString
-CMICmnMIValueList::ExtractContentNoBrackets() const
-{
- CMIUtilString data(m_strValue);
-
- if (data[0] == '[')
- {
- data = data.substr(1, data.length() - 1);
- }
- if (data[data.size() - 1] == ']')
- {
- data = data.substr(0, data.length() - 1);
- }
+CMIUtilString CMICmnMIValueList::ExtractContentNoBrackets() const {
+ CMIUtilString data(m_strValue);
+
+ if (data[0] == '[') {
+ data = data.substr(1, data.length() - 1);
+ }
+ if (data[data.size() - 1] == ']') {
+ data = data.substr(0, data.length() - 1);
+ }
- return data;
+ return data;
}
Modified: lldb/trunk/tools/lldb-mi/MICmnMIValueList.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnMIValueList.h?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnMIValueList.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmnMIValueList.h Tue Sep 6 15:57:50 2016
@@ -13,7 +13,8 @@
#include "MICmnMIValue.h"
#include "MICmnMIValueResult.h"
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI common code MI Result class. Part of the CMICmnMIValueListRecord
// set of objects.
// The syntax is as follows:
@@ -26,30 +27,30 @@
// value ==> const | tuple | list
// const ==> c-string (7 bit iso c string content)
// tuple ==> "{}" | "{" result ( "," result )* "}"
-// list ==> "[]" | "[" value ( "," value )* "]" | "[" result ( "," result )* "]"
+// list ==> "[]" | "[" value ( "," value )* "]" | "[" result ( ","
+// result )* "]"
// More information see:
// http://ftp.gnu.org/old-gnu/Manuals/gdb-5.1.1/html_chapter/gdb_22.html
//--
-class CMICmnMIValueList : public CMICmnMIValue
-{
- // Methods:
- public:
- /* ctor */ CMICmnMIValueList(const bool vbValueTypeList);
- /* ctor */ CMICmnMIValueList(const CMICmnMIValueResult &vResult);
- /* ctor */ CMICmnMIValueList(const CMICmnMIValue &vValue);
- //
- void Add(const CMICmnMIValueResult &vResult);
- void Add(const CMICmnMIValue &vValue);
- CMIUtilString ExtractContentNoBrackets() const;
+class CMICmnMIValueList : public CMICmnMIValue {
+ // Methods:
+public:
+ /* ctor */ CMICmnMIValueList(const bool vbValueTypeList);
+ /* ctor */ CMICmnMIValueList(const CMICmnMIValueResult &vResult);
+ /* ctor */ CMICmnMIValueList(const CMICmnMIValue &vValue);
+ //
+ void Add(const CMICmnMIValueResult &vResult);
+ void Add(const CMICmnMIValue &vValue);
+ CMIUtilString ExtractContentNoBrackets() const;
- // Overridden:
- public:
- // From CMICmnBase
- /* dtor */ ~CMICmnMIValueList() override;
+ // Overridden:
+public:
+ // From CMICmnBase
+ /* dtor */ ~CMICmnMIValueList() override;
- // Methods:
- private:
- void BuildList();
- void BuildList(const CMICmnMIValueResult &vResult);
- void BuildList(const CMICmnMIValue &vResult);
+ // Methods:
+private:
+ void BuildList();
+ void BuildList(const CMICmnMIValueResult &vResult);
+ void BuildList(const CMICmnMIValue &vResult);
};
Modified: lldb/trunk/tools/lldb-mi/MICmnMIValueResult.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnMIValueResult.cpp?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnMIValueResult.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmnMIValueResult.cpp Tue Sep 6 15:57:50 2016
@@ -14,19 +14,18 @@
// Instantiations:
const CMIUtilString CMICmnMIValueResult::ms_constStrEqual("=");
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmnMIValueResult constructor.
// Type: Method.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmnMIValueResult::CMICmnMIValueResult()
- : m_bEmptyConstruction(true)
-{
-}
+CMICmnMIValueResult::CMICmnMIValueResult() : m_bEmptyConstruction(true) {}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmnMIValueResult constructor.
// Type: Method.
// Args: vrVariable - (R) MI value's name.
@@ -34,59 +33,59 @@ CMICmnMIValueResult::CMICmnMIValueResult
// Return: None.
// Throws: None.
//--
-CMICmnMIValueResult::CMICmnMIValueResult(const CMIUtilString &vrVariable, const CMICmnMIValue &vrValue)
- : m_strPartVariable(vrVariable)
- , m_partMIValue(vrValue)
- , m_bEmptyConstruction(false)
- , m_bUseSpacing(false)
-{
- BuildResult();
+CMICmnMIValueResult::CMICmnMIValueResult(const CMIUtilString &vrVariable,
+ const CMICmnMIValue &vrValue)
+ : m_strPartVariable(vrVariable), m_partMIValue(vrValue),
+ m_bEmptyConstruction(false), m_bUseSpacing(false) {
+ BuildResult();
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmnMIValueResult constructor.
// Type: Method.
// Args: vrVariable - (R) MI value's name.
// vrValue - (R) The MI value.
-// vbUseSpacing - (R) True = put space separators into the string, false = no spaces used.
+// vbUseSpacing - (R) True = put space separators into the string,
+// false = no spaces used.
// Return: None.
// Throws: None.
//--
-CMICmnMIValueResult::CMICmnMIValueResult(const CMIUtilString &vrVariable, const CMICmnMIValue &vrValue, const bool vbUseSpacing)
- : m_strPartVariable(vrVariable)
- , m_partMIValue(vrValue)
- , m_bEmptyConstruction(false)
- , m_bUseSpacing(vbUseSpacing)
-{
- BuildResult();
+CMICmnMIValueResult::CMICmnMIValueResult(const CMIUtilString &vrVariable,
+ const CMICmnMIValue &vrValue,
+ const bool vbUseSpacing)
+ : m_strPartVariable(vrVariable), m_partMIValue(vrValue),
+ m_bEmptyConstruction(false), m_bUseSpacing(vbUseSpacing) {
+ BuildResult();
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmnMIValueResult destructor.
// Type: Overrideable.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmnMIValueResult::~CMICmnMIValueResult()
-{
-}
+CMICmnMIValueResult::~CMICmnMIValueResult() {}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Build the MI value result string.
// Type: Method.
// Args: None.
// Return: None.
// Throws: None.
//--
-void
-CMICmnMIValueResult::BuildResult()
-{
- const char *pFormat = m_bUseSpacing ? "%s %s %s" : "%s%s%s";
- m_strValue = CMIUtilString::Format(pFormat, m_strPartVariable.c_str(), ms_constStrEqual.c_str(), m_partMIValue.GetString().c_str());
+void CMICmnMIValueResult::BuildResult() {
+ const char *pFormat = m_bUseSpacing ? "%s %s %s" : "%s%s%s";
+ m_strValue = CMIUtilString::Format(pFormat, m_strPartVariable.c_str(),
+ ms_constStrEqual.c_str(),
+ m_partMIValue.GetString().c_str());
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Build the MI value result string.
// Type: Method.
// Args: vrVariable - (R) MI value's name.
@@ -94,15 +93,16 @@ CMICmnMIValueResult::BuildResult()
// Return: None.
// Throws: None.
//--
-void
-CMICmnMIValueResult::BuildResult(const CMIUtilString &vVariable, const CMICmnMIValue &vValue)
-{
- const char *pFormat = m_bUseSpacing ? "%s, %s %s %s" : "%s,%s%s%s";
- m_strValue =
- CMIUtilString::Format(pFormat, m_strValue.c_str(), vVariable.c_str(), ms_constStrEqual.c_str(), vValue.GetString().c_str());
+void CMICmnMIValueResult::BuildResult(const CMIUtilString &vVariable,
+ const CMICmnMIValue &vValue) {
+ const char *pFormat = m_bUseSpacing ? "%s, %s %s %s" : "%s,%s%s%s";
+ m_strValue = CMIUtilString::Format(
+ pFormat, m_strValue.c_str(), vVariable.c_str(), ms_constStrEqual.c_str(),
+ vValue.GetString().c_str());
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Append another MI value object to *this MI value result.
// Type: Method.
// Args: vrVariable - (R) MI value's name.
@@ -111,16 +111,14 @@ CMICmnMIValueResult::BuildResult(const C
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-void
-CMICmnMIValueResult::Add(const CMIUtilString &vrVariable, const CMICmnMIValue &vrValue)
-{
- if (!m_bEmptyConstruction)
- BuildResult(vrVariable, vrValue);
- else
- {
- m_bEmptyConstruction = false;
- m_strPartVariable = vrVariable;
- m_partMIValue = vrValue;
- BuildResult();
- }
+void CMICmnMIValueResult::Add(const CMIUtilString &vrVariable,
+ const CMICmnMIValue &vrValue) {
+ if (!m_bEmptyConstruction)
+ BuildResult(vrVariable, vrValue);
+ else {
+ m_bEmptyConstruction = false;
+ m_strPartVariable = vrVariable;
+ m_partMIValue = vrValue;
+ BuildResult();
+ }
}
Modified: lldb/trunk/tools/lldb-mi/MICmnMIValueResult.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnMIValueResult.h?rev=280751&r1=280750&r2=280751&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnMIValueResult.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmnMIValueResult.h Tue Sep 6 15:57:50 2016
@@ -12,8 +12,10 @@
// In-house headers:
#include "MICmnMIValue.h"
-//++ ============================================================================
-// Details: MI common code MI Result class. Part of the CMICmnMIValueResultRecord
+//++
+//============================================================================
+// Details: MI common code MI Result class. Part of the
+// CMICmnMIValueResultRecord
// set of objects.
// The syntax is as follows:
// result-record ==> [ token ] "^" result-class ( "," result )* nl
@@ -25,36 +27,41 @@
// value ==> const | tuple | list
// const ==> c-string (7 bit iso c string content)
// tuple ==> "{}" | "{" result ( "," result )* "}"
-// list ==> "[]" | "[" value ( "," value )* "]" | "[" result ( "," result )* "]"
+// list ==> "[]" | "[" value ( "," value )* "]" | "[" result ( ","
+// result )* "]"
// More information see:
// http://ftp.gnu.org/old-gnu/Manuals/gdb-5.1.1/html_chapter/gdb_22.html
//--
-class CMICmnMIValueResult : public CMICmnMIValue
-{
- // Methods:
- public:
- /* ctor */ CMICmnMIValueResult();
- /* ctor */ CMICmnMIValueResult(const CMIUtilString &vVariable, const CMICmnMIValue &vValue);
- /* ctor */ CMICmnMIValueResult(const CMIUtilString &vVariable, const CMICmnMIValue &vValue, const bool vbUseSpacing);
- //
- void Add(const CMIUtilString &vVariable, const CMICmnMIValue &vValue);
+class CMICmnMIValueResult : public CMICmnMIValue {
+ // Methods:
+public:
+ /* ctor */ CMICmnMIValueResult();
+ /* ctor */ CMICmnMIValueResult(const CMIUtilString &vVariable,
+ const CMICmnMIValue &vValue);
+ /* ctor */ CMICmnMIValueResult(const CMIUtilString &vVariable,
+ const CMICmnMIValue &vValue,
+ const bool vbUseSpacing);
+ //
+ void Add(const CMIUtilString &vVariable, const CMICmnMIValue &vValue);
- // Overridden:
- public:
- // From CMICmnBase
- /* dtor */ ~CMICmnMIValueResult() override;
+ // Overridden:
+public:
+ // From CMICmnBase
+ /* dtor */ ~CMICmnMIValueResult() override;
- // Methods:
- private:
- void BuildResult();
- void BuildResult(const CMIUtilString &vVariable, const CMICmnMIValue &vValue);
+ // Methods:
+private:
+ void BuildResult();
+ void BuildResult(const CMIUtilString &vVariable, const CMICmnMIValue &vValue);
- // Attributes:
- private:
- static const CMIUtilString ms_constStrEqual;
- //
- CMIUtilString m_strPartVariable;
- CMICmnMIValue m_partMIValue;
- bool m_bEmptyConstruction; // True = *this object used constructor with no parameters, false = constructor with parameters
- bool m_bUseSpacing; // True = put space separators into the string, false = no spaces used
+ // Attributes:
+private:
+ static const CMIUtilString ms_constStrEqual;
+ //
+ CMIUtilString m_strPartVariable;
+ CMICmnMIValue m_partMIValue;
+ bool m_bEmptyConstruction; // True = *this object used constructor with no
+ // parameters, false = constructor with parameters
+ bool m_bUseSpacing; // True = put space separators into the string, false = no
+ // spaces used
};
More information about the lldb-commits
mailing list