diff --git a/lldb/packages/Python/lldbsuite/test/tools/lldb-vscode/vscode.py b/lldb/packages/Python/lldbsuite/test/tools/lldb-vscode/vscode.py --- a/lldb/packages/Python/lldbsuite/test/tools/lldb-vscode/vscode.py +++ b/lldb/packages/Python/lldbsuite/test/tools/lldb-vscode/vscode.py @@ -756,16 +756,6 @@ } return self.send_recv(command_dict) - def request_getCompileUnits(self, moduleId): - args_dict = {'moduleId': moduleId} - command_dict = { - 'command': 'getCompileUnits', - 'type': 'request', - 'arguments': args_dict - } - response = self.send_recv(command_dict) - return response - def request_stackTrace(self, threadId=None, startFrame=None, levels=None, dump=False): if threadId is None: diff --git a/lldb/test/API/tools/lldb-vscode/module/Makefile b/lldb/test/API/tools/lldb-vscode/module/Makefile --- a/lldb/test/API/tools/lldb-vscode/module/Makefile +++ b/lldb/test/API/tools/lldb-vscode/module/Makefile @@ -1,3 +1,10 @@ CXX_SOURCES := main.cpp +all: a.out.stripped include Makefile.rules + +a.out.stripped: a.out.dSYM + strip -o a.out.stripped a.out +ifneq "$(CODESIGN)" "" + $(CODESIGN) -fs - a.out.stripped +endif \ No newline at end of file diff --git a/lldb/test/API/tools/lldb-vscode/module/TestVSCode_module.py b/lldb/test/API/tools/lldb-vscode/module/TestVSCode_module.py --- a/lldb/test/API/tools/lldb-vscode/module/TestVSCode_module.py +++ b/lldb/test/API/tools/lldb-vscode/module/TestVSCode_module.py @@ -17,34 +17,29 @@ mydir = TestBase.compute_mydir(__file__) def test_modules_event(self): - program= self.getBuildArtifact("a.out") - self.build_and_launch(program) - source = "main.cpp" - breakpoint1_line = line_number(source, '// breakpoint 1') - lines = [breakpoint1_line] - breakpoint_ids = self.set_source_breakpoints(source, lines) - self.continue_to_breakpoints(breakpoint_ids) - self.assertTrue('a.out' in self.vscode.get_active_modules(), - 'Module: a.out is loaded') - self.assertTrue('symbolFilePath' in self.vscode.get_active_modules()['a.out'], - 'Symbol exists') - - def test_compile_units(self): - program= self.getBuildArtifact("a.out") + program_basename = "a.out.stripped" + program= self.getBuildArtifact(program_basename) self.build_and_launch(program) source = "main.cpp" main_source_path = self.getSourcePath(source) - breakpoint1_line = line_number(source, '// breakpoint 1') - lines = [breakpoint1_line] - breakpoint_ids = self.set_source_breakpoints(source, lines) + functions = ['main'] + breakpoint_ids = self.set_function_breakpoints(functions) + self.assertEquals(len(breakpoint_ids), len(functions), + 'expect one breakpoint') self.continue_to_breakpoints(breakpoint_ids) - moduleId = self.vscode.get_active_modules()['a.out']['id'] - response = self.vscode.request_getCompileUnits(moduleId) - print(response['body']) - self.assertTrue(response['body']) - self.assertTrue(len(response['body']['compileUnits']) == 1, - 'Only one source file should exist') - self.assertTrue(response['body']['compileUnits'][0]['compileUnitPath'] == main_source_path, - 'Real path to main.cpp matches') - - + active_modules = self.vscode.get_active_modules() + self.assertIn(program_basename, active_modules, '%s module is in active modules' % (program_basename)) + program_module = active_modules[program_basename] + self.assertIn('name', program_module, 'make sure name is in module') + self.assertEqual(program_basename, program_module['name']) + self.assertTrue('symbolFilePath' not in program_module, 'Make sure a.out.stripped has no debug info') + symbol_path = self.getBuildArtifact("a.out") + response = self.vscode.request_evaluate('`%s' % ('target symbols add -s "%s" "%s"' % (program, symbol_path))) + active_modules = self.vscode.get_active_modules() + program_module = active_modules[program_basename] + self.assertEqual(program_basename, program_module['name']) + self.assertEqual('Symbols loaded.', program_module['symbolStatus']) + self.assertIn('symbolFilePath', program_module) + self.assertEqual(symbol_path, program_module['symbolFilePath']) + self.assertIn('addressRange', program_module) + \ No newline at end of file diff --git a/lldb/test/API/tools/lldb-vscode/module/main.cpp b/lldb/test/API/tools/lldb-vscode/module/main.cpp --- a/lldb/test/API/tools/lldb-vscode/module/main.cpp +++ b/lldb/test/API/tools/lldb-vscode/module/main.cpp @@ -1,3 +1,4 @@ int main(int argc, char const *argv[]) { - return 0; // breakpoint 1 + int x = 12; // breakpoint 1 + return 0; } diff --git a/lldb/tools/lldb-vscode/JSONUtils.h b/lldb/tools/lldb-vscode/JSONUtils.h --- a/lldb/tools/lldb-vscode/JSONUtils.h +++ b/lldb/tools/lldb-vscode/JSONUtils.h @@ -441,8 +441,6 @@ llvm::json::Value CreateVariable(lldb::SBValue v, int64_t variablesReference, int64_t varID, bool format_hex); -llvm::json::Value CreateCompileUnit(lldb::SBCompileUnit unit); - } // namespace lldb_vscode #endif diff --git a/lldb/tools/lldb-vscode/JSONUtils.cpp b/lldb/tools/lldb-vscode/JSONUtils.cpp --- a/lldb/tools/lldb-vscode/JSONUtils.cpp +++ b/lldb/tools/lldb-vscode/JSONUtils.cpp @@ -342,25 +342,22 @@ char symbol_path_arr[PATH_MAX]; module.GetSymbolFileSpec().GetPath(symbol_path_arr, sizeof(symbol_path_arr)); std::string symbol_path(symbol_path_arr); - if (symbol_path != module_path) { - object.try_emplace("symbolFilePath", symbol_path); - } + object.try_emplace("symbolFilePath", symbol_path); } std::string loaded_addr = std::to_string( module.GetObjectFileHeaderAddress().GetLoadAddress(g_vsc.target)); object.try_emplace("addressRange", loaded_addr); - // uint32_t version_nums[5]; - // const uint32_t num_versions = module.GetVersion(version_nums, sizeof(version_nums)); - // std::string version_str = "dummy"; - // for (uint32_t i = 0; i < num_versions; ++i) { - // if (!version_str.empty()) { - // version_str += "."; - // } - // version_str += std::to_string(version_nums[i]); - // } - // if (!version_str.empty()) { - // object.try_emplace("version", version_str); - // } + std::string version_str; + uint32_t version_nums[3]; + uint32_t num_versions = module.GetVersion(version_nums, sizeof(version_nums)/sizeof(uint32_t)); + for (uint32_t i=0; i