[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