Thanks to visit codestin.com
Credit goes to github.com

Skip to content

[BUG] LLDB's bundled ncurses6 can't read terminal database on Linux/Darwin #1565

@rprichard

Description

@rprichard

macOS

When I start LLDB on macOS (11.5.1 "Big Sur"), it fails with a terminal error:

$ export DYLD_LIBRARY_PATH=$HOME/android-ndk-r23/toolchains/llvm/prebuilt/darwin-x86_64/python3/lib 
$ ./android-ndk-r23/toolchains/llvm/prebuilt/darwin-x86_64/bin/lldb
terminals database is inaccessible
$

I don't think I'm supposed to need DYLD_LIBRARY_PATH, but if I remove it, I get a different failure (#1566).

I don't know if this affects Android Studio, but hopefully not? The current version of Android Studio I have installed on macOS doesn't have a bundled ncurses. IIRC we recently started bundling ncurses with Studio's LLDB. Instead, the binaries I have use the system ncurses:

/Applications/Android Studio.app/Contents/bin/lldb/lib64$ otool -L liblldb.11.0.4git.dylib 
liblldb.11.0.4git.dylib:
	@rpath/liblldb.11.0.4git.dylib (compatibility version 0.0.0, current version 11.0.4)
	@rpath/libpython3.8.dylib (compatibility version 3.8.0, current version 3.8.0)
	/usr/lib/libncurses.5.4.dylib (compatibility version 5.4.0, current version 5.4.0)
	/usr/lib/libform.5.4.dylib (compatibility version 5.4.0, current version 5.4.0)
	/usr/lib/libpanel.5.4.dylib (compatibility version 5.4.0, current version 5.4.0)
	@rpath/libxml2.2.9.10.dylib (compatibility version 0.0.0, current version 2.9.10)
	@rpath/libedit.0.dylib (compatibility version 1.0.0, current version 1.61.0)
        ...

(Studio's lib64 directory has a libedit.0.dylib and a libpython3.8.dylib in it.)

Linux

When I start LLDB on Linux, I see this prompt.

$ cd prebuilts/clang/host/linux-x86/clang-r428724
$ LD_LIBRARY_PATH=$PWD/python3/lib ./bin/lldb
Cannot read termcap database;
using dumb terminal settings.
(lldb) 

(I tested with CentOS 8 and Ubuntu 20.04, in addition to gLinux.)

termcap is obsolete in favor of terminfo, but I don't think that's the issue. I think we're using the AOSP libedit (which seems to be a tarball from Apple? corrected below), which depends on the ncurses we're shipping.

I assume the error is coming from here:
https://android.googlesource.com/platform/external/libedit/+/refs/heads/llvm-r416183/src/terminal.c#869

If I delete the DSOs, the error goes away:

$ rm lib64/libncurses.so.6 lib64/libpanel.so.6 lib64/libform.so.6 
$ LD_LIBRARY_PATH=$PWD/python3/lib ./bin/lldb
(lldb) 

Line editing largely works anyway. I noticed that long-line editing was broken. This line is suspicious:
https://android.googlesource.com/platform/external/libedit/+/refs/heads/llvm-r416183/src/terminal.c#875

Example:

  • Resize terminal to 120 columns.

  • Type Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean vestibulum purus sed vestibulum euismod. Sed est lacus, iaculis a diam eget, accumsan blandit arcu. and press Enter.

  • Press Up, Down, Up, Down, etc.

  • The output looks like:

    $ LD_LIBRARY_PATH=$PWD/python3/lib ./bin/lldb
    Cannot read termcap database;
    using dumb terminal settings.
    (lldb) Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean vestibulum purus sed vestibulum euismod. Sed est 
    lacus, iaculis a diam eget, accumsan blandit arcu.
    error: 'Lorem' is not a valid command.
    (lldb) Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean vestibulum purus sed vestibulum euismod. Sed est
    (lldb)                                                                                                                 
    (lldb) Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean vestibulum purus sed vestibulum euismod. Sed est 
    (lldb)                                                                                                                 
    (lldb) Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean vestibulum purus sed vestibulum euismod. Sed est 
    (lldb)                                                                                                                 
    (lldb) Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean vestibulum purus sed vestibulum euismod. Sed est 
    (lldb)                                                                                                                 
    (lldb) Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean vestibulum purus sed vestibulum euismod. Sed est 
    (lldb)                                                                                                                 
    (lldb) Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean vestibulum purus sed vestibulum euismod. Sed est 
    (lldb)                                                                                                                 
    (lldb) Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean vestibulum purus sed vestibulum euismod. Sed est 
    lacus, iaculis a diam eget, accumsan blandit arcu.
    

This example works correctly if the DSOs are deleted.

Metadata

Metadata

Labels

Type

No type

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions