diff options
Diffstat (limited to 'packages/Python/lldbsuite/test/python_api/symbol-context')
5 files changed, 109 insertions, 37 deletions
diff --git a/packages/Python/lldbsuite/test/python_api/symbol-context/TestSymbolContext.py b/packages/Python/lldbsuite/test/python_api/symbol-context/TestSymbolContext.py index 5d0d01d7a2b68..85ecb69a91fca 100644 --- a/packages/Python/lldbsuite/test/python_api/symbol-context/TestSymbolContext.py +++ b/packages/Python/lldbsuite/test/python_api/symbol-context/TestSymbolContext.py @@ -5,7 +5,6 @@ Test SBSymbolContext APIs. from __future__ import print_function - import os import re import time @@ -15,6 +14,7 @@ from lldbsuite.test.decorators import * from lldbsuite.test.lldbtest import * from lldbsuite.test import lldbutil + class SymbolContextAPITestCase(TestBase): mydir = TestBase.compute_mydir(__file__) @@ -23,7 +23,8 @@ class SymbolContextAPITestCase(TestBase): # Call super's setUp(). TestBase.setUp(self) # Find the line number to of function 'c'. - self.line = line_number('main.c', '// Find the line number of function "c" here.') + self.line = line_number( + 'main.c', '// Find the line number of function "c" here.') @add_test_categories(['pyapi']) @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24778") @@ -44,13 +45,16 @@ class SymbolContextAPITestCase(TestBase): VALID_BREAKPOINT) # Now launch the process, and do not stop at entry point. - process = target.LaunchSimple (None, None, self.get_process_working_directory()) + process = target.LaunchSimple( + None, None, self.get_process_working_directory()) self.assertTrue(process, PROCESS_IS_VALID) # Frame #0 should be on self.line. from lldbsuite.test.lldbutil import get_stopped_thread thread = get_stopped_thread(process, lldb.eStopReasonBreakpoint) - self.assertTrue(thread.IsValid(), "There should be a thread stopped due to breakpoint") + self.assertTrue( + thread.IsValid(), + "There should be a thread stopped due to breakpoint") frame0 = thread.GetFrameAtIndex(0) self.assertTrue(frame0.GetLineEntry().GetLine() == self.line) @@ -62,11 +66,17 @@ class SymbolContextAPITestCase(TestBase): module = context.GetModule() desc = lldbutil.get_description(module) self.expect(desc, "The module should match", exe=False, - substrs = [os.path.join(self.mydir, 'a.out')]) + substrs=[os.path.join(self.mydir, 'a.out')]) compileUnit = context.GetCompileUnit() - self.expect(str(compileUnit), "The compile unit should match", exe=False, - substrs = [os.path.join(self.mydir, 'main.c')]) + self.expect( + str(compileUnit), + "The compile unit should match", + exe=False, + substrs=[ + os.path.join( + self.mydir, + 'main.c')]) function = context.GetFunction() self.assertTrue(function) @@ -78,15 +88,21 @@ class SymbolContextAPITestCase(TestBase): lineEntry = context.GetLineEntry() #print("line entry:", lineEntry) - self.expect(lineEntry.GetFileSpec().GetDirectory(), "The line entry should have the correct directory", - exe=False, - substrs = [self.mydir]) - self.expect(lineEntry.GetFileSpec().GetFilename(), "The line entry should have the correct filename", - exe=False, - substrs = ['main.c']) + self.expect( + lineEntry.GetFileSpec().GetDirectory(), + "The line entry should have the correct directory", + exe=False, + substrs=[ + self.mydir]) + self.expect( + lineEntry.GetFileSpec().GetFilename(), + "The line entry should have the correct filename", + exe=False, + substrs=['main.c']) self.assertTrue(lineEntry.GetLine() == self.line, "The line entry's line number should match ") symbol = context.GetSymbol() - self.assertTrue(function.GetName() == symbol.GetName() and symbol.GetName() == 'c', - "The symbol name should be 'c'") + self.assertTrue( + function.GetName() == symbol.GetName() and symbol.GetName() == 'c', + "The symbol name should be 'c'") diff --git a/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/TestSymbolContextTwoFiles.py b/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/TestSymbolContextTwoFiles.py index 1d8d701145738..429e9c4da34ad 100644 --- a/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/TestSymbolContextTwoFiles.py +++ b/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/TestSymbolContextTwoFiles.py @@ -11,6 +11,7 @@ from lldbsuite.test.decorators import * from lldbsuite.test.lldbtest import * from lldbsuite.test import lldbutil + class SymbolContextTwoFilesTestCase(TestBase): mydir = TestBase.compute_mydir(__file__) @@ -30,7 +31,53 @@ class SymbolContextTwoFilesTestCase(TestBase): for symbol_name in ["struct1::f()", "struct2::f()"]: sc_list = module.FindFunctions(symbol_name, lldb.eSymbolTypeCode) self.assertTrue(1, sc_list.GetSize()) - symbol_address = sc_list.GetContextAtIndex(0).GetSymbol().GetStartAddress() + symbol_address = sc_list.GetContextAtIndex( + 0).GetSymbol().GetStartAddress() self.assertTrue(symbol_address.IsValid()) - sc_by_address = module.ResolveSymbolContextForAddress(symbol_address, lldb.eSymbolContextFunction) - self.assertEqual(symbol_name, sc_by_address.GetFunction().GetName()) + sc_by_address = module.ResolveSymbolContextForAddress( + symbol_address, lldb.eSymbolContextFunction) + self.assertEqual(symbol_name, + sc_by_address.GetFunction().GetName()) + + @add_test_categories(['pyapi']) + def test_ranges_in_multiple_compile_unit(self): + """This test verifies that we correctly handle the case when multiple + compile unit contains DW_AT_ranges and DW_AT_ranges_base attributes.""" + self.build() + exe = os.path.join(os.getcwd(), "a.out") + + target = self.dbg.CreateTarget(exe) + self.assertTrue(target, VALID_TARGET) + + source1 = "file1.cpp" + line1 = line_number(source1, '// Break1') + breakpoint1 = target.BreakpointCreateByLocation(source1, line1) + self.assertIsNotNone(breakpoint1) + self.assertTrue(breakpoint1.IsValid()) + + source2 = "file2.cpp" + line2 = line_number(source2, '// Break2') + breakpoint2 = target.BreakpointCreateByLocation(source2, line2) + self.assertIsNotNone(breakpoint2) + self.assertTrue(breakpoint2.IsValid()) + + process = target.LaunchSimple(None, None, self.get_process_working_directory()) + self.assertIsNotNone(process, PROCESS_IS_VALID) + + threads = lldbutil.get_threads_stopped_at_breakpoint( + process, breakpoint2) + self.assertEqual(len(threads), 1) + frame = threads[0].GetFrameAtIndex(0) + value = frame.FindVariable("x") + self.assertTrue(value.IsValid()) + + process.Continue() + + threads = lldbutil.get_threads_stopped_at_breakpoint( + process, breakpoint1) + self.assertEqual(len(threads), 1) + frame = threads[0].GetFrameAtIndex(0) + value = frame.FindVariable("x") + self.assertTrue(value.IsValid()) + + process.Continue() diff --git a/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/decls.h b/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/decls.h index 0cb685622cd03..7c80458420629 100644 --- a/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/decls.h +++ b/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/decls.h @@ -1,11 +1,11 @@ -struct struct1 -{ - static void - f(); +struct struct1 { + ~struct1(); + static void f(); }; -struct struct2 -{ - static void - f(); +struct struct2 { + ~struct2(); + static void f(); }; + +int g(); diff --git a/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/file1.cpp b/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/file1.cpp index 16c8ce7d94887..327d0fb7718fd 100644 --- a/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/file1.cpp +++ b/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/file1.cpp @@ -1,13 +1,21 @@ #include "decls.h" -void -struct1::f() -{ +int g() { + return 1; } -int main() -{ - struct1::f(); - struct2::f(); - return 0; +struct1::~struct1() { + int x = g(); // Break1 +} + +void struct1::f() {} + +int main() { + struct1::f(); + struct2::f(); + + struct1 s1; + struct2 s2; + + return 0; } diff --git a/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/file2.cpp b/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/file2.cpp index 3bd1aaf95a733..109e01572ed2c 100644 --- a/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/file2.cpp +++ b/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/file2.cpp @@ -1,6 +1,7 @@ #include "decls.h" -void -struct2::f() -{ +struct2::~struct2() { + int x = g(); // Break2 } + +void struct2::f() {} |