aboutsummaryrefslogtreecommitdiff
path: root/tools/lldb-mi/MICmdCmdData.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/lldb-mi/MICmdCmdData.cpp')
-rw-r--r--tools/lldb-mi/MICmdCmdData.cpp406
1 files changed, 166 insertions, 240 deletions
diff --git a/tools/lldb-mi/MICmdCmdData.cpp b/tools/lldb-mi/MICmdCmdData.cpp
index 21036f865d9e..0e0cf12b0080 100644
--- a/tools/lldb-mi/MICmdCmdData.cpp
+++ b/tools/lldb-mi/MICmdCmdData.cpp
@@ -42,6 +42,7 @@
#include "MICmdArgValConsume.h"
#include "MICmnLLDBDebugSessionInfoVarObj.h"
#include "MICmnLLDBUtilSBValue.h"
+#include "MIUtilParse.h"
//++ ------------------------------------------------------------------------------------
// Details: CMICmdCmdDataEvaluateExpression constructor.
@@ -50,15 +51,12 @@
// Return: None.
// Throws: None.
//--
-CMICmdCmdDataEvaluateExpression::CMICmdCmdDataEvaluateExpression(void)
+CMICmdCmdDataEvaluateExpression::CMICmdCmdDataEvaluateExpression()
: m_bExpressionValid(true)
, m_bEvaluatedExpression(true)
, m_strValue("??")
- , m_bCompositeVarType(false)
, m_bFoundInvalidChar(false)
, m_cExpressionInvalidChar(0x00)
- , m_constStrArgThread("thread")
- , m_constStrArgFrame("frame")
, m_constStrArgExpr("expr")
{
// Command factory matches this name with that received from the stdin stream
@@ -75,7 +73,7 @@ CMICmdCmdDataEvaluateExpression::CMICmdCmdDataEvaluateExpression(void)
// Return: None.
// Throws: None.
//--
-CMICmdCmdDataEvaluateExpression::~CMICmdCmdDataEvaluateExpression(void)
+CMICmdCmdDataEvaluateExpression::~CMICmdCmdDataEvaluateExpression()
{
}
@@ -89,14 +87,10 @@ CMICmdCmdDataEvaluateExpression::~CMICmdCmdDataEvaluateExpression(void)
// Throws: None.
//--
bool
-CMICmdCmdDataEvaluateExpression::ParseArgs(void)
+CMICmdCmdDataEvaluateExpression::ParseArgs()
{
- bool bOk =
- m_setCmdArgs.Add(*(new CMICmdArgValOptionLong(m_constStrArgThread, false, false, CMICmdArgValListBase::eArgValType_Number, 1)));
- bOk = bOk &&
- m_setCmdArgs.Add(*(new CMICmdArgValOptionLong(m_constStrArgFrame, false, false, CMICmdArgValListBase::eArgValType_Number, 1)));
- bOk = bOk && m_setCmdArgs.Add(*(new CMICmdArgValString(m_constStrArgExpr, true, true, true, true)));
- return (bOk && ParseValidateCmdOptions());
+ m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgExpr, true, true, true, true));
+ return ParseValidateCmdOptions();
}
//++ ------------------------------------------------------------------------------------
@@ -109,7 +103,7 @@ CMICmdCmdDataEvaluateExpression::ParseArgs(void)
// Throws: None.
//--
bool
-CMICmdCmdDataEvaluateExpression::Execute(void)
+CMICmdCmdDataEvaluateExpression::Execute()
{
CMICMDBASE_GETOPTION(pArgExpr, String, m_constStrArgExpr);
@@ -147,41 +141,7 @@ CMICmdCmdDataEvaluateExpression::Execute(void)
m_strValue = rExpression.Trim('\"');
return MIstatus::success;
}
-
- MIuint64 nNumber = 0;
- if (CMICmnLLDBProxySBValue::GetValueAsUnsigned(value, nNumber) == MIstatus::success)
- {
- const lldb::ValueType eValueType = value.GetValueType();
- MIunused(eValueType);
- m_strValue = utilValue.GetValue().Escape().AddSlashes();
- return MIstatus::success;
- }
-
- // Composite type i.e. struct
- m_bCompositeVarType = true;
- const MIuint nChild = value.GetNumChildren();
- for (MIuint i = 0; i < nChild; i++)
- {
- lldb::SBValue member = value.GetChildAtIndex(i);
- const bool bValid = member.IsValid();
- CMIUtilString strType(MIRSRC(IDS_WORD_UNKNOWNTYPE_BRKTS));
- if (bValid)
- {
- const CMIUtilString strValue(
- CMICmnLLDBDebugSessionInfoVarObj::GetValueStringFormatted(member, CMICmnLLDBDebugSessionInfoVarObj::eVarFormat_Natural));
- const char *pTypeName = member.GetName();
- if (pTypeName != nullptr)
- strType = pTypeName;
-
- // MI print "{variable = 1, variable2 = 3, variable3 = 5}"
- const bool bNoQuotes = true;
- const CMICmnMIValueConst miValueConst(strValue, bNoQuotes);
- const bool bUseSpaces = true;
- const CMICmnMIValueResult miValueResult(strType, miValueConst, bUseSpaces);
- m_miValueTuple.Add(miValueResult, bUseSpaces);
- }
- }
-
+ m_strValue = utilValue.GetValue(true).Escape().AddSlashes();
return MIstatus::success;
}
@@ -195,21 +155,12 @@ CMICmdCmdDataEvaluateExpression::Execute(void)
// Throws: None.
//--
bool
-CMICmdCmdDataEvaluateExpression::Acknowledge(void)
+CMICmdCmdDataEvaluateExpression::Acknowledge()
{
if (m_bExpressionValid)
{
if (m_bEvaluatedExpression)
{
- if (m_bCompositeVarType)
- {
- const CMICmnMIValueConst miValueConst(m_miValueTuple.GetString());
- const CMICmnMIValueResult miValueResult("value", miValueConst);
- const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, miValueResult);
- m_miResultRecord = miRecordResult;
- return MIstatus::success;
- }
-
if (m_bFoundInvalidChar)
{
const CMICmnMIValueConst miValueConst(
@@ -251,7 +202,7 @@ CMICmdCmdDataEvaluateExpression::Acknowledge(void)
// Throws: None.
//--
CMICmdBase *
-CMICmdCmdDataEvaluateExpression::CreateSelf(void)
+CMICmdCmdDataEvaluateExpression::CreateSelf()
{
return new CMICmdCmdDataEvaluateExpression();
}
@@ -285,11 +236,9 @@ CMICmdCmdDataEvaluateExpression::HaveInvalidCharacterInExpression(const CMIUtilS
// Return: None.
// Throws: None.
//--
-CMICmdCmdDataDisassemble::CMICmdCmdDataDisassemble(void)
- : m_constStrArgThread("thread")
- , m_constStrArgAddrStart("s")
+CMICmdCmdDataDisassemble::CMICmdCmdDataDisassemble()
+ : m_constStrArgAddrStart("s")
, m_constStrArgAddrEnd("e")
- , m_constStrArgConsume("--")
, m_constStrArgMode("mode")
, m_miValueList(true)
{
@@ -307,7 +256,7 @@ CMICmdCmdDataDisassemble::CMICmdCmdDataDisassemble(void)
// Return: None.
// Throws: None.
//--
-CMICmdCmdDataDisassemble::~CMICmdCmdDataDisassemble(void)
+CMICmdCmdDataDisassemble::~CMICmdCmdDataDisassemble()
{
}
@@ -321,19 +270,14 @@ CMICmdCmdDataDisassemble::~CMICmdCmdDataDisassemble(void)
// Throws: None.
//--
bool
-CMICmdCmdDataDisassemble::ParseArgs(void)
+CMICmdCmdDataDisassemble::ParseArgs()
{
- bool bOk =
- m_setCmdArgs.Add(*(new CMICmdArgValOptionLong(m_constStrArgThread, false, true, CMICmdArgValListBase::eArgValType_Number, 1)));
- bOk = bOk &&
- m_setCmdArgs.Add(
- *(new CMICmdArgValOptionShort(m_constStrArgAddrStart, true, true, CMICmdArgValListBase::eArgValType_StringQuotedNumber, 1)));
- bOk = bOk &&
- m_setCmdArgs.Add(
- *(new CMICmdArgValOptionShort(m_constStrArgAddrEnd, true, true, CMICmdArgValListBase::eArgValType_StringQuotedNumber, 1)));
- bOk = bOk && m_setCmdArgs.Add(*(new CMICmdArgValConsume(m_constStrArgConsume, true)));
- bOk = bOk && m_setCmdArgs.Add(*(new CMICmdArgValNumber(m_constStrArgMode, true, true)));
- return (bOk && ParseValidateCmdOptions());
+ m_setCmdArgs.Add(
+ new CMICmdArgValOptionShort(m_constStrArgAddrStart, true, true, CMICmdArgValListBase::eArgValType_StringQuotedNumber, 1));
+ m_setCmdArgs.Add(
+ new CMICmdArgValOptionShort(m_constStrArgAddrEnd, true, true, CMICmdArgValListBase::eArgValType_StringQuotedNumber, 1));
+ m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgMode, true, true));
+ return ParseValidateCmdOptions();
}
//++ ------------------------------------------------------------------------------------
@@ -346,7 +290,7 @@ CMICmdCmdDataDisassemble::ParseArgs(void)
// Throws: None.
//--
bool
-CMICmdCmdDataDisassemble::Execute(void)
+CMICmdCmdDataDisassemble::Execute()
{
CMICMDBASE_GETOPTION(pArgThread, OptionLong, m_constStrArgThread);
CMICMDBASE_GETOPTION(pArgAddrStart, OptionShort, m_constStrArgAddrStart);
@@ -476,7 +420,7 @@ CMICmdCmdDataDisassemble::Execute(void)
// Throws: None.
//--
bool
-CMICmdCmdDataDisassemble::Acknowledge(void)
+CMICmdCmdDataDisassemble::Acknowledge()
{
const CMICmnMIValueResult miValueResult("asm_insns", m_miValueList);
const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, miValueResult);
@@ -494,7 +438,7 @@ CMICmdCmdDataDisassemble::Acknowledge(void)
// Throws: None.
//--
CMICmdBase *
-CMICmdCmdDataDisassemble::CreateSelf(void)
+CMICmdCmdDataDisassemble::CreateSelf()
{
return new CMICmdCmdDataDisassemble();
}
@@ -510,10 +454,8 @@ CMICmdCmdDataDisassemble::CreateSelf(void)
// Return: None.
// Throws: None.
//--
-CMICmdCmdDataReadMemoryBytes::CMICmdCmdDataReadMemoryBytes(void)
- : m_constStrArgThread("thread")
- , m_constStrArgFrame("frame")
- , m_constStrArgByteOffset("o")
+CMICmdCmdDataReadMemoryBytes::CMICmdCmdDataReadMemoryBytes()
+ : m_constStrArgByteOffset("o")
, m_constStrArgAddrExpr("address")
, m_constStrArgNumBytes("count")
, m_pBufferMemory(nullptr)
@@ -534,7 +476,7 @@ CMICmdCmdDataReadMemoryBytes::CMICmdCmdDataReadMemoryBytes(void)
// Return: None.
// Throws: None.
//--
-CMICmdCmdDataReadMemoryBytes::~CMICmdCmdDataReadMemoryBytes(void)
+CMICmdCmdDataReadMemoryBytes::~CMICmdCmdDataReadMemoryBytes()
{
if (m_pBufferMemory != nullptr)
{
@@ -553,18 +495,12 @@ CMICmdCmdDataReadMemoryBytes::~CMICmdCmdDataReadMemoryBytes(void)
// Throws: None.
//--
bool
-CMICmdCmdDataReadMemoryBytes::ParseArgs(void)
+CMICmdCmdDataReadMemoryBytes::ParseArgs()
{
- bool bOk =
- m_setCmdArgs.Add(*(new CMICmdArgValOptionLong(m_constStrArgThread, false, true, CMICmdArgValListBase::eArgValType_Number, 1)));
- bOk = bOk &&
- m_setCmdArgs.Add(*(new CMICmdArgValOptionLong(m_constStrArgFrame, false, true, CMICmdArgValListBase::eArgValType_Number, 1)));
- bOk =
- bOk &&
- m_setCmdArgs.Add(*(new CMICmdArgValOptionShort(m_constStrArgByteOffset, false, true, CMICmdArgValListBase::eArgValType_Number, 1)));
- bOk = bOk && m_setCmdArgs.Add(*(new CMICmdArgValString(m_constStrArgAddrExpr, true, true, true, true)));
- bOk = bOk && m_setCmdArgs.Add(*(new CMICmdArgValNumber(m_constStrArgNumBytes, true, true)));
- return (bOk && ParseValidateCmdOptions());
+ m_setCmdArgs.Add(new CMICmdArgValOptionShort(m_constStrArgByteOffset, false, true, CMICmdArgValListBase::eArgValType_Number, 1));
+ m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgAddrExpr, true, true, true, true));
+ m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgNumBytes, true, true));
+ return ParseValidateCmdOptions();
}
//++ ------------------------------------------------------------------------------------
@@ -577,7 +513,7 @@ CMICmdCmdDataReadMemoryBytes::ParseArgs(void)
// Throws: None.
//--
bool
-CMICmdCmdDataReadMemoryBytes::Execute(void)
+CMICmdCmdDataReadMemoryBytes::Execute()
{
CMICMDBASE_GETOPTION(pArgThread, OptionLong, m_constStrArgThread);
CMICMDBASE_GETOPTION(pArgFrame, OptionLong, m_constStrArgFrame);
@@ -700,7 +636,7 @@ CMICmdCmdDataReadMemoryBytes::Execute(void)
// Throws: None.
//--
bool
-CMICmdCmdDataReadMemoryBytes::Acknowledge(void)
+CMICmdCmdDataReadMemoryBytes::Acknowledge()
{
// MI: memory=[{begin=\"0x%016" PRIx64 "\",offset=\"0x%016" PRIx64" \",end=\"0x%016" PRIx64 "\",contents=\" \" }]"
const CMICmnMIValueConst miValueConst(CMIUtilString::Format("0x%016" PRIx64, m_nAddrStart));
@@ -742,7 +678,7 @@ CMICmdCmdDataReadMemoryBytes::Acknowledge(void)
// Throws: None.
//--
CMICmdBase *
-CMICmdCmdDataReadMemoryBytes::CreateSelf(void)
+CMICmdCmdDataReadMemoryBytes::CreateSelf()
{
return new CMICmdCmdDataReadMemoryBytes();
}
@@ -758,7 +694,7 @@ CMICmdCmdDataReadMemoryBytes::CreateSelf(void)
// Return: None.
// Throws: None.
//--
-CMICmdCmdDataReadMemory::CMICmdCmdDataReadMemory(void)
+CMICmdCmdDataReadMemory::CMICmdCmdDataReadMemory()
{
// Command factory matches this name with that received from the stdin stream
m_strMiCmd = "data-read-memory";
@@ -774,7 +710,7 @@ CMICmdCmdDataReadMemory::CMICmdCmdDataReadMemory(void)
// Return: None.
// Throws: None.
//--
-CMICmdCmdDataReadMemory::~CMICmdCmdDataReadMemory(void)
+CMICmdCmdDataReadMemory::~CMICmdCmdDataReadMemory()
{
}
@@ -788,7 +724,7 @@ CMICmdCmdDataReadMemory::~CMICmdCmdDataReadMemory(void)
// Throws: None.
//--
bool
-CMICmdCmdDataReadMemory::Execute(void)
+CMICmdCmdDataReadMemory::Execute()
{
// Do nothing - command deprecated use "data-read-memory-bytes" command
return MIstatus::success;
@@ -804,7 +740,7 @@ CMICmdCmdDataReadMemory::Execute(void)
// Throws: None.
//--
bool
-CMICmdCmdDataReadMemory::Acknowledge(void)
+CMICmdCmdDataReadMemory::Acknowledge()
{
// Command CMICmdCmdSupportListFeatures sends "data-read-memory-bytes" which causes this command not to be called
const CMICmnMIValueConst miValueConst(MIRSRC(IDS_CMD_ERR_NOT_IMPLEMENTED_DEPRECATED));
@@ -824,7 +760,7 @@ CMICmdCmdDataReadMemory::Acknowledge(void)
// Throws: None.
//--
CMICmdBase *
-CMICmdCmdDataReadMemory::CreateSelf(void)
+CMICmdCmdDataReadMemory::CreateSelf()
{
return new CMICmdCmdDataReadMemory();
}
@@ -840,9 +776,8 @@ CMICmdCmdDataReadMemory::CreateSelf(void)
// Return: None.
// Throws: None.
//--
-CMICmdCmdDataListRegisterNames::CMICmdCmdDataListRegisterNames(void)
- : m_constStrArgThreadGroup("thread-group")
- , m_constStrArgRegNo("regno")
+CMICmdCmdDataListRegisterNames::CMICmdCmdDataListRegisterNames()
+ : m_constStrArgRegNo("regno")
, m_miValueList(true)
{
// Command factory matches this name with that received from the stdin stream
@@ -859,7 +794,7 @@ CMICmdCmdDataListRegisterNames::CMICmdCmdDataListRegisterNames(void)
// Return: None.
// Throws: None.
//--
-CMICmdCmdDataListRegisterNames::~CMICmdCmdDataListRegisterNames(void)
+CMICmdCmdDataListRegisterNames::~CMICmdCmdDataListRegisterNames()
{
}
@@ -873,12 +808,10 @@ CMICmdCmdDataListRegisterNames::~CMICmdCmdDataListRegisterNames(void)
// Throws: None.
//--
bool
-CMICmdCmdDataListRegisterNames::ParseArgs(void)
+CMICmdCmdDataListRegisterNames::ParseArgs()
{
- bool bOk = m_setCmdArgs.Add(
- *(new CMICmdArgValOptionLong(m_constStrArgThreadGroup, false, false, CMICmdArgValListBase::eArgValType_ThreadGrp, 1)));
- bOk = bOk && m_setCmdArgs.Add(*(new CMICmdArgValListOfN(m_constStrArgRegNo, false, false, CMICmdArgValListBase::eArgValType_Number)));
- return (bOk && ParseValidateCmdOptions());
+ m_setCmdArgs.Add(new CMICmdArgValListOfN(m_constStrArgRegNo, false, false, CMICmdArgValListBase::eArgValType_Number));
+ return ParseValidateCmdOptions();
}
//++ ------------------------------------------------------------------------------------
@@ -891,7 +824,7 @@ CMICmdCmdDataListRegisterNames::ParseArgs(void)
// Throws: None.
//--
bool
-CMICmdCmdDataListRegisterNames::Execute(void)
+CMICmdCmdDataListRegisterNames::Execute()
{
CMICMDBASE_GETOPTION(pArgRegNo, ListOfN, m_constStrArgRegNo);
@@ -940,9 +873,7 @@ CMICmdCmdDataListRegisterNames::Execute(void)
if (regValue.IsValid())
{
const CMICmnMIValueConst miValueConst(CMICmnLLDBUtilSBValue(regValue).GetName());
- const bool bOk = m_miValueList.Add(miValueConst);
- if (!bOk)
- return MIstatus::failure;
+ m_miValueList.Add(miValueConst);
}
}
}
@@ -961,7 +892,7 @@ CMICmdCmdDataListRegisterNames::Execute(void)
// Throws: None.
//--
bool
-CMICmdCmdDataListRegisterNames::Acknowledge(void)
+CMICmdCmdDataListRegisterNames::Acknowledge()
{
const CMICmnMIValueResult miValueResult("register-names", m_miValueList);
const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, miValueResult);
@@ -979,7 +910,7 @@ CMICmdCmdDataListRegisterNames::Acknowledge(void)
// Throws: None.
//--
CMICmdBase *
-CMICmdCmdDataListRegisterNames::CreateSelf(void)
+CMICmdCmdDataListRegisterNames::CreateSelf()
{
return new CMICmdCmdDataListRegisterNames();
}
@@ -1031,9 +962,8 @@ CMICmdCmdDataListRegisterNames::GetRegister(const MIuint vRegisterIndex) const
// Return: None.
// Throws: None.
//--
-CMICmdCmdDataListRegisterValues::CMICmdCmdDataListRegisterValues(void)
- : m_constStrArgThread("thread")
- , m_constStrArgSkip("skip-unavailable")
+CMICmdCmdDataListRegisterValues::CMICmdCmdDataListRegisterValues()
+ : m_constStrArgSkip("skip-unavailable")
, m_constStrArgFormat("fmt")
, m_constStrArgRegNo("regno")
, m_miValueList(true)
@@ -1052,7 +982,7 @@ CMICmdCmdDataListRegisterValues::CMICmdCmdDataListRegisterValues(void)
// Return: None.
// Throws: None.
//--
-CMICmdCmdDataListRegisterValues::~CMICmdCmdDataListRegisterValues(void)
+CMICmdCmdDataListRegisterValues::~CMICmdCmdDataListRegisterValues()
{
}
@@ -1066,14 +996,13 @@ CMICmdCmdDataListRegisterValues::~CMICmdCmdDataListRegisterValues(void)
// Throws: None.
//--
bool
-CMICmdCmdDataListRegisterValues::ParseArgs(void)
+CMICmdCmdDataListRegisterValues::ParseArgs()
{
- bool bOk =
- m_setCmdArgs.Add(*(new CMICmdArgValOptionLong(m_constStrArgThread, false, false, CMICmdArgValListBase::eArgValType_Number, 1)));
- bOk = bOk && m_setCmdArgs.Add(*(new CMICmdArgValOptionLong(m_constStrArgSkip, false, false)));
- bOk = bOk && m_setCmdArgs.Add(*(new CMICmdArgValString(m_constStrArgFormat, true, true)));
- bOk = bOk && m_setCmdArgs.Add(*(new CMICmdArgValListOfN(m_constStrArgRegNo, false, true, CMICmdArgValListBase::eArgValType_Number)));
- return (bOk && ParseValidateCmdOptions());
+ m_setCmdArgs.Add(new CMICmdArgValOptionLong(m_constStrArgThread, false, false, CMICmdArgValListBase::eArgValType_Number, 1));
+ m_setCmdArgs.Add(new CMICmdArgValOptionLong(m_constStrArgSkip, false, false));
+ m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgFormat, true, true));
+ m_setCmdArgs.Add(new CMICmdArgValListOfN(m_constStrArgRegNo, false, true, CMICmdArgValListBase::eArgValType_Number));
+ return ParseValidateCmdOptions();
}
//++ ------------------------------------------------------------------------------------
@@ -1086,7 +1015,7 @@ CMICmdCmdDataListRegisterValues::ParseArgs(void)
// Throws: None.
//--
bool
-CMICmdCmdDataListRegisterValues::Execute(void)
+CMICmdCmdDataListRegisterValues::Execute()
{
CMICMDBASE_GETOPTION(pArgFormat, String, m_constStrArgFormat);
CMICMDBASE_GETOPTION(pArgRegNo, ListOfN, m_constStrArgRegNo);
@@ -1124,9 +1053,7 @@ CMICmdCmdDataListRegisterValues::Execute(void)
lldb::SBValue regValue = GetRegister(nRegIndex);
if (regValue.IsValid())
{
- const bool bOk = AddToOutput(nRegIndex, regValue, eFormat);
- if (!bOk)
- return MIstatus::failure;
+ AddToOutput(nRegIndex, regValue, eFormat);
}
// Next
@@ -1150,9 +1077,7 @@ CMICmdCmdDataListRegisterValues::Execute(void)
lldb::SBValue regValue = value.GetChildAtIndex(j);
if (regValue.IsValid())
{
- const bool bOk = AddToOutput(nRegIndex, regValue, eFormat);
- if (!bOk)
- return MIstatus::failure;
+ AddToOutput(nRegIndex, regValue, eFormat);
}
// Next
@@ -1174,7 +1099,7 @@ CMICmdCmdDataListRegisterValues::Execute(void)
// Throws: None.
//--
bool
-CMICmdCmdDataListRegisterValues::Acknowledge(void)
+CMICmdCmdDataListRegisterValues::Acknowledge()
{
const CMICmnMIValueResult miValueResult("register-values", m_miValueList);
const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, miValueResult);
@@ -1192,7 +1117,7 @@ CMICmdCmdDataListRegisterValues::Acknowledge(void)
// Throws: None.
//--
CMICmdBase *
-CMICmdCmdDataListRegisterValues::CreateSelf(void)
+CMICmdCmdDataListRegisterValues::CreateSelf()
{
return new CMICmdCmdDataListRegisterValues();
}
@@ -1240,7 +1165,7 @@ CMICmdCmdDataListRegisterValues::GetRegister(const MIuint vRegisterIndex) const
// Return: None
// Throws: None.
//--
-bool
+void
CMICmdCmdDataListRegisterValues::AddToOutput(const MIuint vnIndex, const lldb::SBValue &vrValue,
CMICmnLLDBDebugSessionInfoVarObj::varFormat_e veVarFormat)
{
@@ -1250,8 +1175,8 @@ CMICmdCmdDataListRegisterValues::AddToOutput(const MIuint vnIndex, const lldb::S
const CMIUtilString strRegValue(CMICmnLLDBDebugSessionInfoVarObj::GetValueStringFormatted(vrValue, veVarFormat));
const CMICmnMIValueConst miValueConst2(strRegValue);
const CMICmnMIValueResult miValueResult2("value", miValueConst2);
- bool bOk = miValueTuple.Add(miValueResult2);
- return bOk && m_miValueList.Add(miValueTuple);
+ miValueTuple.Add(miValueResult2);
+ m_miValueList.Add(miValueTuple);
}
//---------------------------------------------------------------------------------------
@@ -1265,7 +1190,7 @@ CMICmdCmdDataListRegisterValues::AddToOutput(const MIuint vnIndex, const lldb::S
// Return: None.
// Throws: None.
//--
-CMICmdCmdDataListRegisterChanged::CMICmdCmdDataListRegisterChanged(void)
+CMICmdCmdDataListRegisterChanged::CMICmdCmdDataListRegisterChanged()
{
// Command factory matches this name with that received from the stdin stream
m_strMiCmd = "data-list-changed-registers";
@@ -1281,7 +1206,7 @@ CMICmdCmdDataListRegisterChanged::CMICmdCmdDataListRegisterChanged(void)
// Return: None.
// Throws: None.
//--
-CMICmdCmdDataListRegisterChanged::~CMICmdCmdDataListRegisterChanged(void)
+CMICmdCmdDataListRegisterChanged::~CMICmdCmdDataListRegisterChanged()
{
}
@@ -1295,7 +1220,7 @@ CMICmdCmdDataListRegisterChanged::~CMICmdCmdDataListRegisterChanged(void)
// Throws: None.
//--
bool
-CMICmdCmdDataListRegisterChanged::Execute(void)
+CMICmdCmdDataListRegisterChanged::Execute()
{
// Do nothing
@@ -1312,7 +1237,7 @@ CMICmdCmdDataListRegisterChanged::Execute(void)
// Throws: None.
//--
bool
-CMICmdCmdDataListRegisterChanged::Acknowledge(void)
+CMICmdCmdDataListRegisterChanged::Acknowledge()
{
const CMICmnMIValueConst miValueConst(MIRSRC(IDS_WORD_NOT_IMPLEMENTED));
const CMICmnMIValueResult miValueResult("msg", miValueConst);
@@ -1331,7 +1256,7 @@ CMICmdCmdDataListRegisterChanged::Acknowledge(void)
// Throws: None.
//--
CMICmdBase *
-CMICmdCmdDataListRegisterChanged::CreateSelf(void)
+CMICmdCmdDataListRegisterChanged::CreateSelf()
{
return new CMICmdCmdDataListRegisterChanged();
}
@@ -1347,9 +1272,8 @@ CMICmdCmdDataListRegisterChanged::CreateSelf(void)
// Return: None.
// Throws: None.
//--
-CMICmdCmdDataWriteMemoryBytes::CMICmdCmdDataWriteMemoryBytes(void)
- : m_constStrArgThread("thread")
- , m_constStrArgAddr("address")
+CMICmdCmdDataWriteMemoryBytes::CMICmdCmdDataWriteMemoryBytes()
+ : m_constStrArgAddr("address")
, m_constStrArgContents("contents")
, m_constStrArgCount("count")
{
@@ -1367,7 +1291,7 @@ CMICmdCmdDataWriteMemoryBytes::CMICmdCmdDataWriteMemoryBytes(void)
// Return: None.
// Throws: None.
//--
-CMICmdCmdDataWriteMemoryBytes::~CMICmdCmdDataWriteMemoryBytes(void)
+CMICmdCmdDataWriteMemoryBytes::~CMICmdCmdDataWriteMemoryBytes()
{
}
@@ -1381,14 +1305,12 @@ CMICmdCmdDataWriteMemoryBytes::~CMICmdCmdDataWriteMemoryBytes(void)
// Throws: None.
//--
bool
-CMICmdCmdDataWriteMemoryBytes::ParseArgs(void)
+CMICmdCmdDataWriteMemoryBytes::ParseArgs()
{
- bool bOk =
- m_setCmdArgs.Add(*(new CMICmdArgValOptionLong(m_constStrArgThread, false, false, CMICmdArgValListBase::eArgValType_Number, 1)));
- bOk = bOk && m_setCmdArgs.Add(*(new CMICmdArgValString(m_constStrArgAddr, true, true, false, true)));
- bOk = bOk && m_setCmdArgs.Add(*(new CMICmdArgValString(m_constStrArgContents, true, true, true, true)));
- bOk = bOk && m_setCmdArgs.Add(*(new CMICmdArgValString(m_constStrArgCount, false, true, false, true)));
- return (bOk && ParseValidateCmdOptions());
+ m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgAddr, true, true, false, true));
+ m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgContents, true, true, true, true));
+ m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgCount, false, true, false, true));
+ return ParseValidateCmdOptions();
}
//++ ------------------------------------------------------------------------------------
@@ -1401,7 +1323,7 @@ CMICmdCmdDataWriteMemoryBytes::ParseArgs(void)
// Throws: None.
//--
bool
-CMICmdCmdDataWriteMemoryBytes::Execute(void)
+CMICmdCmdDataWriteMemoryBytes::Execute()
{
// Do nothing - not reproduceable (yet) in Eclipse
// CMICMDBASE_GETOPTION( pArgOffset, OptionShort, m_constStrArgOffset );
@@ -1425,7 +1347,7 @@ CMICmdCmdDataWriteMemoryBytes::Execute(void)
// Throws: None.
//--
bool
-CMICmdCmdDataWriteMemoryBytes::Acknowledge(void)
+CMICmdCmdDataWriteMemoryBytes::Acknowledge()
{
const CMICmnMIValueConst miValueConst(MIRSRC(IDS_WORD_NOT_IMPLEMENTED));
const CMICmnMIValueResult miValueResult("msg", miValueConst);
@@ -1444,7 +1366,7 @@ CMICmdCmdDataWriteMemoryBytes::Acknowledge(void)
// Throws: None.
//--
CMICmdBase *
-CMICmdCmdDataWriteMemoryBytes::CreateSelf(void)
+CMICmdCmdDataWriteMemoryBytes::CreateSelf()
{
return new CMICmdCmdDataWriteMemoryBytes();
}
@@ -1460,9 +1382,8 @@ CMICmdCmdDataWriteMemoryBytes::CreateSelf(void)
// Return: None.
// Throws: None.
//--
-CMICmdCmdDataWriteMemory::CMICmdCmdDataWriteMemory(void)
- : m_constStrArgThread("thread")
- , m_constStrArgOffset("o")
+CMICmdCmdDataWriteMemory::CMICmdCmdDataWriteMemory()
+ : m_constStrArgOffset("o")
, m_constStrArgAddr("address")
, m_constStrArgD("d")
, m_constStrArgNumber("a number")
@@ -1485,7 +1406,7 @@ CMICmdCmdDataWriteMemory::CMICmdCmdDataWriteMemory(void)
// Return: None.
// Throws: None.
//--
-CMICmdCmdDataWriteMemory::~CMICmdCmdDataWriteMemory(void)
+CMICmdCmdDataWriteMemory::~CMICmdCmdDataWriteMemory()
{
if (m_pBufferMemory != nullptr)
{
@@ -1504,17 +1425,14 @@ CMICmdCmdDataWriteMemory::~CMICmdCmdDataWriteMemory(void)
// Throws: None.
//--
bool
-CMICmdCmdDataWriteMemory::ParseArgs(void)
+CMICmdCmdDataWriteMemory::ParseArgs()
{
- bool bOk =
- m_setCmdArgs.Add(*(new CMICmdArgValOptionLong(m_constStrArgThread, false, false, CMICmdArgValListBase::eArgValType_Number, 1)));
- bOk = bOk &&
- m_setCmdArgs.Add(*(new CMICmdArgValOptionShort(m_constStrArgOffset, false, true, CMICmdArgValListBase::eArgValType_Number, 1)));
- bOk = bOk && m_setCmdArgs.Add(*(new CMICmdArgValNumber(m_constStrArgAddr, true, true)));
- bOk = bOk && m_setCmdArgs.Add(*(new CMICmdArgValString(m_constStrArgD, true, true)));
- bOk = bOk && m_setCmdArgs.Add(*(new CMICmdArgValNumber(m_constStrArgNumber, true, true)));
- bOk = bOk && m_setCmdArgs.Add(*(new CMICmdArgValNumber(m_constStrArgContents, true, true)));
- return (bOk && ParseValidateCmdOptions());
+ m_setCmdArgs.Add(new CMICmdArgValOptionShort(m_constStrArgOffset, false, true, CMICmdArgValListBase::eArgValType_Number, 1));
+ m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgAddr, true, true));
+ m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgD, true, true));
+ m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgNumber, true, true));
+ m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgContents, true, true));
+ return ParseValidateCmdOptions();
}
//++ ------------------------------------------------------------------------------------
@@ -1527,7 +1445,7 @@ CMICmdCmdDataWriteMemory::ParseArgs(void)
// Throws: None.
//--
bool
-CMICmdCmdDataWriteMemory::Execute(void)
+CMICmdCmdDataWriteMemory::Execute()
{
CMICMDBASE_GETOPTION(pArgOffset, OptionShort, m_constStrArgOffset);
CMICMDBASE_GETOPTION(pArgAddr, Number, m_constStrArgAddr);
@@ -1585,7 +1503,7 @@ CMICmdCmdDataWriteMemory::Execute(void)
// Throws: None.
//--
bool
-CMICmdCmdDataWriteMemory::Acknowledge(void)
+CMICmdCmdDataWriteMemory::Acknowledge()
{
const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done);
m_miResultRecord = miRecordResult;
@@ -1602,7 +1520,7 @@ CMICmdCmdDataWriteMemory::Acknowledge(void)
// Throws: None.
//--
CMICmdBase *
-CMICmdCmdDataWriteMemory::CreateSelf(void)
+CMICmdCmdDataWriteMemory::CreateSelf()
{
return new CMICmdCmdDataWriteMemory();
}
@@ -1618,7 +1536,7 @@ CMICmdCmdDataWriteMemory::CreateSelf(void)
// Return: None.
// Throws: None.
//--
-CMICmdCmdDataInfoLine::CMICmdCmdDataInfoLine(void)
+CMICmdCmdDataInfoLine::CMICmdCmdDataInfoLine()
: m_constStrArgLocation("location")
{
// Command factory matches this name with that received from the stdin stream
@@ -1635,7 +1553,7 @@ CMICmdCmdDataInfoLine::CMICmdCmdDataInfoLine(void)
// Return: None.
// Throws: None.
//--
-CMICmdCmdDataInfoLine::~CMICmdCmdDataInfoLine(void)
+CMICmdCmdDataInfoLine::~CMICmdCmdDataInfoLine()
{
}
@@ -1649,10 +1567,10 @@ CMICmdCmdDataInfoLine::~CMICmdCmdDataInfoLine(void)
// Throws: None.
//--
bool
-CMICmdCmdDataInfoLine::ParseArgs(void)
+CMICmdCmdDataInfoLine::ParseArgs()
{
- bool bOk = m_setCmdArgs.Add(*(new CMICmdArgValString(m_constStrArgLocation, true, true)));
- return (bOk && ParseValidateCmdOptions());
+ m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgLocation, true, true));
+ return ParseValidateCmdOptions();
}
//++ ------------------------------------------------------------------------------------
@@ -1665,7 +1583,7 @@ CMICmdCmdDataInfoLine::ParseArgs(void)
// Throws: None.
//--
bool
-CMICmdCmdDataInfoLine::Execute(void)
+CMICmdCmdDataInfoLine::Execute()
{
CMICMDBASE_GETOPTION(pArgLocation, String, m_constStrArgLocation);
@@ -1676,7 +1594,7 @@ CMICmdCmdDataInfoLine::Execute(void)
// Parse argument:
// *0x12345
// ^^^^^^^ -- address
- const CMIUtilString strAddress(strLocation.c_str() + 1);
+ const CMIUtilString strAddress(strLocation.substr(1));
strCmdOptionsLocation = CMIUtilString::Format("--address %s", strAddress.c_str());
}
else
@@ -1692,8 +1610,8 @@ CMICmdCmdDataInfoLine::Execute(void)
// hello.cpp:5
// ^^^^^^^^^ -- file
// ^ -- line
- const CMIUtilString strFile(strLocation.substr(0, nLineStartPos).c_str());
- const CMIUtilString strLine(strLocation.substr(nLineStartPos + 1).c_str());
+ const CMIUtilString strFile(strLocation.substr(0, nLineStartPos));
+ const CMIUtilString strLine(strLocation.substr(nLineStartPos + 1));
strCmdOptionsLocation = CMIUtilString::Format("--file \"%s\" --line %s", strFile.AddSlashes().c_str(), strLine.c_str());
}
const CMIUtilString strCmd(CMIUtilString::Format("target modules lookup -v %s", strCmdOptionsLocation.c_str()));
@@ -1706,6 +1624,53 @@ CMICmdCmdDataInfoLine::Execute(void)
}
//++ ------------------------------------------------------------------------------------
+// Details: Helper function for parsing a line entry returned from lldb for the command:
+// target modules lookup -v <location>
+// where the line entry is of the format:
+// LineEntry: \[0x0000000100000f37-0x0000000100000f45\): /path/file:3[:1]
+// start end file line column(opt)
+// Args: input - (R) Input string to parse.
+// start - (W) String representing the start address.
+// end - (W) String representing the end 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.
+// Throws: None.
+//--
+static bool
+ParseLLDBLineEntry(const char *input, CMIUtilString &start, CMIUtilString &end,
+ 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 MIUtilParse::CRegexParser g_lineentry_nocol_regex(
+ "^ *LineEntry: \\[(0x[0-9a-fA-F]+)-(0x[0-9a-fA-F]+)\\): (.+):([0-9]+)$");
+ static MIUtilParse::CRegexParser g_lineentry_col_regex(
+ "^ *LineEntry: \\[(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)
+
+ MIUtilParse::CRegexParser::Match match(6);
+
+ // First try matching the LineEntry with the column,
+ // then try without the column.
+ const bool ok = g_lineentry_col_regex.Execute(input, match) ||
+ g_lineentry_nocol_regex.Execute(input, match);
+ if (ok)
+ {
+ start = match.GetMatchAtIndex(1);
+ end = match.GetMatchAtIndex(2);
+ file = match.GetMatchAtIndex(3);
+ line = match.GetMatchAtIndex(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.
@@ -1715,7 +1680,7 @@ CMICmdCmdDataInfoLine::Execute(void)
// Throws: None.
//--
bool
-CMICmdCmdDataInfoLine::Acknowledge(void)
+CMICmdCmdDataInfoLine::Acknowledge()
{
if (m_lldbResult.GetErrorSize() > 0)
{
@@ -1736,67 +1701,28 @@ CMICmdCmdDataInfoLine::Acknowledge(void)
// String looks like:
// LineEntry: \[0x0000000100000f37-0x0000000100000f45\): /path/to/file:3[:1]
const CMIUtilString &rLine(vecLines[i]);
+ CMIUtilString strStart;
+ CMIUtilString strEnd;
+ CMIUtilString strFile;
+ CMIUtilString strLine;
- // LineEntry: \[0x0000000100000f37-0x0000000100000f45\): /path/to/file:3[:1]
- // ^^^^^^^^^ -- property
- const size_t nPropertyStartPos = rLine.find_first_not_of(' ');
- const size_t nPropertyEndPos = rLine.find(':');
- const size_t nPropertyLen = nPropertyEndPos - nPropertyStartPos;
- const CMIUtilString strProperty(rLine.substr(nPropertyStartPos, nPropertyLen).c_str());
-
- // Skip all except LineEntry
- if (!CMIUtilString::Compare(strProperty, "LineEntry"))
+ if (!ParseLLDBLineEntry(rLine.c_str(), strStart, strEnd, strFile, strLine))
continue;
- // LineEntry: \[0x0000000100000f37-0x0000000100000f45\): /path/to/file:3[:1]
- // ^^^^^^^^^^^^^^^^^^ -- start address
- const size_t nStartAddressStartPos = rLine.find('[');
- const size_t nStartAddressEndPos = rLine.find('-');
- const size_t nStartAddressLen = nStartAddressEndPos - nStartAddressStartPos - 1;
- const CMIUtilString strStartAddress(rLine.substr(nStartAddressStartPos + 1, nStartAddressLen).c_str());
- const CMICmnMIValueConst miValueConst(strStartAddress);
+ const CMICmnMIValueConst miValueConst(strStart);
const CMICmnMIValueResult miValueResult("start", miValueConst);
- CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, miValueResult);
-
- // LineEntry: \[0x0000000100000f37-0x0000000100000f45\): /path/to/file:3[:1]
- // ^^^^^^^^^^^^^^^^^^ -- end address
- const size_t nEndAddressEndPos = rLine.find(')');
- const size_t nEndAddressLen = nEndAddressEndPos - nStartAddressEndPos - 1;
- const CMIUtilString strEndAddress(rLine.substr(nStartAddressEndPos + 1, nEndAddressLen).c_str());
- const CMICmnMIValueConst miValueConst2(strEndAddress);
+ CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken,
+ CMICmnMIResultRecord::eResultClass_Done,
+ miValueResult);
+ const CMICmnMIValueConst miValueConst2(strEnd);
const CMICmnMIValueResult miValueResult2("end", miValueConst2);
- bool bOk = miRecordResult.Add(miValueResult2);
- if (!bOk)
- return MIstatus::failure;
-
- // LineEntry: \[0x0000000100000f37-0x0000000100000f45\): /path/to/file:3[:1]
- // ^^^^^^^^^^^^^ -- file
- // ^ -- line
- // ^ -- column (optional)
- const size_t nFileStartPos = rLine.find_first_not_of(' ', nEndAddressEndPos + 2);
- const size_t nFileOrLineEndPos = rLine.rfind(':');
- const size_t nFileOrLineStartPos = rLine.rfind(':', nFileOrLineEndPos - 1);
- const size_t nFileEndPos = nFileStartPos < nFileOrLineStartPos ? nFileOrLineStartPos : nFileOrLineEndPos;
- const size_t nFileLen = nFileEndPos - nFileStartPos;
- const CMIUtilString strFile(rLine.substr(nFileStartPos, nFileLen).c_str());
+ miRecordResult.Add(miValueResult2);
const CMICmnMIValueConst miValueConst3(strFile);
const CMICmnMIValueResult miValueResult3("file", miValueConst3);
- bOk = miRecordResult.Add(miValueResult3);
- if (!bOk)
- return MIstatus::failure;
-
- // LineEntry: \[0x0000000100000f37-0x0000000100000f45\): /path/to/file:3[:1]
- // ^ -- line
- const size_t nLineStartPos = nFileEndPos + 1;
- const size_t nLineEndPos = rLine.find(':', nLineStartPos);
- const size_t nLineLen = nLineEndPos != std::string::npos ? nLineEndPos - nLineStartPos
- : std::string::npos;
- const CMIUtilString strLine(rLine.substr(nLineStartPos, nLineLen).c_str());
+ miRecordResult.Add(miValueResult3);
const CMICmnMIValueConst miValueConst4(strLine);
const CMICmnMIValueResult miValueResult4("line", miValueConst4);
- bOk = miRecordResult.Add(miValueResult4);
- if (!bOk)
- return MIstatus::failure;
+ miRecordResult.Add(miValueResult4);
// MI print "%s^done,start=\"%d\",end=\"%d\"",file=\"%s\",line=\"%d\"
m_miResultRecord = miRecordResult;
@@ -1823,7 +1749,7 @@ CMICmdCmdDataInfoLine::Acknowledge(void)
// Throws: None.
//--
CMICmdBase *
-CMICmdCmdDataInfoLine::CreateSelf(void)
+CMICmdCmdDataInfoLine::CreateSelf()
{
return new CMICmdCmdDataInfoLine();
}