1""" 2Test lldb-vscode setBreakpoints request 3""" 4 5from __future__ import print_function 6 7import unittest2 8import vscode 9from lldbsuite.test.decorators import * 10from lldbsuite.test.lldbtest import * 11from lldbsuite.test import lldbutil 12import lldbvscode_testcase 13 14 15class TestVSCode_module(lldbvscode_testcase.VSCodeTestCaseBase): 16 17 mydir = TestBase.compute_mydir(__file__) 18 19 20 @skipIfWindows 21 @skipUnlessDarwin 22 @skipIfRemote 23 def test_modules_event(self): 24 program_basename = "a.out.stripped" 25 program= self.getBuildArtifact(program_basename) 26 self.build_and_launch(program) 27 functions = ['foo'] 28 breakpoint_ids = self.set_function_breakpoints(functions) 29 self.assertEquals(len(breakpoint_ids), len(functions), 30 'expect one breakpoint') 31 self.continue_to_breakpoints(breakpoint_ids) 32 active_modules = self.vscode.get_active_modules() 33 self.assertIn(program_basename, active_modules, '%s module is in active modules' % (program_basename)) 34 program_module = active_modules[program_basename] 35 self.assertIn('name', program_module, 'make sure name is in module') 36 self.assertEqual(program_basename, program_module['name']) 37 self.assertIn('path', program_module, 'make sure path is in module') 38 self.assertEqual(program, program_module['path']) 39 self.assertTrue('symbolFilePath' not in program_module, 'Make sure a.out.stripped has no debug info') 40 self.assertEqual('Symbols not found.', program_module['symbolStatus']) 41 symbol_path = self.getBuildArtifact("a.out") 42 self.vscode.request_evaluate('`%s' % ('target symbols add -s "%s" "%s"' % (program, symbol_path))) 43 active_modules = self.vscode.get_active_modules() 44 program_module = active_modules[program_basename] 45 self.assertEqual(program_basename, program_module['name']) 46 self.assertEqual(program, program_module['path']) 47 self.assertEqual('Symbols loaded.', program_module['symbolStatus']) 48 self.assertIn('symbolFilePath', program_module) 49 self.assertEqual(symbol_path, program_module['symbolFilePath']) 50 self.assertIn('addressRange', program_module) 51 52 @skipIfWindows 53 @skipUnlessDarwin 54 @skipIfRemote 55 def test_compile_units(self): 56 program= self.getBuildArtifact("a.out") 57 self.build_and_launch(program) 58 source = "main.cpp" 59 main_source_path = self.getSourcePath(source) 60 breakpoint1_line = line_number(source, '// breakpoint 1') 61 lines = [breakpoint1_line] 62 breakpoint_ids = self.set_source_breakpoints(source, lines) 63 self.continue_to_breakpoints(breakpoint_ids) 64 moduleId = self.vscode.get_active_modules()['a.out']['id'] 65 response = self.vscode.request_getCompileUnits(moduleId) 66 print(response['body']) 67 self.assertTrue(response['body']) 68 self.assertTrue(len(response['body']['compileUnits']) == 1, 69 'Only one source file should exist') 70 self.assertTrue(response['body']['compileUnits'][0]['compileUnitPath'] == main_source_path, 71 'Real path to main.cpp matches') 72 73