Я попытался запустить gdb
на keepassxc
, но обнаружил незнакомую ошибку:
$ gdb /usr/bin/keepassxc
GNU gdb (Ubuntu 8.1-0ubuntu3) 8.1.0.20180409-git
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /usr/bin/keepassxc...Reading symbols from /usr/lib/debug/.build-id/80/9b2f2d5157a8872dcd140977ba01adfca0e7ad.debug...done.
done.
(gdb) run
Starting program: /usr/bin/keepassxc
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Cannot find user-level thread for LWP 15111: generic error
(gdb) quit
В FAQ по GDB приводятся некоторые распространенные причины ошибок, таких как «Не удается найти поток на уровне пользователя для LWP 15111» : общая ошибка "(число после LWP каждый раз отличается):
9. GDB сообщает «Не удается найти поток пользовательского уровня для LWP 23957: общая ошибка», как мне это исправить?
Существует несколько распространенных причин:
У вас есть несоответствие между
libthread_db.so.1
иlibpthread.so.0
(это чаще всего случается, когда у вас несколько установок glibc или когда вы отлаживаете программу на удаленной цели, а хост и цель имеют разные версии glibc).Вы используете 64-битный отладчик для отладки 32-битной программы, и ваше ядро имеет ошибку эмуляции 32-битной ptrace. FIXME: добавить ссылку на конкретное исправление ядра.
Также известно, что это происходит, когда один из обработчиков сигналов DOSEMU вызывается из контекста DPMI, где регистр
$gs
имеет значение, отличное от значения GDB и / илиlibthread_db.so.0
ожидать; СамуэльБронсон обнаружил, что запуск программы в соответствии сgdbserver
облегчает проблему, по крайней мере, с версией6.8.50.20090620-cvs
на i386.
https://sourceware.org/gdb/wiki/FAQ
Я использую 64-разрядную машину с включенным i386:
$ getconf LONG_BIT
64
$ dpkg --print-foreign-architectures
i386
$ dlocate libthread_db.so.1
libc6-i386: /lib32/libthread_db.so.1
libc6:i386: /lib/i386-linux-gnu/libthread_db.so.1
libc6:amd64: /lib/x86_64-linux-gnu/libthread_db.so.1
$ dlocate libpthread.so.0
libc6-i386: /lib32/libpthread.so.0
libc6:i386: /lib/i386-linux-gnu/libpthread.so.0
libc6:amd64: /lib/x86_64-linux-gnu/libpthread.so.0
и keepassxc
действительно используют libpthread.so.0
:
$ ldd /usr/bin/keepassxc | grep thread
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f889b803000)
, но также и texstudio
:
$ ldd /usr/bin/texstudio | grep thread
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007efd2a09e000)
, и я могу загрузить texstudio
очень хорошо.
$ gdb /usr/bin/texstudio
GNU gdb (Ubuntu 8.1-0ubuntu3) 8.1.0.20180409-git
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /usr/bin/texstudio...Reading symbols from /usr/lib/debug/.build-id/8c/49a9b8c208b2b75fbd3dc0ad9d9bf009886a47.debug...done.
done.
(gdb) run
Starting program: /usr/bin/texstudio
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[New Thread 0x7fffe915a700 (LWP 20816)]
[New Thread 0x7fffda55f700 (LWP 20822)]
[New Thread 0x7fffcb7e9700 (LWP 20823)]
[New Thread 0x7fffca2fe700 (LWP 20824)]
[New Thread 0x7fffc96d9700 (LWP 20825)]
[New Thread 0x7fffc0937700 (LWP 20826)]
[Thread 0x7fffc0937700 (LWP 20826) exited]
[Thread 0x7fffc96d9700 (LWP 20825) exited]
[Thread 0x7fffca2fe700 (LWP 20824) exited]
[Thread 0x7fffe915a700 (LWP 20816) exited]
[Thread 0x7fffcb7e9700 (LWP 20823) exited]
[Thread 0x7fffda55f700 (LWP 20822) exited]
[Inferior 1 (process 20796) exited normally]
(gdb) quit
Кроме того, keepassxc
является 64-битным исполняемым файлом:
$ file /usr/bin/keepassxc
/usr/bin/keepassxc: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/l, for GNU/Linux 3.2.0, BuildID[sha1]=809b2f2d5157a8872dcd140977ba01adfca0e7ad, stripped
Наиболее близкой вещью к любой существующей информации, которую я мог найти, была эта ошибка, которую владелец не мог воспроизвести после перезагрузки ( что бы это ни стоило, я могу воспроизвести после перезагрузки):
Segfault: новое в версии 2.0.2, Ubuntu MATE 16.04
Segfaults / выход из приложения с ошибкой шины, иногда при запуске, иногда позже.
Это новая разработка после обновления до версии 2.0.2.
Попытка запуска с помощью GDB приводит к:
Starting program: /usr/bin/keepassx [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". Cannot find user-level thread for LWP 5299: generic error
https://bugs.launchpad.net/ubuntu/+source/keepassx/+bug/1752353
Это действительно ошибка в keepassx
, а не keepassxc
, но я получаю одинаковое поведение в обоих.
$ gdb /usr/bin/keepassx
GNU gdb (Ubuntu 8.1-0ubuntu3) 8.1.0.20180409-git
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /usr/bin/keepassx...(no debugging symbols found)...done.
(gdb) run
Starting program: /usr/bin/keepassx
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Cannot find user-level thread for LWP 14893: generic error
Одна из стратегий отладки, которую я нашел, заключается в использовании set verbose on
перед запуском исполняемого файла. Вот выходные данные в случае, если это полезно:
Starting program: /usr/bin/keepassxc
Using PIE (Position Independent Executable) displacement 0x555555554000 for "/usr/bin/keepassxc".
Reading symbols from /lib64/ld-linux-x86-64.so.2...Reading symbols from /usr/lib/debug//lib/x86_64-linux-gnu/ld-2.27.so...done.
done.
Reading symbols from system-supplied DSO at 0x7ffff7ffa000...(no debugging symbols found)...done.
Reading in symbols for rtld.c...done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libsodium.so.23...(no debugging symbols found)...done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libQt5Network.so.5...Reading symbols from /usr/lib/debug/.build-id/46/2cebeefa58e5ccff5415b007f6a24425f29ada.debug...done.
done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5...Reading symbols from /usr/lib/debug/.build-id/f2/5f1c8a72b396ac28a985f7297d3ba0ed6cd567.debug...done.
done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5...Reading symbols from /usr/lib/debug/.build-id/d2/9dfc2cdd3a3ae0e1110f0c87c2778c8998efbe.debug...done.
done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.4...(no debugging symbols found)...done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libykpers-1.so.1...(no debugging symbols found)...done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libzxcvbn.so.0...(no debugging symbols found)...done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libargon2.so.0...(no debugging symbols found)...done.
Reading symbols from /lib/x86_64-linux-gnu/libgcrypt.so.20...(no debugging symbols found)...done.
Reading symbols from /lib/x86_64-linux-gnu/libz.so.1...(no debugging symbols found)...done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libQt5DBus.so.5...Reading symbols from /usr/lib/debug/.build-id/06/31cf3ce1c914e12696428ca4ed84951f588f6e.debug...done.
done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5...Reading symbols from /usr/lib/debug/.build-id/fb/710113d79e6ddae5d5495d0721dfe1b70d5e82.debug...done.
done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libstdc++.so.6...Reading symbols from /usr/lib/debug/.build-id/57/0bf32e8698fce3bfacc4a8b010827f842d1dd6.debug...done.
done.
Registering libstdc++-v6 pretty-printer for /usr/lib/x86_64-linux-gnu/libstdc++.so.6 ...
Registering xmethod matcher '%s' with %s' ...
Registering xmethod matcher '%s' with %s' ...
Registering xmethod matcher '%s' with %s' ...
Registering xmethod matcher '%s' with %s' ...
Registering xmethod matcher '%s' with %s' ...
Registering xmethod matcher '%s' with %s' ...
Registering xmethod matcher '%s' with %s' ...
Registering xmethod matcher '%s' with %s' ...
Registering xmethod matcher '%s' with %s' ...
Registering xmethod matcher '%s' with %s' ...
Registering xmethod matcher '%s' with %s' ...
Registering xmethod matcher '%s' with %s' ...
Registering xmethod matcher '%s' with %s' ...
Registering xmethod matcher '%s' with %s' ...
Registering xmethod matcher '%s' with %s' ...
Reading symbols from /lib/x86_64-linux-gnu/libm.so.6...Reading symbols from /usr/lib/debug//lib/x86_64-linux-gnu/libm-2.27.so...done.
done.
Reading symbols from /lib/x86_64-linux-gnu/libc.so.6...Reading symbols from /usr/lib/debug//lib/x86_64-linux-gnu/libc-2.27.so...done.
done.
Reading symbols from /lib/x86_64-linux-gnu/libpthread.so.0...Reading symbols from /usr/lib/debug/.build-id/28/c6aade70b2d40d1f0f3d0a1a0cad1ab816448f.debug...done.
done.
Registering glibc-pthread-locks pretty-printer for /lib/x86_64-linux-gnu/libpthread.so.0 ...
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Reading symbols from /usr/lib/x86_64-linux-gnu/libGL.so.1...(no debugging symbols found)...done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libpng16.so.16...Reading symbols from /usr/lib/debug/.build-id/d5/32f2230c3c84289a0833fc0c1352aaac5892c6.debug...done.
done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libharfbuzz.so.0...(no debugging symbols found)...done.
Reading symbols from /lib/x86_64-linux-gnu/libgcc_s.so.1...Reading symbols from /usr/lib/debug/.build-id/41/bdc55c07d5e5b1d8ab38e2c19b1f535855e084.debug...done.
done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libnghttp2.so.14...(no debugging symbols found)...done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libidn2.so.0...(no debugging symbols found)...done.
Reading symbols from /usr/lib/x86_64-linux-gnu/librtmp.so.1...(no debugging symbols found)...done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libpsl.so.5...(no debugging symbols found)...done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libnettle.so.6...(no debugging symbols found)...done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libgnutls.so.30...(no debugging symbols found)...done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libgssapi_krb5.so.2...(no debugging symbols found)...done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libldap_r-2.4.so.2...(no debugging symbols found)...done.
Reading symbols from /usr/lib/x86_64-linux-gnu/liblber-2.4.so.2...(no debugging symbols found)...done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libyubikey.so.0...(no debugging symbols found)...done.
Reading symbols from /lib/x86_64-linux-gnu/libusb-1.0.so.0...(no debugging symbols found)...done.
Reading symbols from /lib/x86_64-linux-gnu/libjson-c.so.3...(no debugging symbols found)...done.
Reading symbols from /lib/x86_64-linux-gnu/libgpg-error.so.0...(no debugging symbols found)...done.
Reading symbols from /lib/x86_64-linux-gnu/libdbus-1.so.3...Reading symbols from /usr/lib/debug/.build-id/c1/63c9bb03410c4c05458a989a804ff527d4f63f.debug...done.
done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libicui18n.so.60...(no debugging symbols found)...done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libicuuc.so.60...(no debugging symbols found)...done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libdouble-conversion.so.1...(no debugging symbols found)...done.
Reading symbols from /lib/x86_64-linux-gnu/libdl.so.2...Reading symbols from /usr/lib/debug//lib/x86_64-linux-gnu/libdl-2.27.so...done.
done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0...Reading symbols from /usr/lib/debug/.build-id/75/81e089260b8198caa28c2e16bd2353e7a62225.debug...done.
done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libGLX.so.0...(no debugging symbols found)...done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libGLdispatch.so.0...(no debugging symbols found)...done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libfreetype.so.6...(no debugging symbols found)...done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libgraphite2.so.3...(no debugging symbols found)...done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libunistring.so.2...(no debugging symbols found)...done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libhogweed.so.4...(no debugging symbols found)...done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libgmp.so.10...(no debugging symbols found)...done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libp11-kit.so.0...(no debugging symbols found)...done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libtasn1.so.6...(no debugging symbols found)...done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libkrb5.so.3...(no debugging symbols found)...done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libk5crypto.so.3...(no debugging symbols found)...done.
Reading symbols from /lib/x86_64-linux-gnu/libcom_err.so.2...(no debugging symbols found)...done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libkrb5support.so.0...(no debugging symbols found)...done.
Reading symbols from /lib/x86_64-linux-gnu/libresolv.so.2...Reading symbols from /usr/lib/debug//lib/x86_64-linux-gnu/libresolv-2.27.so...done.
done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libsasl2.so.2...(no debugging symbols found)...done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libgssapi.so.3...(no debugging symbols found)...done.
Reading symbols from /lib/x86_64-linux-gnu/libudev.so.1...(no debugging symbols found)...done.
Reading symbols from /lib/x86_64-linux-gnu/libsystemd.so.0...(no debugging symbols found)...done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libicudata.so.60...(no debugging symbols found)...done.
Reading symbols from /lib/x86_64-linux-gnu/libpcre.so.3...(no debugging symbols found)...done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libX11.so.6...Reading symbols from /usr/lib/debug/.build-id/44/1896d78103c8cf264ba06687cd49c700a2c5b5.debug...done.
done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libffi.so.6...Reading symbols from /usr/lib/debug/.build-id/35/55b5f599c9787dfddbf9e8df6f706b9044d985.debug...done.
done.
Reading symbols from /lib/x86_64-linux-gnu/libkeyutils.so.1...(no debugging symbols found)...done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libheimntlm.so.0...(no debugging symbols found)...done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libkrb5.so.26...(no debugging symbols found)...done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libasn1.so.8...(no debugging symbols found)...done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libhcrypto.so.4...(no debugging symbols found)...done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libroken.so.18...(no debugging symbols found)...done.
Reading symbols from /lib/x86_64-linux-gnu/librt.so.1...Reading symbols from /usr/lib/debug//lib/x86_64-linux-gnu/librt-2.27.so...done.
done.
Reading symbols from /lib/x86_64-linux-gnu/liblzma.so.5...(no debugging symbols found)...done.
Reading symbols from /usr/lib/x86_64-linux-gnu/liblz4.so.1...(no debugging symbols found)...done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libxcb.so.1...Reading symbols from /usr/lib/debug/.build-id/3d/49ac024ca8f7e36f5296a7d0d7f083ab1c8a62.debug...done.
done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libwind.so.0...(no debugging symbols found)...done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libheimbase.so.1...(no debugging symbols found)...done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libhx509.so.5...(no debugging symbols found)...done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libsqlite3.so.0...(no debugging symbols found)...done.
Reading symbols from /lib/x86_64-linux-gnu/libcrypt.so.1...Reading symbols from /usr/lib/debug//lib/x86_64-linux-gnu/libcrypt-2.27.so...done.
done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libXau.so.6...(no debugging symbols found)...done.
Reading symbols from /usr/lib/x86_64-linux-gnu/libXdmcp.so.6...(no debugging symbols found)...done.
Reading symbols from /lib/x86_64-linux-gnu/libbsd.so.0...(no debugging symbols found)...done.
Cannot find user-level thread for LWP 17450: generic error
Current language: auto
The current source language is "auto; currently c".
Информация о версии:
$ apt-cache policy keepassx keepassxc gdb
keepassx:
Installed: 2.0.3-1
Candidate: 2.0.3-1
Version table:
*** 2.0.3-1 500
500 http://us.archive.ubuntu.com/ubuntu bionic/universe amd64 Packages
100 /var/lib/dpkg/status
keepassxc:
Installed: 2.3.1+dfsg.1-1
Candidate: 2.3.1+dfsg.1-1
Version table:
*** 2.3.1+dfsg.1-1 500
500 http://us.archive.ubuntu.com/ubuntu bionic/universe amd64 Packages
100 /var/lib/dpkg/status
gdb:
Installed: 8.1-0ubuntu3
Candidate: 8.1-0ubuntu3
Version table:
*** 8.1-0ubuntu3 500
500 http://us.archive.ubuntu.com/ubuntu bionic/main amd64 Packages
100 /var/lib/dpkg/status
Мои вопросы:
Это воспроизводится на других машинах и версиях Ubuntu?
Если да, то это ошибка в gdb
, ошибка как в keepassx
, так и в keepassxc
, ошибка в libc-dbg
] или где-то еще?