-
Notifications
You must be signed in to change notification settings - Fork 285
Description
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.