[LLDB] Switch to using DIL as default implementation for 'frame var'. (#147887)
(cherry picked from commit f5c676d6d95dc63b8dcb43dd2e4dfc913a9c5a50)
This commit is contained in:
parent
bbc8346e6b
commit
317403d705
@ -5,8 +5,8 @@ let Definition = "target_experimental" in {
|
||||
Global, DefaultTrue,
|
||||
Desc<"If true, inject local variables explicitly into the expression text. This will fix symbol resolution when there are name collisions between ivars and local variables. But it can make expressions run much more slowly.">;
|
||||
def UseDIL : Property<"use-DIL", "Boolean">,
|
||||
Global, DefaultFalse,
|
||||
Desc<"If true, use the alternative DIL implementation for frame variable evaluation.">;
|
||||
Global, DefaultTrue,
|
||||
Desc<"If true, use the DIL implementation for frame variable evaluation.">;
|
||||
}
|
||||
|
||||
let Definition = "target" in {
|
||||
|
@ -303,7 +303,7 @@ Interpreter::Visit(const MemberOfNode *node) {
|
||||
}
|
||||
}
|
||||
|
||||
if (field_obj && field_obj->GetName() == node->GetFieldName()) {
|
||||
if (field_obj) {
|
||||
if (m_use_dynamic != lldb::eNoDynamicValues) {
|
||||
lldb::ValueObjectSP dynamic_val_sp =
|
||||
field_obj->GetDynamicValue(m_use_dynamic);
|
||||
|
@ -29,3 +29,17 @@ class TestFrameVarDILQualifiedId(TestBase):
|
||||
self.expect_var_path("ns::i", value="1")
|
||||
self.expect_var_path("::ns::ns::i", value="2")
|
||||
self.expect_var_path("ns::ns::i", value="2")
|
||||
|
||||
self.expect_var_path("foo", value="1")
|
||||
self.expect_var_path("::(anonymous namespace)::foo", value="13")
|
||||
self.expect_var_path("(anonymous namespace)::foo", value="13")
|
||||
self.expect_var_path("ns1::(anonymous namespace)::foo", value="5")
|
||||
self.expect_var_path(
|
||||
"(anonymous namespace)::ns2::(anonymous namespace)::foo",
|
||||
value="7",
|
||||
)
|
||||
self.expect_var_path("::ns1::(anonymous namespace)::foo", value="5")
|
||||
self.expect_var_path(
|
||||
"::(anonymous namespace)::ns2::(anonymous namespace)::foo",
|
||||
value="7",
|
||||
)
|
||||
|
@ -10,7 +10,26 @@ int i = 2;
|
||||
|
||||
} // namespace ns
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
|
||||
return 0; // Set a breakpoint here
|
||||
namespace {
|
||||
int foo = 13;
|
||||
}
|
||||
|
||||
namespace ns1 {
|
||||
namespace {
|
||||
int foo = 5;
|
||||
}
|
||||
} // namespace ns1
|
||||
|
||||
namespace {
|
||||
namespace ns2 {
|
||||
namespace {
|
||||
int foo = 7;
|
||||
}
|
||||
} // namespace ns2
|
||||
} // namespace
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
int foo = 1;
|
||||
|
||||
return foo + ::foo + ns1::foo + ns2::foo; // Set a breakpoint here
|
||||
}
|
||||
|
@ -131,7 +131,7 @@ class TestDAP_evaluate(lldbdap_testcase.DAPTestCaseBase):
|
||||
self.assertEvaluateFailure("a_function(1)")
|
||||
self.assertEvaluateFailure("var2 + struct1.foo")
|
||||
self.assertEvaluateFailure("foo_func")
|
||||
self.assertEvaluateFailure("foo_var")
|
||||
self.assertEvaluate("foo_var", "44")
|
||||
|
||||
# Expressions at breakpoint 2, which is an anonymous block
|
||||
self.continue_to_breakpoint(breakpoint_2)
|
||||
@ -169,7 +169,7 @@ class TestDAP_evaluate(lldbdap_testcase.DAPTestCaseBase):
|
||||
self.assertEvaluateFailure("a_function(1)")
|
||||
self.assertEvaluateFailure("var2 + struct1.foo")
|
||||
self.assertEvaluateFailure("foo_func")
|
||||
self.assertEvaluateFailure("foo_var")
|
||||
self.assertEvaluate("foo_var", "44")
|
||||
|
||||
# Expressions at breakpoint 3, which is inside a_function
|
||||
self.continue_to_breakpoint(breakpoint_3)
|
||||
@ -195,7 +195,7 @@ class TestDAP_evaluate(lldbdap_testcase.DAPTestCaseBase):
|
||||
self.assertEvaluateFailure("a_function(1)")
|
||||
self.assertEvaluateFailure("list + 1")
|
||||
self.assertEvaluateFailure("foo_func")
|
||||
self.assertEvaluateFailure("foo_var")
|
||||
self.assertEvaluate("foo_var", "44")
|
||||
|
||||
# Now we check that values are updated after stepping
|
||||
self.continue_to_breakpoint(breakpoint_4)
|
||||
|
@ -15,7 +15,7 @@
|
||||
# RUN: %clang_host -fmodules -Xclang -fmodules-cache-path=%t/cache -I%t -g -gmodules %t/b.m -o %t/b.o -c
|
||||
# RUN: %clang_host %t/a.o %t/b.o -o %t/a.out
|
||||
# RUN: rm -rf %t/cache
|
||||
# RUN: %lldb %t/a.out -o "b main" -o run -o "p a" -o "p b" -o q 2>&1 | FileCheck %s
|
||||
# RUN: %lldb %t/a.out -o "b main" -o run -o "expr a" -o "expr b" -o q 2>&1 | FileCheck %s
|
||||
# CHECK: {{[ab]}}.o{{.*}}/cache/{{.*}}/C-{{.*}}.pcm' does not exist
|
||||
# CHECK-NOT: /cache/{{.*}}/C-{.*}.pcm' does not exist
|
||||
# CHECK: {{[ab]}}.o{{.*}}/cache/{{.*}}/C-{{.*}}.pcm' does not exist
|
||||
|
@ -313,6 +313,11 @@ Changes to LLDB
|
||||
stop reason = SIGSEGV: sent by tkill system call (sender pid=649752, uid=2667987)
|
||||
```
|
||||
* ELF Cores can now have their siginfo structures inspected using `thread siginfo`.
|
||||
* LLDB now uses
|
||||
[DIL](https://discourse.llvm.org/t/rfc-data-inspection-language/69893) as the
|
||||
default implementation for 'frame variable'. This should not change the
|
||||
behavior of 'frame variable' at all, at this time. To revert to using the
|
||||
old implementation use: `settings set target.experimental.use-DIL false`.
|
||||
* Disassembly of unknown instructions now produces `<unknown>` instead of
|
||||
nothing at all
|
||||
* Changed the format of opcode bytes to match llvm-objdump when disassembling
|
||||
@ -320,6 +325,7 @@ Changes to LLDB
|
||||
* LLDB added native support for the Model Context Protocol (MCP). An MCP
|
||||
server can be started with the `protocol-server start MCP` command.
|
||||
|
||||
|
||||
### Changes to lldb-dap
|
||||
|
||||
* Breakpoints can now be set for specific columns within a line.
|
||||
|
Loading…
x
Reference in New Issue
Block a user