-
Notifications
You must be signed in to change notification settings - Fork 15.5k
Closed
Labels
Description
I am running on Arch Linux with LLDB 21.1.6
Take this C code:
#include <stdio.h>
typedef struct Vec3
{
union
{
struct
{
float x;
float y;
float z;
};
float coords[3];
};
} Vec3;
int main()
{
Vec3 vec = { 4.5f, 5.5f, 6.5f };
printf("%f, %f, %f\n", vec.x, vec.y, vec.z);
return 0;
}Compile with gcc main.c -O0 -g3 -gdwarf-4 and run lldb ./a.out, then place a breakpoint on the printf call and you will get this output:
> lldb a.out
(lldb) target create "a.out"
Current executable set to '/home/madman10k/Music/a.out' (x86_64).
(lldb) breakpoint set -l 21
Breakpoint 1: where = a.out`main + 135 at main.c:21:9, address = 0x00000000000011d0
(lldb) run
Process 73400 launched: '/home/madman10k/Music/a.out' (x86_64)
4.500000, 5.500000, 6.500000
Process 73400 stopped
* thread #1, name = 'a.out', stop reason = breakpoint 1.1
frame #0: 0x00005555555551d0 a.out`main at main.c:21:9
18 {
19 Vec3 vec = { 4.5f, 5.5f, 6.5f };
20 printf("%f, %f, %f\n", vec.x, vec.y, vec.z);
-> 21 return 0;
22 }
(lldb) frame variable vec
error: a.out 0x000000b7: DW_TAG_member 'coords' refers to type 0x00000000000000c4 which extends beyond the bounds of 0x000000a9
(Vec3) vec = {
= {
= (x = 4.5, y = 5.5, z = 6.5)
coords = {}
}
}
Note how the coords array is seemingly empty. This is a value loading bug, not a printer error, since our application uses the LLDB API and gets an empty array too.
When I run this application with GDB I get the following:
(gdb) print vec
$1 = {{{x = 4.5, y = 5.5, z = 6.5}, coords = {4.5, 5.5, 6.5}}}
And if I compile with clang -O0 -g3 -gdwarf-4 and run with lldb:
(Vec3) vec = {
= {
= (x = 4.5, y = 5.5, z = 6.5)
coords = ([0] = 4.5, [1] = 5.5, [2] = 6.5)
}
}
And if I run the application compiled with clang with gdb:
(gdb) print vec
$1 = {{{x = 4.5, y = 5.5, z = 6.5}, coords = {4.5, 5.5, 6.5}}}
Metadata
Metadata
Assignees
Labels
Type
Projects
Status
Done