From dcb94010eb8f0110c593a41e90b01365b45795e6 Mon Sep 17 00:00:00 2001 From: Nico Weber Date: Wed, 28 Sep 2022 20:07:14 -0400 Subject: [PATCH] Revert "When there are variable errors, display an error in VS Code's local variables view." This reverts commit 15f83ab77502cb2bd405a091cf419536e1d41381. Doesn't build, see https://reviews.llvm.org/D134333#3822313 --- .../lldb-vscode/variables/TestVSCode_variables.py | 53 +--------------------- lldb/tools/lldb-vscode/lldb-vscode.cpp | 25 ---------- 2 files changed, 1 insertion(+), 77 deletions(-) diff --git a/lldb/test/API/tools/lldb-vscode/variables/TestVSCode_variables.py b/lldb/test/API/tools/lldb-vscode/variables/TestVSCode_variables.py index 9b91955..e4cb103 100644 --- a/lldb/test/API/tools/lldb-vscode/variables/TestVSCode_variables.py +++ b/lldb/test/API/tools/lldb-vscode/variables/TestVSCode_variables.py @@ -7,7 +7,7 @@ from lldbsuite.test.decorators import * from lldbsuite.test.lldbtest import * from lldbsuite.test import lldbutil import lldbvscode_testcase -import os + def make_buffer_verify_dict(start_idx, count, offset=0): verify_dict = {} @@ -38,14 +38,6 @@ class TestVSCode_variables(lldbvscode_testcase.VSCodeTestCaseBase): ' "%s")') % ( key, actual_value, verify_value)) - if 'contains' in verify_dict: - verify = verify_dict['contains'] - for key in verify: - contains_array = verify[key] - actual_value = actual[key] - self.assertTrue(isinstance(contains_array, list)) - for verify_value in contains_array: - self.assertIn(verify_value, actual_value) if 'missing' in verify_dict: missing = verify_dict['missing'] for key in missing: @@ -516,46 +508,3 @@ class TestVSCode_variables(lldbvscode_testcase.VSCodeTestCaseBase): self.assertTrue(value.startswith('0x')) self.assertTrue('a.out`main + ' in value) self.assertTrue('at main.cpp:' in value) - - @no_debug_info_test - @skipUnlessDarwin - def test_darwin_dwarf_missing_obj(self): - ''' - Test that if we build a binary with DWARF in .o files and we remove - the .o file for main.cpp, that we get a variable named "" - whose value matches the appriopriate error. Errors when getting - variables are returned in the LLDB API when the user should be - notified of issues that can easily be solved by rebuilding or - changing compiler options and are designed to give better feedback - to the user. - ''' - self.build(debug_info="dwarf") - program = self.getBuildArtifact("a.out") - main_obj = self.getBuildArtifact("main.o") - self.assertTrue(os.path.exists(main_obj)) - # Delete the main.o file that contains the debug info so we force an - # error when we run to main and try to get variables - os.unlink(main_obj) - - self.create_debug_adaptor() - self.assertTrue(os.path.exists(program), 'executable must exist') - self.launch(program) - - 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) - - locals = self.vscode.get_local_variables() - - verify_locals = { - '': { - 'equals': {'type': 'const char *'}, - 'contains': { 'value': [ - 'debug map object file ', - 'main.o" containing debug info does not exist, debug info will not be loaded'] - } - }, - } - varref_dict = {} - self.verify_variables(verify_locals, locals, varref_dict) diff --git a/lldb/tools/lldb-vscode/lldb-vscode.cpp b/lldb/tools/lldb-vscode/lldb-vscode.cpp index eaeab79..22ff84f 100644 --- a/lldb/tools/lldb-vscode/lldb-vscode.cpp +++ b/lldb/tools/lldb-vscode/lldb-vscode.cpp @@ -2953,31 +2953,6 @@ void request_variables(const llvm::json::Object &request) { } num_children = top_scope->GetSize(); - if (num_children == 0 && variablesReference == VARREF_LOCALS) { - // Check for an error in the SBValueList that might explain why we don't - // have locals. If we have an error display it as the sole value in the - // the locals. - - // "error" owns the error string so we must keep it alive as long as we - // want to use the returns "const char *" - SBError error = top_scope->GetError(); - const char *var_err = error.GetCString(); - if (var_err) { - // Create a fake variable named "error" to explain why variables were - // not available. This new error will help let users know when there was - // a problem that kept variables from being available for display and - // allow users to fix this issue instead of seeing no variables. The - // errors are only set when there is a problem that the user could - // fix, so no error will show up when you have no debug info, only when - // we do have debug info and something that is fixable can be done. - llvm::json::Object object; - EmplaceSafeString(object, "name", ""); - EmplaceSafeString(object, "type", "const char *"); - EmplaceSafeString(object, "value", var_err); - object.try_emplace("variablesReference", (int64_t)0); - variables.emplace_back(std::move(object)); - } - } const int64_t end_idx = start_idx + ((count == 0) ? num_children : count); // We first find out which variable names are duplicated -- 2.7.4