[Lldb-commits] [PATCH] D31073: Enable lldm-mi commands -stack-list-locals -stack-list-variables and -var-create to work only with variables in scope
ayuckhulk created this revision. ayuckhulk added a project: LLDB. https://reviews.llvm.org/D31073 Files: packages/Python/lldbsuite/test/tools/lldb-mi/lexical-scope/Makefile packages/Python/lldbsuite/test/tools/lldb-mi/lexical-scope/TestLexicalScope.py packages/Python/lldbsuite/test/tools/lldb-mi/lexical-scope/main.cpp tools/lldb-mi/MICmdCmdStack.cpp tools/lldb-mi/MICmdCmdVar.cpp Index: tools/lldb-mi/MICmdCmdVar.cpp === --- tools/lldb-mi/MICmdCmdVar.cpp +++ tools/lldb-mi/MICmdCmdVar.cpp @@ -182,7 +182,7 @@ 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()); Index: tools/lldb-mi/MICmdCmdStack.cpp === --- tools/lldb-mi/MICmdCmdStack.cpp +++ tools/lldb-mi/MICmdCmdStack.cpp @@ -757,7 +757,8 @@ : 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 @@ 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; Index: packages/Python/lldbsuite/test/tools/lldb-mi/lexical-scope/main.cpp === --- packages/Python/lldbsuite/test/tools/lldb-mi/lexical-scope/main.cpp +++ packages/Python/lldbsuite/test/tools/lldb-mi/lexical-scope/main.cpp @@ -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; +} Index: packages/Python/lldbsuite/test/tools/lldb-mi/lexical-scope/TestLexicalScope.py === --- packages/Python/lldbsuite/test/tools/lldb-mi/lexical-scope/TestLexicalScope.py +++ packages/Python/lldbsuite/test/tools/lldb-mi/lexical-scope/TestLexicalScope.py @@ -0,0 +1,69 @@ +# coding=utf8 +""" +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("\*
[Lldb-commits] [PATCH] D31073: Enable lldm-mi commands -stack-list-locals -stack-list-variables and -var-create to work only with variables in scope
ayuckhulk updated this revision to Diff 93369. ayuckhulk added a comment. Thank you for the review! I've updated the patch with requested changes: - renamed `lexical-scope` to `lexical_scope`, - renamed `TestLexicalScope.py` to `TestMiLexicalScope.py` - removed utf8 encoding string https://reviews.llvm.org/D31073 Files: packages/Python/lldbsuite/test/tools/lldb-mi/lexical_scope/Makefile packages/Python/lldbsuite/test/tools/lldb-mi/lexical_scope/TestMiLexicalScope.py packages/Python/lldbsuite/test/tools/lldb-mi/lexical_scope/main.cpp tools/lldb-mi/MICmdCmdStack.cpp tools/lldb-mi/MICmdCmdVar.cpp Index: tools/lldb-mi/MICmdCmdVar.cpp === --- tools/lldb-mi/MICmdCmdVar.cpp +++ tools/lldb-mi/MICmdCmdVar.cpp @@ -182,7 +182,7 @@ 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()); Index: tools/lldb-mi/MICmdCmdStack.cpp === --- tools/lldb-mi/MICmdCmdStack.cpp +++ tools/lldb-mi/MICmdCmdStack.cpp @@ -757,7 +757,8 @@ : 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 @@ 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; Index: packages/Python/lldbsuite/test/tools/lldb-mi/lexical_scope/main.cpp === --- packages/Python/lldbsuite/test/tools/lldb-mi/lexical_scope/main.cpp +++ packages/Python/lldbsuite/test/tools/lldb-mi/lexical_scope/main.cpp @@ -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; +} Index: packages/Python/lldbsuite/test/tools/lldb-mi/lexical_scope/TestMiLexicalScope.py === --- packages/Python/lldbsuite/test/tools/lldb-mi/lexical_scope/TestMiLexicalScope.py +++ packages/Python/lldbsuite/test/tools/lldb-mi/lexical_scope/TestMiLexicalScope.py @@ -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-i
[Lldb-commits] [PATCH] D31073: Enable lldm-mi commands -stack-list-locals -stack-list-variables and -var-create to work only with variables in scope
ayuckhulk added a comment. Yes, please do. https://reviews.llvm.org/D31073 ___ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits