Index: test/tools/lldb-mi/TestMiBreakpoint.py =================================================================== --- test/tools/lldb-mi/TestMiBreakpoint.py +++ test/tools/lldb-mi/TestMiBreakpoint.py @@ -1,113 +0,0 @@ -""" -Test that the lldb-mi driver understands an MI breakpoint command. -""" - -import lldbmi_testcase -from lldbtest import * -import unittest2 - -class MiBreakpointTestCase(lldbmi_testcase.MiTestCaseBase): - - @lldbmi_test - @expectedFailureWindows("llvm.org/pr22274: need a pexpect replacement for windows") - @skipIfFreeBSD # llvm.org/pr22411: Failure presumably due to known thread races - @skipIfLinux # llvm.org/pr22411: Failure presumably due to known thread races - def test_lldbmi_pendbreakonsym(self): - """Test that 'lldb-mi --interpreter' works for pending symbol breakpoints.""" - - self.spawnLldbMi(args = None) - - self.runCmd("-file-exec-and-symbols %s" % self.myexe) - self.expect("\^done") - - self.runCmd("-break-insert -f b_MyFunction") - self.expect("\^done,bkpt={number=\"1\"") - - self.runCmd("-exec-run") - self.expect("\^running") - self.expect("\*stopped,reason=\"breakpoint-hit\"") - - self.runCmd("-exec-continue") - self.expect("\^running") - self.expect("\*stopped,reason=\"exited-normally\"") - - @lldbmi_test - @expectedFailureWindows("llvm.org/pr22274: need a pexpect replacement for windows") - @skipIfFreeBSD # llvm.org/pr22411: Failure presumably due to known thread races - @skipIfLinux # llvm.org/pr22411: Failure presumably due to known thread races - def test_lldbmi_pendbreakonsrc(self): - """Test that 'lldb-mi --interpreter' works for pending source breakpoints.""" - - self.spawnLldbMi(args = None) - - self.runCmd("-file-exec-and-symbols %s" % self.myexe) - self.expect("\^done") - - # Find the line number to break inside main() and set - # pending BP - line = line_number('main.c', '//BP_source') - self.runCmd("-break-insert -f main.c:%d" % line) - self.expect("\^done,bkpt={number=\"1\"") - - self.runCmd("-exec-run") - self.expect("\^running") - self.expect("\*stopped,reason=\"breakpoint-hit\"") - - self.runCmd("-exec-continue") - self.expect("\^running") - self.expect("\*stopped,reason=\"exited-normally\"") - - @lldbmi_test - @expectedFailureWindows("llvm.org/pr22274: need a pexpect replacement for windows") - @skipIfFreeBSD # llvm.org/pr22411: Failure presumably due to known thread races - @skipIfLinux # llvm.org/pr22411: Failure presumably due to known thread races - def test_lldbmi_breakpoints(self): - """Test that 'lldb-mi --interpreter' works for breakpoints.""" - - self.spawnLldbMi(args = None) - - self.runCmd("-file-exec-and-symbols %s" % self.myexe) - self.expect("\^done") - - self.runCmd("-break-insert -f main") - self.expect("\^done,bkpt={number=\"1\"") - - self.runCmd("-exec-run") - self.expect("\^running") - self.expect("\*stopped,reason=\"breakpoint-hit\"") - - # Break on symbol - self.runCmd("-break-insert b_MyFunction") - self.expect("\^done,bkpt={number=\"2\"") - - self.runCmd("-exec-continue") - self.expect("\^running") - self.expect("\*stopped,reason=\"breakpoint-hit\"") - - # Break on source - line = line_number('main.c', '//BP_source') - self.runCmd("-break-insert main.c:%d" % line) - self.expect("\^done,bkpt={number=\"3\"") - - # Check with full path. TODO, figure out why this commands fails - # if -f is not given - line = line_number('main.c', '// BP_doloop') - full_path = os.path.join(os.getcwd(), "main.c") - self.runCmd("-break-insert -f %s:%d" % (full_path, line)) - self.expect("\^done,bkpt={number=\"4\"") - - self.runCmd("-exec-continue") - self.expect("\^running") - self.expect("\*stopped,reason=\"breakpoint-hit\"") - - self.runCmd("-exec-continue") - self.expect("\^running") - self.expect("\*stopped,reason=\"breakpoint-hit\"") - - # Run to exit - self.runCmd("-exec-continue") - self.expect("\^running") - self.expect("\*stopped,reason=\"exited-normally\"") - -if __name__ == '__main__': - unittest2.main() Index: test/tools/lldb-mi/TestMiEvaluate.py =================================================================== --- test/tools/lldb-mi/TestMiEvaluate.py +++ test/tools/lldb-mi/TestMiEvaluate.py @@ -1,113 +0,0 @@ -""" -Test that the lldb-mi driver can evaluate expressions. -""" - -import lldbmi_testcase -from lldbtest import * -import unittest2 - -class MiEvaluateTestCase(lldbmi_testcase.MiTestCaseBase): - - @lldbmi_test - @expectedFailureWindows("llvm.org/pr22274: need a pexpect replacement for windows") - @skipIfFreeBSD # llvm.org/pr22411: Failure presumably due to known thread races - @skipIfLinux # llvm.org/pr22411: Failure presumably due to known thread races - def test_lldbmi_eval(self): - """Test that 'lldb-mi --interpreter' works for evaluating.""" - - self.spawnLldbMi(args = None) - - # Load executable - self.runCmd("-file-exec-and-symbols %s" % self.myexe) - self.expect("\^done") - - # Run to program return (marked BP_source) - line = line_number('main.c', '//BP_source') - self.runCmd("-break-insert main.c:%d" % line) - self.expect("\^done,bkpt={number=\"1\"") - self.runCmd("-exec-run") - self.expect("\^running") - self.expect("\*stopped,reason=\"breakpoint-hit\"") - - # Print non-existant variable - self.runCmd("-var-create var1 * undef") - #self.expect("\^error") #FIXME: shows undef as {...} - self.runCmd("-data-evaluate-expression undef") - self.expect("\^error,msg=\"Could not evaluate expression\"") - - # Print global "g_MyVar", modify, delete and create again - self.runCmd("-data-evaluate-expression g_MyVar") - self.expect("\^done,value=\"3\"") - self.runCmd("-var-create var2 * g_MyVar") - self.expect("\^done,name=\"var2\",numchild=\"0\",value=\"3\",type=\"int\",thread-id=\"1\",has_more=\"0\"") - self.runCmd("-var-evaluate-expression var2") - self.expect("\^done,value=\"3\"") - self.runCmd("-var-show-attributes var2") - self.expect("\^done,status=\"editable\"") - self.runCmd("-data-evaluate-expression \"g_MyVar=30\"") - self.expect("\^done,value=\"30\"") - self.runCmd("-var-update var2") - #self.expect("name=\"var2\",value=\"30\"") #FIXME -var-update doesn't work - self.runCmd("-var-delete var2") - self.expect("\^done") - self.runCmd("-var-create var2 * g_MyVar") - self.expect("\^done,name=\"var2\",numchild=\"0\",value=\"30\",type=\"int\",thread-id=\"1\",has_more=\"0\"") - - # Print static "s_MyVar", modify, delete and create again - self.runCmd("-data-evaluate-expression s_MyVar") - self.expect("\^done,value=\"30\"") - self.runCmd("-var-create var3 * s_MyVar") - self.expect("\^done,name=\"var3\",numchild=\"0\",value=\"30\",type=\"int\",thread-id=\"1\",has_more=\"0\"") - self.runCmd("-var-evaluate-expression var3") - self.expect("\^done,value=\"30\"") - self.runCmd("-var-show-attributes var3") - self.expect("\^done,status=\"editable\"") - self.runCmd("-data-evaluate-expression \"s_MyVar=3\"") - self.expect("\^done,value=\"3\"") - self.runCmd("-var-update var3") - #self.expect("name=\"var3\",value=\"3\"") #FIXME -var-update doesn't work - self.runCmd("-var-delete var3") - self.expect("\^done") - self.runCmd("-var-create var3 * s_MyVar") - self.expect("\^done,name=\"var3\",numchild=\"0\",value=\"3\",type=\"int\",thread-id=\"1\",has_more=\"0\"") - - # Print local "b", modify, delete and create again - self.runCmd("-data-evaluate-expression b") - self.expect("\^done,value=\"20\"") - self.runCmd("-var-create var4 * b") - self.expect("\^done,name=\"var4\",numchild=\"0\",value=\"20\",type=\"int\",thread-id=\"1\",has_more=\"0\"") - self.runCmd("-var-evaluate-expression var4") - self.expect("\^done,value=\"20\"") - self.runCmd("-var-show-attributes var4") - self.expect("\^done,status=\"editable\"") - self.runCmd("-data-evaluate-expression \"b=2\"") - self.expect("\^done,value=\"2\"") - self.runCmd("-var-update var4") - #self.expect("name=\"var4\",value=\"2\"") #FIXME -var-update doesn't work - self.runCmd("-var-delete var4") - self.expect("\^done") - self.runCmd("-var-create var4 * b") - self.expect("\^done,name=\"var4\",numchild=\"0\",value=\"2\",type=\"int\",thread-id=\"1\",has_more=\"0\"") - - # Print temp "a + b" - self.runCmd("-data-evaluate-expression \"a + b\"") - self.expect("\^done,value=\"12\"") - self.runCmd("-var-create var5 * \"a + b\"") - self.expect("\^done,name=\"var5\",numchild=\"0\",value=\"12\",type=\"int\",thread-id=\"1\",has_more=\"0\"") - self.runCmd("-var-evaluate-expression var5") - self.expect("\^done,value=\"12\"") - self.runCmd("-var-show-attributes var5") - self.expect("\^done,status=\"editable\"") #FIXME editable or not? - - # Print argument "argv[0]" - self.runCmd("-data-evaluate-expression \"argv[0]\"") - self.expect("\^done,value=\"0x[0-9a-f]+\"") - self.runCmd("-var-create var6 * \"argv[0]\"") - self.expect("\^done,name=\"var6\",numchild=\"1\",value=\"0x[0-9a-f]+\",type=\"const char \*\",thread-id=\"1\",has_more=\"0\"") - self.runCmd("-var-evaluate-expression var6") - self.expect("\^done,value=\"0x[0-9a-f]+\"") - self.runCmd("-var-show-attributes var6") - self.expect("\^done,status=\"editable\"") - -if __name__ == '__main__': - unittest2.main() Index: test/tools/lldb-mi/breakpoint/Makefile =================================================================== --- /dev/null +++ test/tools/lldb-mi/breakpoint/Makefile @@ -0,0 +1,5 @@ +LEVEL = ../../../make + +CXX_SOURCES := main.cpp + +include $(LEVEL)/Makefile.rules Index: test/tools/lldb-mi/breakpoint/TestMiBreak.py =================================================================== --- test/tools/lldb-mi/breakpoint/TestMiBreak.py +++ test/tools/lldb-mi/breakpoint/TestMiBreak.py @@ -1,42 +1,66 @@ """ -Test that the lldb-mi driver understands an MI breakpoint command. +Test lldb-mi -break-xxx commands. """ import lldbmi_testcase from lldbtest import * import unittest2 -class MiBreakpointTestCase(lldbmi_testcase.MiTestCaseBase): +class MiBreakTestCase(lldbmi_testcase.MiTestCaseBase): + + mydir = TestBase.compute_mydir(__file__) @lldbmi_test @expectedFailureWindows("llvm.org/pr22274: need a pexpect replacement for windows") @skipIfFreeBSD # llvm.org/pr22411: Failure presumably due to known thread races @skipIfLinux # llvm.org/pr22411: Failure presumably due to known thread races - def test_lldbmi_pendbreakonsym(self): - """Test that 'lldb-mi --interpreter' works for pending symbol breakpoints.""" + def test_lldbmi_break_insert_function_pending(self): + """Test that 'lldb-mi --interpreter' works for pending function breakpoints.""" self.spawnLldbMi(args = None) self.runCmd("-file-exec-and-symbols %s" % self.myexe) self.expect("\^done") - self.runCmd("-break-insert -f b_MyFunction") + self.runCmd("-break-insert -f g_MyFunction") self.expect("\^done,bkpt={number=\"1\"") self.runCmd("-exec-run") self.expect("\^running") self.expect("\*stopped,reason=\"breakpoint-hit\"") + @lldbmi_test + @expectedFailureWindows("llvm.org/pr22274: need a pexpect replacement for windows") + @skipIfFreeBSD # llvm.org/pr22411: Failure presumably due to known thread races + @skipIfLinux # llvm.org/pr22411: Failure presumably due to known thread races + def test_lldbmi_break_insert_function(self): + """Test that 'lldb-mi --interpreter' works for function breakpoints.""" + + self.spawnLldbMi(args = None) + + self.runCmd("-file-exec-and-symbols %s" % self.myexe) + self.expect("\^done") + + self.runCmd("-break-insert -f main") + self.expect("\^done,bkpt={number=\"1\"") + + self.runCmd("-exec-run") + self.expect("\^running") + self.expect("\*stopped,reason=\"breakpoint-hit\"") + + self.runCmd("-break-insert g_MyFunction") + self.expect("\^done,bkpt={number=\"2\"") + self.runCmd("-exec-continue") self.expect("\^running") - self.expect("\*stopped,reason=\"exited-normally\"") + self.expect("\*stopped,reason=\"breakpoint-hit\"") @lldbmi_test @expectedFailureWindows("llvm.org/pr22274: need a pexpect replacement for windows") @skipIfFreeBSD # llvm.org/pr22411: Failure presumably due to known thread races @skipIfLinux # llvm.org/pr22411: Failure presumably due to known thread races - def test_lldbmi_pendbreakonsrc(self): - """Test that 'lldb-mi --interpreter' works for pending source breakpoints.""" + def test_lldbmi_break_insert_file_line_pending(self): + """Test that 'lldb-mi --interpreter' works for pending file:line breakpoints.""" self.spawnLldbMi(args = None) @@ -45,24 +69,20 @@ # Find the line number to break inside main() and set # pending BP - line = line_number('main.c', '//BP_source') - self.runCmd("-break-insert -f main.c:%d" % line) + line = line_number('main.cpp', '//BP_return') + self.runCmd("-break-insert -f main.cpp:%d" % line) self.expect("\^done,bkpt={number=\"1\"") self.runCmd("-exec-run") self.expect("\^running") self.expect("\*stopped,reason=\"breakpoint-hit\"") - self.runCmd("-exec-continue") - self.expect("\^running") - self.expect("\*stopped,reason=\"exited-normally\"") - @lldbmi_test @expectedFailureWindows("llvm.org/pr22274: need a pexpect replacement for windows") @skipIfFreeBSD # llvm.org/pr22411: Failure presumably due to known thread races @skipIfLinux # llvm.org/pr22411: Failure presumably due to known thread races - def test_lldbmi_breakpoints(self): - """Test that 'lldb-mi --interpreter' works for breakpoints.""" + def test_lldbmi_break_insert_file_line(self): + """Test that 'lldb-mi --interpreter' works for file:line breakpoints.""" self.spawnLldbMi(args = None) @@ -76,38 +96,42 @@ self.expect("\^running") self.expect("\*stopped,reason=\"breakpoint-hit\"") - # Break on symbol - self.runCmd("-break-insert b_MyFunction") + line = line_number('main.cpp', '//BP_return') + self.runCmd("-break-insert main.cpp:%d" % line) self.expect("\^done,bkpt={number=\"2\"") self.runCmd("-exec-continue") self.expect("\^running") self.expect("\*stopped,reason=\"breakpoint-hit\"") - # Break on source - line = line_number('main.c', '//BP_source') - self.runCmd("-break-insert main.c:%d" % line) - self.expect("\^done,bkpt={number=\"3\"") - - # Check with full path. TODO, figure out why this commands fails - # if -f is not given - line = line_number('main.c', '// BP_doloop') - full_path = os.path.join(os.getcwd(), "main.c") - self.runCmd("-break-insert -f %s:%d" % (full_path, line)) - self.expect("\^done,bkpt={number=\"4\"") + @lldbmi_test + @expectedFailureWindows("llvm.org/pr22274: need a pexpect replacement for windows") + @skipIfFreeBSD # llvm.org/pr22411: Failure presumably due to known thread races + @skipIfLinux # llvm.org/pr22411: Failure presumably due to known thread races + @unittest2.expectedFailure("-break-insert doesn't work for absolute path") + def test_lldbmi_break_insert_file_line_absolute_path(self): + """Test that 'lldb-mi --interpreter' works for file:line breakpoints.""" - self.runCmd("-exec-continue") - self.expect("\^running") - self.expect("\*stopped,reason=\"breakpoint-hit\"") + self.spawnLldbMi(args = None) - self.runCmd("-exec-continue") + self.runCmd("-file-exec-and-symbols %s" % self.myexe) + self.expect("\^done") + + self.runCmd("-break-insert -f main") + self.expect("\^done,bkpt={number=\"1\"") + + self.runCmd("-exec-run") self.expect("\^running") self.expect("\*stopped,reason=\"breakpoint-hit\"") - # Run to exit + import os + path = os.path.join(os.getcwd(), "main.cpp") + line = line_number('main.cpp', '//BP_return') + self.runCmd("-break-insert %s:%d" % (path, line)) + self.runCmd("-exec-continue") self.expect("\^running") - self.expect("\*stopped,reason=\"exited-normally\"") + self.expect("\*stopped,reason=\"breakpoint-hit\"") if __name__ == '__main__': unittest2.main() Index: test/tools/lldb-mi/breakpoint/main.cpp =================================================================== --- /dev/null +++ test/tools/lldb-mi/breakpoint/main.cpp @@ -0,0 +1,20 @@ +//===-- 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 +g_MyFunction(void) +{ +} + +int +main(int argc, char const *argv[]) +{ + g_MyFunction(); + return 0; //BP_return +} Index: test/tools/lldb-mi/evaluate/Makefile =================================================================== --- /dev/null +++ test/tools/lldb-mi/evaluate/Makefile @@ -0,0 +1,5 @@ +LEVEL = ../../../make + +CXX_SOURCES := main.cpp + +include $(LEVEL)/Makefile.rules Index: test/tools/lldb-mi/evaluate/TestMiVar.py =================================================================== --- test/tools/lldb-mi/evaluate/TestMiVar.py +++ test/tools/lldb-mi/evaluate/TestMiVar.py @@ -1,12 +1,14 @@ """ -Test that the lldb-mi driver can evaluate expressions. +Test lldb-mi -var-xxx commands. """ import lldbmi_testcase from lldbtest import * import unittest2 -class MiEvaluateTestCase(lldbmi_testcase.MiTestCaseBase): +class MiVarTestCase(lldbmi_testcase.MiTestCaseBase): + + mydir = TestBase.compute_mydir(__file__) @lldbmi_test @expectedFailureWindows("llvm.org/pr22274: need a pexpect replacement for windows") @@ -21,9 +23,9 @@ self.runCmd("-file-exec-and-symbols %s" % self.myexe) self.expect("\^done") - # Run to program return (marked BP_source) - line = line_number('main.c', '//BP_source') - self.runCmd("-break-insert main.c:%d" % line) + # Run to program return + line = line_number('main.cpp', '//BP_return') + self.runCmd("-break-insert main.cpp:%d" % line) self.expect("\^done,bkpt={number=\"1\"") self.runCmd("-exec-run") self.expect("\^running") @@ -46,8 +48,8 @@ self.expect("\^done,status=\"editable\"") self.runCmd("-data-evaluate-expression \"g_MyVar=30\"") self.expect("\^done,value=\"30\"") - self.runCmd("-var-update var2") - #self.expect("name=\"var2\",value=\"30\"") #FIXME -var-update doesn't work + self.runCmd("-var-update --all-values var2") + #self.expect("\^done,changelist=\[\{name=\"var2\",value=\"30\",in_scope=\"true\",type_changed=\"false\",has_more=\"0\"\}\]") #FIXME -var-update doesn't work self.runCmd("-var-delete var2") self.expect("\^done") self.runCmd("-var-create var2 * g_MyVar") @@ -64,8 +66,8 @@ self.expect("\^done,status=\"editable\"") self.runCmd("-data-evaluate-expression \"s_MyVar=3\"") self.expect("\^done,value=\"3\"") - self.runCmd("-var-update var3") - #self.expect("name=\"var3\",value=\"3\"") #FIXME -var-update doesn't work + self.runCmd("-var-update --all-values var3") + #self.expect("\^done,changelist=\[\{name=\"var3\",value=\"3\",in_scope=\"true\",type_changed=\"false\",has_more=\"0\"\}\]") #FIXME -var-update doesn't work self.runCmd("-var-delete var3") self.expect("\^done") self.runCmd("-var-create var3 * s_MyVar") @@ -82,8 +84,8 @@ self.expect("\^done,status=\"editable\"") self.runCmd("-data-evaluate-expression \"b=2\"") self.expect("\^done,value=\"2\"") - self.runCmd("-var-update var4") - #self.expect("name=\"var4\",value=\"2\"") #FIXME -var-update doesn't work + self.runCmd("-var-update --all-values var4") + #self.expect("\^done,changelist=\[\{name=\"var4\",value=\"2\",in_scope=\"true\",type_changed=\"false\",has_more=\"0\"\}\]") #FIXME -var-update doesn't work self.runCmd("-var-delete var4") self.expect("\^done") self.runCmd("-var-create var4 * b") Index: test/tools/lldb-mi/evaluate/main.cpp =================================================================== --- /dev/null +++ test/tools/lldb-mi/evaluate/main.cpp @@ -0,0 +1,19 @@ +//===-- main.cpp ------------------------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +int g_MyVar = 3; +static int s_MyVar = 4; + +int +main(int argc, char const *argv[]) +{ + int a = 10, b = 20; + s_MyVar = a + b; + return 0; //BP_return +} Index: test/tools/lldb-mi/lldbmi_testcase.py =================================================================== --- test/tools/lldb-mi/lldbmi_testcase.py +++ test/tools/lldb-mi/lldbmi_testcase.py @@ -8,7 +8,7 @@ class MiTestCaseBase(Base): - mydir = Base.compute_mydir(__file__) + mydir = Base.compute_mydir(__file__) #TODO remove me myexe = "a.out" mylog = "child.log"