[lldb-dev] Various strange errors while debugging PostgreSQL
Greg Clayton via lldb-dev
lldb-dev at lists.llvm.org
Thu Mar 24 10:05:57 PDT 2016
> On Mar 24, 2016, at 5:18 AM, Aleksander Alekseev via lldb-dev <lldb-dev at lists.llvm.org> wrote:
>
> Hello
>
> Here is what I do. In one terminal I connect to PostgreSQL using psql
> command. In another terminal I determine pid of a new PostgreSQL
> process (backend process that handles a new connection) and run:
>
> ```
> lldb-3.7.1 -p (pid)
> ```
>
> Then:
>
> ```
> b heap_open
> c
> ```
>
> In first terminal:
>
> ```
> create temporary table tt1(x int);
> ```
>
> In second terminal:
>
> ```
> 1290 {
> 1291 Relation r;
> 1292
> -> 1293 r = relation_open(relationId, lockmode);
> 1294
> 1295 if (r->rd_rel->relkind == RELKIND_INDEX)
> 1296 ereport(ERROR,
> (lldb) p r
> (Relation) $0 = 0x00000002018a70c8
> (lldb) p r->rd_rel
> error: Couldn't apply expression side effects : Couldn't dematerialize
> a result variable: couldn't read its memory
> ```
You might not realize that the value in "r" is random junk. You haven't stepped over the line that actually assigns a value to "r" yet. So yes, your expression will probably fail. Your expression turns out to be really easy: take a pointer and deref a value, so this is emulated by evaluating llvm IR and when we try to deref "r + offset of rd_rel", it fails.
> This is a first issue. The second issue is:
>
> ```
> (lldb) process save-core /tmp/1.core
> error: Failed to save core file for process: no ObjectFile plugins were
> able to save a core for this process
> ```
What architecture is this? I believe people added code to save core files for ELF based processes, but not all architectures are supported. Looking in:
lldb/source/Plugins/Process/elf-core
I see the following files:
CMakeLists.txt
ProcessElfCore.cpp
ProcessElfCore.h
RegisterContextPOSIXCore_arm.cpp
RegisterContextPOSIXCore_arm.h
RegisterContextPOSIXCore_arm64.cpp
RegisterContextPOSIXCore_arm64.h
RegisterContextPOSIXCore_mips64.cpp
RegisterContextPOSIXCore_mips64.h
RegisterContextPOSIXCore_powerpc.cpp
RegisterContextPOSIXCore_powerpc.h
RegisterContextPOSIXCore_x86_64.cpp
RegisterContextPOSIXCore_x86_64.h
ThreadElfCore.cpp
ThreadElfCore.h
So I am guessing these are the only architectures that are supported. I am guessing you might be on an i386 system?
> LLDB was compiled manually from RELEASE_371/final tag using clang 3.6:
>
> ```
> cmake ../llvm -G Ninja -DLLDB_DISABLE_CURSES:BOOL=TRUE \
> -DCMAKE_C_COMPILER=/usr/bin/clang-3.6 \
> -DCMAKE_CXX_COMPILER=/usr/bin/clang++-3.6 \
> -DCMAKE_BUILD_TYPE=Release
> ninja -j2
> sudo ninja install
> ```
>
> It's Ubuntu Linux 14.04 LTS:
>
> ```
> $ uname -a
>
> Linux pgsql-dev-ubuntu 3.13.0-83-generic #127-Ubuntu SMP Fri Mar 11
> 00:25:37 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
> ```
>
> Same issues with lldb-3.6 installed using apt-get.
>
> `process save-core` doesn't work in lldb-3.8 compiled using ports on
> FreeBSD 10.2 as well. Unfortunately I can't tell if first bug reproduces
> on FreeBSD because of another bug I reported previously:
>
> https://llvm.org/bugs/show_bug.cgi?id=26924#c3
>
> Anyway are these some sort of well-know issues that could be bypassed
> somehow or brand new bugs? I can also provide any other debug
> information you might need.
>
> --
> Best regards,
> Aleksander Alekseev
> http://eax.me/
> _______________________________________________
> lldb-dev mailing list
> lldb-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev
More information about the lldb-dev
mailing list