[Lldb-commits] [lldb] r246965 - Fix -data-evaluate-expression for array.
Hafiz Abid Qadeer via lldb-commits
lldb-commits at lists.llvm.org
Mon Sep 7 05:00:51 PDT 2015
Author: abidh
Date: Mon Sep 7 07:00:51 2015
New Revision: 246965
URL: http://llvm.org/viewvc/llvm-project?rev=246965&view=rev
Log:
Fix -data-evaluate-expression for array.
Summary:
For an array declared like "blk[2][3]", this command was showing:
-data-evaluate-expression blk
^done,value="{[0] = [3], [1] = [3]}"
After this fix, it shows:
-data-evaluate-expression blk
^done,value="{[0] = {[0] = 1, [1] = 2, [2] = 3}, [1] = {[0] = 4, [1] = 5, [2] = 6}}"
The code to do the right thing was already available and used by other commands.
So I have just used that and removed the half-baked previous implementation.
Reviewers: ki.stfu
Subscribers: lldb-commits
Differential Revision: http://reviews.llvm.org/D12634
Modified:
lldb/trunk/test/tools/lldb-mi/data/TestMiData.py
lldb/trunk/test/tools/lldb-mi/data/main.cpp
lldb/trunk/tools/lldb-mi/MICmdCmdData.cpp
lldb/trunk/tools/lldb-mi/MICmdCmdData.h
Modified: lldb/trunk/test/tools/lldb-mi/data/TestMiData.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/tools/lldb-mi/data/TestMiData.py?rev=246965&r1=246964&r2=246965&view=diff
==============================================================================
--- lldb/trunk/test/tools/lldb-mi/data/TestMiData.py (original)
+++ lldb/trunk/test/tools/lldb-mi/data/TestMiData.py Mon Sep 7 07:00:51 2015
@@ -312,5 +312,28 @@ class MiDataTestCase(lldbmi_testcase.MiT
self.runCmd("-data-info-line main.cpp:0")
self.expect("\^error,msg=\"error: zero is an invalid line number")
+ @lldbmi_test
+ @skipIfWindows #llvm.org/pr24452: Get lldb-mi tests working on Windows
+ @skipIfFreeBSD # llvm.org/pr22411: Failure presumably due to known thread races
+ def test_lldbmi_data_evaluate_expression(self):
+ """Test that 'lldb-mi --interpreter' works for -data-evaluate-expression."""
+
+ self.spawnLldbMi(args = None)
+
+ # Load executable
+ self.runCmd("-file-exec-and-symbols %s" % self.myexe)
+ self.expect("\^done")
+
+ line = line_number('main.cpp', '// BP_local_2d_array_test')
+ self.runCmd('-break-insert main.cpp:%d' % line)
+ self.expect("\^done,bkpt={number=\"1\"")
+ self.runCmd("-exec-run")
+ self.expect("\^running")
+ self.expect("\*stopped,reason=\"breakpoint-hit\"")
+
+ # Check 2d array
+ self.runCmd("-data-evaluate-expression array2d")
+ self.expect("\^done,value=\"\{\[0\] = \{\[0\] = 1, \[1\] = 2, \[2\] = 3\}, \[1\] = \{\[0\] = 4, \[1\] = 5, \[2\] = 6\}\}\"")
+
if __name__ == '__main__':
unittest2.main()
Modified: lldb/trunk/test/tools/lldb-mi/data/main.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/tools/lldb-mi/data/main.cpp?rev=246965&r1=246964&r2=246965&view=diff
==============================================================================
--- lldb/trunk/test/tools/lldb-mi/data/main.cpp (original)
+++ lldb/trunk/test/tools/lldb-mi/data/main.cpp Mon Sep 7 07:00:51 2015
@@ -31,6 +31,19 @@ local_array_test()
}
void
+local_2d_array_test()
+{
+ int array2d[2][3];
+ array2d[0][0] = 1;
+ array2d[0][1] = 2;
+ array2d[0][2] = 3;
+ array2d[1][0] = 4;
+ array2d[1][1] = 5;
+ array2d[1][2] = 6;
+ return; // BP_local_2d_array_test
+}
+
+void
hello_world()
{
printf("Hello, World!\n"); // BP_hello_world
@@ -41,5 +54,6 @@ main(int argc, char const *argv[])
{ // FUNC_main
local_array_test();
hello_world();
+ local_2d_array_test();
return 0;
}
Modified: lldb/trunk/tools/lldb-mi/MICmdCmdData.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdData.cpp?rev=246965&r1=246964&r2=246965&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdData.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdData.cpp Mon Sep 7 07:00:51 2015
@@ -54,7 +54,6 @@ CMICmdCmdDataEvaluateExpression::CMICmdC
: m_bExpressionValid(true)
, m_bEvaluatedExpression(true)
, m_strValue("??")
- , m_bCompositeVarType(false)
, m_bFoundInvalidChar(false)
, m_cExpressionInvalidChar(0x00)
, m_constStrArgThread("thread")
@@ -145,41 +144,7 @@ CMICmdCmdDataEvaluateExpression::Execute
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;
}
@@ -199,15 +164,6 @@ CMICmdCmdDataEvaluateExpression::Acknowl
{
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(
Modified: lldb/trunk/tools/lldb-mi/MICmdCmdData.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdData.h?rev=246965&r1=246964&r2=246965&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdData.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdData.h Mon Sep 7 07:00:51 2015
@@ -73,7 +73,6 @@ class CMICmdCmdDataEvaluateExpression :
bool m_bEvaluatedExpression; // True = yes is expression evaluated, false = failed
CMIUtilString m_strValue;
CMICmnMIValueTuple m_miValueTuple;
- bool m_bCompositeVarType; // True = yes composite type, false = internal type
bool m_bFoundInvalidChar; // True = yes found unexpected character in the expression, false = all ok
char m_cExpressionInvalidChar;
const CMIUtilString m_constStrArgThread; // Not specified in MI spec but Eclipse gives this option. Not handled by command.
More information about the lldb-commits
mailing list