LLDB doesn't correlate my frame with source code.
Posted: Fri Mar 08, 2024 11:30 pm
Hello, I have an corp dump of a crashed program in my OS. (I'm forcing the crash, so I know what it is. I want help debugging getting lldb to work.)
I load the core dump into lldb via:
No errors.
When I type "bt", it prints just the raw addresses, no code references or symbols:
But the symbols have loaded, because if I type "image lookup -va $pc" I get the exact line of code and the parameters to the C++ method:
"frame info" returns very little detail:
"frame variable" returns nothing.
If I call "frame select" (e.g. "frame select 1") I get this output:
What does 0xffffffffffffffff mean?
My registers with "register read -all" look sane:
So.. the symbols are loaded and I can query them via "image lookup", but for some reason lldb doesn't think my frame addresses correlate with these symbols?
This is my code that creates and dumps the core-dump: https://github.com/AndrewAPrice/Percept ... re_dump.cc
My binaries are elf-x86_64, and the program is linked with lld (llvm's linker) with the following arguments: "-g -nostdlib --gc-sections -z max-page-size=1". I've tried removing "--gc-sections" and it hasn't helped.
Does anybody have advice on how I can debug this?
I load the core dump into lldb via:
Code: Select all
target create --core "temp/CoreDumps/Dump1.dmp" "temp/Perception-debug/Applications/Storage Manager/Storage Manager.app"
When I type "bt", it prints just the raw addresses, no code references or symbols:
Code: Select all
* thread #1, name = 'Storage Manager', stop reason = signal SIGSTOP
* frame #0: 0x00000000002342fa
frame #1: 0x0000000000235b4f
frame #2: 0x0000000000234cfb
frame #3: 0x0000000000291d53
frame #4: 0x0000000000290122
frame #5: 0x000000000028feaf
frame #6: 0x000000000028ce22
frame #7: 0x0000000000289396
frame #8: 0x000000000000a360
Code: Select all
Address: Storage Manager.app[0x00000000002342fa] (Storage Manager.app.PT_LOAD[1]..text + 14506)
Summary: Storage Manager.app`MemoryMappedFile::MemoryMappedFile(std::_LIBCPP_ABI_NAMESPACE::unique_ptr<File, std::_LIBCPP_ABI_NAMESPACE::default_delete<File>>, unsigned long, unsigned long, unsigned long) + 154 at memory_mapped_file.cc:58:12
Module: file = "/Users/andrewaprice/Documents/GitHub/Perception/Build/temp/Perception-debug/Applications/Storage Manager/Storage Manager.app", arch = "x86_64"
CompileUnit: id = {0x00000003}, file = "/Users/andrewaprice/Documents/GitHub/Perception/Applications/Storage Manager/source/memory_mapped_file.cc", language = "c++14"
Function: id = {0x00031fe9}, name = "MemoryMappedFile::MemoryMappedFile(std::_LIBCPP_ABI_NAMESPACE::unique_ptr<File, std::_LIBCPP_ABI_NAMESPACE::default_delete<File>>, unsigned long, unsigned long, unsigned long)", mangled = "_ZN16MemoryMappedFileC2ENSt21_LIBCPP_ABI_NAMESPACE10unique_ptrI4FileNS0_14default_deleteIS2_EEEEmmm", range = [0x0000000000234260-0x000000000023445b)
FuncType: id = {0x00031fe9}, byte-size = 0, decl = memory_mapped_file.h:24, compiler_type = "void (class std::unique_ptr<class File>, size_t, size_t, perception::ProcessId)"
Blocks: id = {0x00031fe9}, range = [0x00234260-0x0023445b)
id = {0x0003211b}, ranges = [0x002342f3-0x002343ea)[0x002343fe-0x0023441e)
LineEntry: [0x00000000002342f3-0x0000000000234300): /Users/andrewaprice/Documents/GitHub/Perception/Applications/Storage Manager/source/memory_mapped_file.cc:58:12
Symbol: id = {0x00000b9c}, range = [0x0000000000234260-0x000000000023445b), name="MemoryMappedFile::MemoryMappedFile(std::_LIBCPP_ABI_NAMESPACE::unique_ptr<File, std::_LIBCPP_ABI_NAMESPACE::default_delete<File>>, unsigned long, unsigned long, unsigned long)", mangled="_ZN16MemoryMappedFileC2ENSt21_LIBCPP_ABI_NAMESPACE10unique_ptrI4FileNS0_14default_deleteIS2_EEEEmmm"
Variable: id = {0x0003211e}, name = "grant_request", type = "GrantStorageDevicePermissionToAllocateSharedMemoryPagesRequest", valid ranges = <block>, location = DW_OP_fbreg -160, decl = memory_mapped_file.cc:71
Variable: id = {0x0003201e}, name = "this", type = "MemoryMappedFile *", valid ranges = <block>, location = [0x0000000000234285, 0x00000000002343ef) -> DW_OP_reg3 RBX, decl =
Variable: id = {0x00032026}, name = "file", type = "unique_ptr<File, std::_LIBCPP_ABI_NAMESPACE::default_delete<File> >", valid ranges = <block>, location = [0x0000000000234285, 0x00000000002343f3) -> DW_OP_breg13 R13+0, decl = memory_mapped_file.cc:46
Variable: id = {0x00032031}, name = "length_of_file", type = "size_t", valid ranges = <block>, location = [0x0000000000234285, 0x000000000023433d) -> DW_OP_reg15 R15, decl = memory_mapped_file.cc:47
Variable: id = {0x0003203c}, name = "optimal_operation_size", type = "size_t", valid ranges = <block>, location = [0x0000000000234285, 0x0000000000234316) -> DW_OP_reg12 R12, decl = memory_mapped_file.cc:48
Variable: id = {0x00032047}, name = "allowed_process", type = "perception::ProcessId", valid ranges = <block>, location = [0x00000000002342f3, 0x000000000023445b) -> DW_OP_entry_value(DW_OP_reg8 R8), DW_OP_stack_value, decl = memory_mapped_file.cc:49
Code: Select all
frame #0: 0x00000000002342fa
If I call "frame select" (e.g. "frame select 1") I get this output:
Code: Select all
frame #1: 0x0000000000235b4f
error: 0xffffffffffffffff can't be resolved
My registers with "register read -all" look sane:
Code: Select all
General Purpose Registers:
rax = 0x000000000000000a
rbx = 0x0000000000025430
rcx = 0x000000000028cff6
rdx = 0x0000000000000000
rdi = 0x0000000000000020
rsi = 0x0000000000656c69
rbp = 0x0000000000013bb0
rsp = 0x0000000000013b10
r8 = 0x0000000000000000
r9 = 0x0000000000000000
r10 = 0x0000000000000000
r11 = 0x0000000000200246
r12 = 0x0000000000200000
r13 = 0x0000000000013bd0
r14 = 0x0000000000025458
r15 = 0x0000000000b19b78
rip = 0x00000000002342fa
rflags = 0x0000000000200246
cs = 0x0000000000000023
fs = 0x0000000000000010
gs = 0x0000000000000010
ss = 0x000000000000001b
fs_base = 0x0000000000000000
gs_base = 0x0000000000000000
ds = 0x000000000000001b
es = 0x000000000000001b
eax = 0x0000000a
ebx = 0x00025430
ecx = 0x0028cff6
edx = 0x00000000
edi = 0x00000020
esi = 0x00656c69
ebp = 0x00013bb0
esp = 0x00013b10
r8d = 0x00000000
r9d = 0x00000000
r10d = 0x00000000
r11d = 0x00200246
r12d = 0x00200000
r13d = 0x00013bd0
r14d = 0x00025458
r15d = 0x00b19b78
ax = 0x000a
bx = 0x5430
cx = 0xcff6
dx = 0x0000
di = 0x0020
si = 0x6c69
bp = 0x3bb0
sp = 0x3b10
r8w = 0x0000
r9w = 0x0000
r10w = 0x0000
r11w = 0x0246
r12w = 0x0000
r13w = 0x3bd0
r14w = 0x5458
r15w = 0x9b78
ah = 0x00
bh = 0x54
ch = 0xcf
dh = 0x00
al = 0x0a
bl = 0x30
cl = 0xf6
dl = 0x00
dil = 0x20
sil = 0x69
bpl = 0xb0
spl = 0x10
r8l = 0x00
r9l = 0x00
r10l = 0x00
r11l = 0x46
r12l = 0x00
r13l = 0xd0
r14l = 0x58
r15l = 0x78
Floating Point Registers:
fctrl = 0x0000
fstat = 0x0000
ftag = 0x0000
fop = 0x0000
fiseg = 0x00000000
fioff = 0x00000000
fip = 0x0000000000000000
foseg = 0x00000000
fooff = 0x00000000
fdp = 0x0000000000000000
mxcsr = 0x00000000
mxcsrmask = 0x0000ffff
st0 = {0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00}
st1 = {0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00}
st2 = {0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00}
st3 = {0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00}
st4 = {0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00}
st5 = {0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00}
st6 = {0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00}
st7 = {0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00}
mm0 = 0x0000000000000000
mm1 = 0x0000000000000000
mm2 = 0x0000000000000000
mm3 = 0x0000000000000000
mm4 = 0x0000000000000000
mm5 = 0x0000000000000000
mm6 = 0x0000000000000000
mm7 = 0x0000000000000000
xmm0 = {0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00}
xmm1 = {0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00}
xmm2 = {0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00}
xmm3 = {0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00}
xmm4 = {0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00}
xmm5 = {0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00}
xmm6 = {0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00}
xmm7 = {0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00}
xmm8 = {0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00}
xmm9 = {0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00}
xmm10 = {0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00}
xmm11 = {0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00}
xmm12 = {0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00}
xmm13 = {0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00}
xmm14 = {0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00}
xmm15 = {0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00}
Advanced Vector Extensions:
16 registers were unavailable.
This is my code that creates and dumps the core-dump: https://github.com/AndrewAPrice/Percept ... re_dump.cc
My binaries are elf-x86_64, and the program is linked with lld (llvm's linker) with the following arguments: "-g -nostdlib --gc-sections -z max-page-size=1". I've tried removing "--gc-sections" and it hasn't helped.
Does anybody have advice on how I can debug this?