Author: ki.stfu Date: Tue Apr 4 03:00:28 2017 New Revision: 299417 URL: http://llvm.org/viewvc/llvm-project?rev=299417&view=rev Log: Enable lldm-mi commands -stack-list-locals -stack-list-variables and -var-create to work only with variables in scope
Patch by ayuckhulk Reviewers: abidh, lldb-commits, ki.stfu Reviewed By: ki.stfu Tags: #lldb Differential Revision: https://reviews.llvm.org/D31073 Added: lldb/trunk/packages/Python/lldbsuite/test/tools/lldb-mi/lexical_scope/ lldb/trunk/packages/Python/lldbsuite/test/tools/lldb-mi/lexical_scope/Makefile lldb/trunk/packages/Python/lldbsuite/test/tools/lldb-mi/lexical_scope/TestMiLexicalScope.py lldb/trunk/packages/Python/lldbsuite/test/tools/lldb-mi/lexical_scope/main.cpp Modified: lldb/trunk/tools/lldb-mi/MICmdCmdStack.cpp lldb/trunk/tools/lldb-mi/MICmdCmdVar.cpp Added: lldb/trunk/packages/Python/lldbsuite/test/tools/lldb-mi/lexical_scope/Makefile URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/tools/lldb-mi/lexical_scope/Makefile?rev=299417&view=auto ============================================================================== --- lldb/trunk/packages/Python/lldbsuite/test/tools/lldb-mi/lexical_scope/Makefile (added) +++ lldb/trunk/packages/Python/lldbsuite/test/tools/lldb-mi/lexical_scope/Makefile Tue Apr 4 03:00:28 2017 @@ -0,0 +1,5 @@ +LEVEL = ../../../make + +CXX_SOURCES := main.cpp + +include $(LEVEL)/Makefile.rules Added: lldb/trunk/packages/Python/lldbsuite/test/tools/lldb-mi/lexical_scope/TestMiLexicalScope.py URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/tools/lldb-mi/lexical_scope/TestMiLexicalScope.py?rev=299417&view=auto ============================================================================== --- lldb/trunk/packages/Python/lldbsuite/test/tools/lldb-mi/lexical_scope/TestMiLexicalScope.py (added) +++ lldb/trunk/packages/Python/lldbsuite/test/tools/lldb-mi/lexical_scope/TestMiLexicalScope.py Tue Apr 4 03:00:28 2017 @@ -0,0 +1,68 @@ +""" +Test lldb-mi -stack-list-locals -stack-list-variables and -var-create commands +for variables with the same name in sibling lexical scopes. +""" + +from __future__ import print_function + + +import lldbmi_testcase +from lldbsuite.test.decorators import * +from lldbsuite.test.lldbtest import * +from lldbsuite.test import lldbutil + + +class MiLexicalScopeTestCase(lldbmi_testcase.MiTestCaseBase): + + mydir = TestBase.compute_mydir(__file__) + + @skipIfWindows # llvm.org/pr24452: Get lldb-mi tests working on Windows + @skipIfFreeBSD # llvm.org/pr22411: Failure presumably due to known thread races + @skipIfRemote # We do not currently support remote debugging via the MI. + def test_lldbmi_var_create_in_sibling_scope(self): + """Test that 'lldb-mi --interpreter' works with sibling lexical scopes.""" + + self.spawnLldbMi(args=None) + + # Load executable + self.runCmd("-file-exec-and-symbols %s" % self.myexe) + self.expect("\^done") + + # Breakpoint inside first scope + line = line_number('main.cpp', '// BP_first') + self.runCmd("-break-insert --file main.cpp:%d" % line) + self.expect("\^done,bkpt={number=\"\d+\"") + + # Breakpoint inside second scope + line = line_number('main.cpp', '// BP_second') + self.runCmd("-break-insert --file main.cpp:%d" % line) + self.expect("\^done,bkpt={number=\"\d+\"") + + # Run to the first scope + self.runCmd("-exec-run") + self.expect("\^running") + self.expect("\*stopped,reason=\"breakpoint-hit\"") + + # Check that only variables a and b exist with expected values + self.runCmd("-stack-list-locals --thread 1 --frame 0 --all-values") + self.expect("\^done,locals=\[{name=\"a\",value=\"1\"},{name=\"b\",value=\"2\"}\]") + + # Create variable object for local variable b + self.runCmd("-var-create - * \"b\"") + self.expect( + "\^done,name=\"var\d+\",numchild=\"0\",value=\"2\",type=\"int\",thread-id=\"1\",has_more=\"0\"") + + # Run to the second scope + self.runCmd("-exec-continue") + self.expect("\^running") + self.expect("\*stopped,reason=\"breakpoint-hit\"") + + # Check that only variables a and b exist with expected values, + # but variable b is different from previous breakpoint + self.runCmd("-stack-list-variables --thread 1 --frame 0 --all-values") + self.expect("\^done,variables=\[{name=\"a\",value=\"1\"},{name=\"b\",value=\"3\"}\]") + + # Create variable object for local variable b + self.runCmd("-var-create - * \"b\"") + self.expect( + "\^done,name=\"var\d+\",numchild=\"0\",value=\"3\",type=\"short\",thread-id=\"1\",has_more=\"0\"") Added: lldb/trunk/packages/Python/lldbsuite/test/tools/lldb-mi/lexical_scope/main.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/tools/lldb-mi/lexical_scope/main.cpp?rev=299417&view=auto ============================================================================== --- lldb/trunk/packages/Python/lldbsuite/test/tools/lldb-mi/lexical_scope/main.cpp (added) +++ lldb/trunk/packages/Python/lldbsuite/test/tools/lldb-mi/lexical_scope/main.cpp Tue Apr 4 03:00:28 2017 @@ -0,0 +1,33 @@ +//===-- main.cpp ------------------------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +void +some_func (void) +{ +} + +void test_sibling_scope (void) +{ + int a = 1; + { + int b = 2; + some_func(); // BP_first + } + { + short b = 3; + some_func(); // BP_second + } +} + +int +main (int argc, char **argv) +{ + test_sibling_scope(); + return 0; +} Modified: lldb/trunk/tools/lldb-mi/MICmdCmdStack.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdStack.cpp?rev=299417&r1=299416&r2=299417&view=diff ============================================================================== --- lldb/trunk/tools/lldb-mi/MICmdCmdStack.cpp (original) +++ lldb/trunk/tools/lldb-mi/MICmdCmdStack.cpp Tue Apr 4 03:00:28 2017 @@ -757,7 +757,8 @@ bool CMICmdCmdStackListLocals::Execute() : thread.GetSelectedFrame(); CMICmnMIValueList miValueList(true); - const MIuint maskVarTypes = CMICmnLLDBDebugSessionInfo::eVariableType_Locals; + const MIuint maskVarTypes = CMICmnLLDBDebugSessionInfo::eVariableType_Locals | + CMICmnLLDBDebugSessionInfo::eVariableType_InScope; if (!rSessionInfo.MIResponseFormVariableInfo(frame, maskVarTypes, eVarInfoFormat, miValueList)) return MIstatus::failure; @@ -929,7 +930,8 @@ bool CMICmdCmdStackListVariables::Execut CMICmnMIValueList miValueList(true); const MIuint maskVarTypes = CMICmnLLDBDebugSessionInfo::eVariableType_Arguments | - CMICmnLLDBDebugSessionInfo::eVariableType_Locals; + CMICmnLLDBDebugSessionInfo::eVariableType_Locals | + CMICmnLLDBDebugSessionInfo::eVariableType_InScope; if (!rSessionInfo.MIResponseFormVariableInfo( frame, maskVarTypes, eVarInfoFormat, miValueList, 10, true)) return MIstatus::failure; Modified: lldb/trunk/tools/lldb-mi/MICmdCmdVar.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdVar.cpp?rev=299417&r1=299416&r2=299417&view=diff ============================================================================== --- lldb/trunk/tools/lldb-mi/MICmdCmdVar.cpp (original) +++ lldb/trunk/tools/lldb-mi/MICmdCmdVar.cpp Tue Apr 4 03:00:28 2017 @@ -182,7 +182,7 @@ bool CMICmdCmdVarCreate::Execute() { const bool bArgs = true; const bool bLocals = true; const bool bStatics = true; - const bool bInScopeOnly = false; + const bool bInScopeOnly = true; const lldb::SBValueList valueList = frame.GetVariables(bArgs, bLocals, bStatics, bInScopeOnly); value = valueList.GetFirstValueByName(rStrExpression.c_str()); _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits