Index: test/tools/lldb-mi/stack/TestMiStack.py =================================================================== --- test/tools/lldb-mi/stack/TestMiStack.py +++ test/tools/lldb-mi/stack/TestMiStack.py @@ -36,9 +36,9 @@ # Test that -stack-list-arguments lists stack arguments without values # (and that low-frame and high-frame are optional) self.runCmd("-stack-list-arguments 0") - self.expect("\^done,stack-args=\[frame={level=\"0\",args=\[name=\"argc\",name=\"argv\"\]}") + self.expect("\^done,stack-args=\[frame={level=\"0\",args=\[{name=\"argc\"},{name=\"argv\"}\]}") self.runCmd("-stack-list-arguments --no-values") - self.expect("\^done,stack-args=\[frame={level=\"0\",args=\[name=\"argc\",name=\"argv\"\]}") + self.expect("\^done,stack-args=\[frame={level=\"0\",args=\[{name=\"argc\"},{name=\"argv\"}\]}") # Test that -stack-list-arguments lists stack arguments with all values self.runCmd("-stack-list-arguments 1 0 0") @@ -48,9 +48,9 @@ # Test that -stack-list-arguments lists stack arguments with simple values self.runCmd("-stack-list-arguments 2 0 1") - self.expect("\^done,stack-args=\[frame={level=\"0\",args=\[{name=\"argc\",value=\"1\"},{name=\"argv\",value=\".*\"}\]}") + self.expect("\^done,stack-args=\[frame={level=\"0\",args=\[{name=\"argc\",type=\"int\",value=\"1\"},{name=\"argv\",type=\".*\",value=\".*\"}\]}") self.runCmd("-stack-list-arguments --simple-values 0 1") - self.expect("\^done,stack-args=\[frame={level=\"0\",args=\[{name=\"argc\",value=\"1\"},{name=\"argv\",value=\".*\"}\]}") + self.expect("\^done,stack-args=\[frame={level=\"0\",args=\[{name=\"argc\",type=\"int\",value=\"1\"},{name=\"argv\",type=\".*\",value=\".*\"}\]}") # Test that an invalid low-frame is handled # FIXME: -1 is treated as unsigned int @@ -102,9 +102,9 @@ # Test -stack-list-locals: use 0 or --no-values self.runCmd("-stack-list-locals 0") - self.expect("\^done,locals=\[name=\"a\",name=\"b\"\]") + self.expect("\^done,locals=\[{name=\"a\"},{name=\"b\"}\]") self.runCmd("-stack-list-locals --no-values") - self.expect("\^done,locals=\[name=\"a\",name=\"b\"\]") + self.expect("\^done,locals=\[{name=\"a\"},{name=\"b\"}\]") # Test -stack-list-locals: use 1 or --all-values self.runCmd("-stack-list-locals 1") @@ -114,9 +114,9 @@ # Test -stack-list-locals: use 2 or --simple-values self.runCmd("-stack-list-locals 2") - self.expect("\^done,locals=\[{name=\"a\",value=\"10\"},{name=\"b\",value=\"20\"}\]") + self.expect("\^done,locals=\[{name=\"a\",type=\"int\",value=\"10\"},{name=\"b\",type=\"int\",value=\"20\"}\]") self.runCmd("-stack-list-locals --simple-values") - self.expect("\^done,locals=\[{name=\"a\",value=\"10\"},{name=\"b\",value=\"20\"}\]") + self.expect("\^done,locals=\[{name=\"a\",type=\"int\",value=\"10\"},{name=\"b\",type=\"int\",value=\"20\"}\]") # Test struct local variable: # Run to BP_local_struct_test @@ -129,9 +129,9 @@ # Test -stack-list-locals: use 0 or --no-values self.runCmd("-stack-list-locals 0") - self.expect("\^done,locals=\[name=\"var_c\"\]") + self.expect("\^done,locals=\[{name=\"var_c\"}\]") self.runCmd("-stack-list-locals --no-values") - self.expect("\^done,locals=\[name=\"var_c\"\]") + self.expect("\^done,locals=\[{name=\"var_c\"}\]") # Test -stack-list-locals: use 1 or --all-values self.runCmd("-stack-list-locals 1") @@ -141,9 +141,9 @@ # Test -stack-list-locals: use 2 or --simple-values self.runCmd("-stack-list-locals 2") - self.expect("\^done,locals=\[name=\"var_c\"\]") + self.expect("\^done,locals=\[{name=\"var_c\",type=\".*\"}\]") self.runCmd("-stack-list-locals --simple-values") - self.expect("\^done,locals=\[name=\"var_c\"\]") + self.expect("\^done,locals=\[{name=\"var_c\",type=\".*\"}\]") # Test array local variable: # Run to BP_local_array_test @@ -156,9 +156,9 @@ # Test -stack-list-locals: use 0 or --no-values self.runCmd("-stack-list-locals 0") - self.expect("\^done,locals=\[name=\"array\"\]") + self.expect("\^done,locals=\[{name=\"array\"}\]") self.runCmd("-stack-list-locals --no-values") - self.expect("\^done,locals=\[name=\"array\"\]") + self.expect("\^done,locals=\[{name=\"array\"}\]") # Test -stack-list-locals: use 1 or --all-values self.runCmd("-stack-list-locals 1") @@ -168,9 +168,9 @@ # Test -stack-list-locals: use 2 or --simple-values self.runCmd("-stack-list-locals 2") - self.expect("\^done,locals=\[name=\"array\"\]") + self.expect("\^done,locals=\[{name=\"array\",type=\".*\"}\]") self.runCmd("-stack-list-locals --simple-values") - self.expect("\^done,locals=\[name=\"array\"\]") + self.expect("\^done,locals=\[{name=\"array\",type=\".*\"}\]") # Test pointers as local variable: # Run to BP_local_pointer_test @@ -183,9 +183,9 @@ # Test -stack-list-locals: use 0 or --no-values self.runCmd("-stack-list-locals 0") - self.expect("\^done,locals=\[name=\"test_str\",name=\"var_e\",name=\"ptr\"\]") + self.expect("\^done,locals=\[{name=\"test_str\"},{name=\"var_e\"},{name=\"ptr\"}\]") self.runCmd("-stack-list-locals --no-values") - self.expect("\^done,locals=\[name=\"test_str\",name=\"var_e\",name=\"ptr\"\]") + self.expect("\^done,locals=\[{name=\"test_str\"},{name=\"var_e\"},{name=\"ptr\"}\]") # Test -stack-list-locals: use 1 or --all-values self.runCmd("-stack-list-locals 1") @@ -195,9 +195,9 @@ # Test -stack-list-locals: use 2 or --simple-values self.runCmd("-stack-list-locals 2") - self.expect("\^done,locals=\[{name=\"test_str\",value=\".*?Rakaposhi.*?\"},{name=\"var_e\",value=\"24\"},{name=\"ptr\",value=\".*?\"}\]") + self.expect("\^done,locals=\[{name=\"test_str\",type=\".*\",value=\".*?Rakaposhi.*?\"},{name=\"var_e\",type=\"int\",value=\"24\"},{name=\"ptr\",type=\".*\",value=\".*?\"}\]") self.runCmd("-stack-list-locals --simple-values") - self.expect("\^done,locals=\[{name=\"test_str\",value=\".*?Rakaposhi.*?\"},{name=\"var_e\",value=\"24\"},{name=\"ptr\",value=\".*?\"}\]") + self.expect("\^done,locals=\[{name=\"test_str\",type=\".*\",value=\".*?Rakaposhi.*?\"},{name=\"var_e\",type=\"int\",value=\"24\"},{name=\"ptr\",type=\".*\",value=\".*?\"}\]") @lldbmi_test @expectedFailureWindows("llvm.org/pr22274: need a pexpect replacement for windows") @@ -241,9 +241,9 @@ # Test -stack-list-variables: use 2 or --simple-values self.runCmd("-stack-list-variables 2") - self.expect("\^done,variables=\[{arg=\"1\",name=\"c\",value=\"30\"},{arg=\"1\",name=\"d\",value=\"40\"},{name=\"a\",value=\"10\"},{name=\"b\",value=\"20\"}\]") + self.expect("\^done,variables=\[{arg=\"1\",name=\"c\",type=\"int\",value=\"30\"},{arg=\"1\",name=\"d\",type=\"int\",value=\"40\"},{name=\"a\",type=\"int\",value=\"10\"},{name=\"b\",type=\"int\",value=\"20\"}\]") self.runCmd("-stack-list-variables --simple-values") - self.expect("\^done,variables=\[{arg=\"1\",name=\"c\",value=\"30\"},{arg=\"1\",name=\"d\",value=\"40\"},{name=\"a\",value=\"10\"},{name=\"b\",value=\"20\"}\]") + self.expect("\^done,variables=\[{arg=\"1\",name=\"c\",type=\"int\",value=\"30\"},{arg=\"1\",name=\"d\",type=\"int\",value=\"40\"},{name=\"a\",type=\"int\",value=\"10\"},{name=\"b\",type=\"int\",value=\"20\"}\]") # Test struct local variable: # Run to BP_local_struct_test @@ -268,9 +268,9 @@ # Test -stack-list-variables: use 2 or --simple-values self.runCmd("-stack-list-variables 2") - self.expect("\^done,variables=\[{arg=\"1\",name=\"var_e\"},{name=\"var_c\"}\]") + self.expect("\^done,variables=\[{arg=\"1\",name=\"var_e\",type=\".*\"},{name=\"var_c\",type=\".*\"}\]") self.runCmd("-stack-list-variables --simple-values") - self.expect("\^done,variables=\[{arg=\"1\",name=\"var_e\"},{name=\"var_c\"}\]") + self.expect("\^done,variables=\[{arg=\"1\",name=\"var_e\",type=\".*\"},{name=\"var_c\",type=\".*\"}\]") # Test array local variable: # Run to BP_local_array_test @@ -295,9 +295,9 @@ # Test -stack-list-variables: use 2 or --simple-values self.runCmd("-stack-list-variables 2") - self.expect("\^done,variables=\[{arg=\"1\",name=\"other_array\",value=\".*?\"},{name=\"array\"}\]") + self.expect("\^done,variables=\[{arg=\"1\",name=\"other_array\",type=\".*\",value=\".*?\"},{name=\"array\",type=\".*\"}\]") self.runCmd("-stack-list-variables --simple-values") - self.expect("\^done,variables=\[{arg=\"1\",name=\"other_array\",value=\".*?\"},{name=\"array\"}\]") + self.expect("\^done,variables=\[{arg=\"1\",name=\"other_array\",type=\".*\",value=\".*?\"},{name=\"array\",type=\".*\"}\]") # Test pointers as local variable: # Run to BP_local_pointer_test @@ -322,9 +322,9 @@ # Test -stack-list-variables: use 2 or --simple-values self.runCmd("-stack-list-variables 2") - self.expect("\^done,variables=\[{arg=\"1\",name=\"arg_str\",value=\".*?String.*?\"},{arg=\"1\",name=\"arg_ptr\",value=\".*?\"},{name=\"test_str\",value=\".*?Rakaposhi.*?\"},{name=\"var_e\",value=\"24\"},{name=\"ptr\",value=\".*?\"}\]") + self.expect("\^done,variables=\[{arg=\"1\",name=\"arg_str\",type=\".*\",value=\".*?String.*?\"},{arg=\"1\",name=\"arg_ptr\",type=\".*\",value=\".*?\"},{name=\"test_str\",type=\".*\",value=\".*?Rakaposhi.*?\"},{name=\"var_e\",type=\".*\",value=\"24\"},{name=\"ptr\",type=\".*\",value=\".*?\"}\]") self.runCmd("-stack-list-variables --simple-values") - self.expect("\^done,variables=\[{arg=\"1\",name=\"arg_str\",value=\".*?String.*?\"},{arg=\"1\",name=\"arg_ptr\",value=\".*?\"},{name=\"test_str\",value=\".*?Rakaposhi.*?\"},{name=\"var_e\",value=\"24\"},{name=\"ptr\",value=\".*?\"}\]") + self.expect("\^done,variables=\[{arg=\"1\",name=\"arg_str\",type=\".*\",value=\".*?String.*?\"},{arg=\"1\",name=\"arg_ptr\",type=\".*\",value=\".*?\"},{name=\"test_str\",type=\".*\",value=\".*?Rakaposhi.*?\"},{name=\"var_e\",type=\".*\",value=\"24\"},{name=\"ptr\",type=\".*\",value=\".*?\"}\]") @lldbmi_test @expectedFailureWindows("llvm.org/pr22274: need a pexpect replacement for windows") Index: tools/lldb-mi/MICmnLLDBDebugSessionInfo.cpp =================================================================== --- tools/lldb-mi/MICmnLLDBDebugSessionInfo.cpp +++ tools/lldb-mi/MICmnLLDBDebugSessionInfo.cpp @@ -475,6 +475,16 @@ const CMICmnMIValueResult miValueResultArg("arg", miValueConstArg); miValueTuple.Add(miValueResultArg); } + miValueTuple.Add(miValueResultName); // name + // if --simple-value is given then we need to print the type too + if (veVarInfoFormat == eVariableInfoFormat_SimpleValues) + { + CMIUtilString strType(CMICmnLLDBUtilSBValue(value).GetTypeNameDisplay()); + const CMICmnMIValueConst miValueConstType(strType); + const CMICmnMIValueResult miValueResultType("type", miValueConstType); + miValueTuple.Add(miValueResultType); + } + // print value if required if (veVarInfoFormat != eVariableInfoFormat_NoValues) { const MIuint nChildren = value.GetNumChildren(); @@ -488,25 +498,12 @@ { const CMICmnMIValueConst miValueConst2(strValue.Escape().AddSlashes()); const CMICmnMIValueResult miValueResult2("value", miValueConst2); - miValueTuple.Add(miValueResultName); // name miValueTuple.Add(miValueResult2); - vwrMiValueList.Add(miValueTuple); - continue; } } } + vwrMiValueList.Add(miValueTuple); - 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 bOk; }