Files
clang-p2996/lldb/test/API/tools/lldb-dap/variables/main.cpp
John Harrison 40a361acf5 [lldb-dap] Updating VariableDescription to use GetDescription() as a fallback. (#77026)
When generating a `display_value` for a variable the current approach
calls `SBValue::GetValue()` and `SBValue::GetSummary()` to generate a
`display_value` for the `SBValue`. However, there are cases where both
of these return an empty string and the fallback is to print a pointer
and type name instead (e.g. `FooBarType @ 0x00321`).

For swift types, lldb includes a langauge runtime plugin that can
generate a description of the object but this is only used with
`SBValue::GetDescription()`.

For example:
```
$ lldb swift-binary
... stop at breakpoint ...
lldb> script
>>> event = lldb.frame.GetValueForVariablePath("event")
>>> print("Value", event.GetValue())
Value None
>>> print("Summary", event.GetSummary())
Summary None
>>> print("Description", event) # __str__ calls SBValue::GetDescription()
Description (main.Event) event = (name = "Greetings", time = 2024-01-04 23:38:06 UTC)
```

With this change, if GetValue and GetSummary return empty then we try
`SBValue::GetDescription()` as a fallback before using the previous
logic of printing `<type> @ <addr>`.
2024-01-12 17:12:30 -05:00

37 lines
798 B
C++

#define BUFFER_SIZE 16
struct PointType {
int x;
int y;
int buffer[BUFFER_SIZE];
};
#include <vector>
int g_global = 123;
static int s_global = 234;
int test_indexedVariables();
int main(int argc, char const *argv[]) {
static float s_local = 2.25;
PointType pt = {11, 22, {0}};
for (int i = 0; i < BUFFER_SIZE; ++i)
pt.buffer[i] = i;
int x = s_global - g_global - pt.y; // breakpoint 1
{
int x = 42;
{
int x = 72;
s_global = x; // breakpoint 2
}
}
return test_indexedVariables(); // breakpoint 3
}
int test_indexedVariables() {
int small_array[5] = {1, 2, 3, 4, 5};
int large_array[200];
std::vector<int> small_vector;
std::vector<int> large_vector;
small_vector.assign(5, 0);
large_vector.assign(200, 0);
return 0; // breakpoint 4
}