LINUX.ORG.RU

FCEUX: падение при запуске

 ,


0

1

Опять при освоении Linux появилась проблема, с которой не могу справиться, а потому прошу вашей помощи. Решил поставить эмулятор NES FCEUX но, даже не запустившись (только показав рамку окна) он упал:

[vlk@eospc ~]$ fceux
Starting FCEUX 2.6.1...
NTSC mode set
NTSC mode set
Emulator Start
GL Version: 4.5 (Compatibility Profile) Mesa 21.3.5 
Segmentation fault (core dumped)

Что интересно, под root'ом он запускается и работает нормально:

[vlk@eospc ~]$ sudo fceux
[sudo] password for vlk: 
Error: Failed to open message log file: '/tmp/fceux.log'
Qt Warning: QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root' (:0, )
Qt Warning: QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root' (:0, )
Starting FCEUX 2.6.1...
NTSC mode set
NTSC mode set
Emulator Start
GL Version: 4.5 (Compatibility Profile) Mesa 21.3.5 

Происходит это на EndeavourOS [Arch с удобным инсталлятором] под VMware 12.5.9 (выше процессор не позволяет). Если откатить через архив (pacman -U) до 2.3, то все работает (версии 2.4-2.6.1 ведут себя одинаково). Откат Qt5, на котором он написан, никак не влияет (попробовал на всякий случай). Еще пересобрал используя скрипт Slackware, но FCEUX все так же падает. Загрузил EneavourOS с флешки на реальной машине - ситуация аналогичная.

В Debian testing версия 2.5.0 (последняя доступная там) работает нормально (под VMware):

vlk@debian:~$ fceux
Starting FCEUX 2.5.0...
NTSC mode set
NTSC mode setEmulator Start
GL Version: 3.1 Mesa 21.2.6 

Я понимаю, что это не программа первой необходимости, но во первых хотелось бы исправить, а во вторых это опыт, который поможет при решении похожих проблем т.ч. разобраться в чем дело хотелось бы.

Возможно, еще это поможет диагностике:

[Thread debugging using libthread_db enabled]
Using host libthread_db library "/usr/lib/libthread_db.so.1".
--Type <RET> for more, q to quit, c to continue without paging--
Core was generated by `fceux'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x00007f0fb2d368e5 in QApplicationPrivate::basePalette() const () from /usr/lib/libQt5Widgets.so.5
[Current thread is 1 (Thread 0x7f0faef20800 (LWP 985))]
(gdb) bt
#0  0x00007f0fb2d368e5 in QApplicationPrivate::basePalette() const () from /usr/lib/libQt5Widgets.so.5
#1  0x00007f0fb26ab8ba in QGuiApplicationPrivate::setPalette(QPalette const&) () from /usr/lib/libQt5Gui.so.5
#2  0x00007f0fb26aba70 in QGuiApplication::setPalette(QPalette const&) () from /usr/lib/libQt5Gui.so.5
#3  0x00007f0fae021786 in ?? () from /usr/lib/qt/plugins/platformthemes/libqt5ct.so
#4  0x00007f0fb22f4e86 in QObject::event(QEvent*) () from /usr/lib/libQt5Core.so.5
#5  0x00007f0fb2d431a6 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/libQt5Widgets.so.5
#6  0x00007f0fb22d117a in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /usr/lib/libQt5Core.so.5
#7  0x00007f0fb22d1c79 in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) () from /usr/lib/libQt5Core.so.5
#8  0x00007f0fb2318558 in ?? () from /usr/lib/libQt5Core.so.5
#9  0x00007f0fb1089f13 in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0
#10 0x00007f0fb10e00d9 in ?? () from /usr/lib/libglib-2.0.so.0
#11 0x00007f0fb1087485 in g_main_context_iteration () from /usr/lib/libglib-2.0.so.0
#12 0x00007f0fb231c45a in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQt5Core.so.5
#13 0x00007f0fb22c945b in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQt5Core.so.5
#14 0x00007f0fb22d4ba7 in QCoreApplication::exec() () from /usr/lib/libQt5Core.so.5
#15 0x000055df7a5eae7f in ?? ()
#16 0x00007f0fb1b29b25 in __libc_start_main () from /usr/lib/libc.so.6
#17 0x000055df7a5eca9e in ?? ()
(gdb)


Последнее исправление: Voland_1994 (всего исправлений: 2)

Обычно если из под рута работает, а от юзера падает — означает что не хватает прав на доступ к чему то, или для юзера заданы какие либо лимиты, и их не хватает. К сожалению выхлоп программы при падении неинформативен, значит у тебя два варианта: посмотреть в её документации как включить подробный лог или отладочный вывод, если такой возможности нет — запустить её через strace (если strace не установлен - поставить) и посмотреть при обращении к какому ресурсу она падает. Это может навести на идею. Если и это всё не помогло, нужно собрать программу со включённой отладкой и уже по взрослому разбираться.

PS. Error: Failed to open message log file: '/tmp/fceux.log'. Вот это было бы неплохо починить, в логе может оказаться что то внятное, найди как его перенаправить или разберись каких прав ей не хватает чтобы в свой же лог писать.

Jameson ★★★★★
()
Последнее исправление: Jameson (всего исправлений: 2)
Ответ на: комментарий от Jameson

Права на лог смотрел - мой user владелец, запись возможна (и как раз там где «faile’d», от рута, все работает). Подробного лога у программы нет (глянул ключи в man’e). Увы, но для отладки знаний у меня не хватает, а выдача strace не наводит ни на какие мысли:

Root:

..................
access("/usr/lib/qt/plugins/accessiblebridge/.", F_OK) = -1 ENOENT (No such file or directory)
access("/usr/bin/accessiblebridge/.", F_OK) = -1 ENOENT (No such file or directory)
poll([{fd=5, events=POLLIN}], 1, 0)     = 1 ([{fd=5, revents=POLLIN}])
read(5, "+\0\0\0\0\0\0\0", 16)          = 8
inotify_init1(IN_CLOEXEC)               = 16
write(5, "\1\0\0\0\0\0\0\0", 8)         = 8
fcntl(16, F_SETFD, FD_CLOEXEC)          = 0
..................

User:

access("/usr/lib/qt/plugins/accessiblebridge/.", F_OK) = -1 ENOENT (No such file or directory)
access("/usr/bin/accessiblebridge/.", F_OK) = -1 ENOENT (No such file or directory)
poll([{fd=6, events=POLLIN}, {fd=7, events=POLLIN}], 2, 0) = 2 ([{fd=6, revents=POLLIN}, {fd=7, revents=POLLIN}])
read(6, "2\0\0\0\0\0\0\0", 16)          = 8
--- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0x55c10e3b6539} ---
+++ killed by SIGSEGV (core dumped) +++
Segmentation fault (core dumped)

P.S. В логе дублирование экранного вывода

Voland_1994
() автор топика
Последнее исправление: Voland_1994 (всего исправлений: 2)
Ответ на: комментарий от Voland_1994

От рута опрашивается fd=5, от юзера - два дескриптора 6 и 7. Найди на каком месте это отличие начинается. Открыты ли дескрипторы 6 и 7 от рута вообще? Когда их открыл юзер, что случилось у рут что он это не делал?

firkax ★★★★★
()
Ответ на: комментарий от Voland_1994

Можешь попробовать в другом терминале от рута сделать lsof -c fceux, при запущенном fceux, и посмотреть какие файлы оно открывает, это тоже может навести на мысли.

Интуитивно предполагаю что юзер не находится в какой то нужной этой софтине группе и не имеет доступ к чему то. lsof покажет что вообще оно открывает, особое внимание обрати на файлы устройств в /dev, смотри на то какая группа должна быть у юзера для доступа к открываемым устройствам.

Jameson ★★★★★
()
Последнее исправление: Jameson (всего исправлений: 1)
  1. ulimit -c unlimited //разрешаем запись коре дампов
  2. fceux // запускаем и получаем файл вида core.pid
  3. gdb $(which fceux) core.pid //открываем дамп в отладчике bt //это уже в отладчике

если арч предоставляет символы для fceux, то вывод bt будет очень понятным (кто там и почему падает)

anonymous
()
Ответ на: комментарий от anonymous

Проблемы в Arch начинаются как раз после версии 2.3.0, она еще работает нормально. В Debian же и 2.5 работает. Еще не все опробовал т.ч. в процессе.

Voland_1994
() автор топика
Ответ на: комментарий от anonymous

Что-то не вышло, но я запустил под gdb [gdb fceux ---> run] и он мне выдал вот такое (в первом сообщении это есть):

Thread 1 "fceux" received signal SIGSEGV, Segmentation fault.
0x00007ffff47978e5 in QApplicationPrivate::basePalette() const () from /usr/lib/libQt5Widgets.so.5
Voland_1994
() автор топика
Ответ на: комментарий от Jameson

Сделал lsof -c fceux от рута и от пользователя (запустил программу под gdb). После сравнения в meld различие только в том, что у пользователя нет этого:

/memfd:xorg
inotify
/usr/lib/libnss_files-2.33.so

Собрал свежую версию из git с Qt6 (предыдущие не собирались) и вот она работатет нормально. А если собрать из git с Qt5, то поведение такое же.

Voland_1994
() автор топика
Ответ на: комментарий от Voland_1994

Разобрался. В выводе GDB заметил libqt5ct.so, а я как раз ставил Qt5ct для изменения внешнего вида Qt. И вот после удаления Qt5ct FCEUX перестал падать. У меня вопрос: каким образом программа, которая просто должна быть интерфейсом к конфигурационным файлам, вызывает такие эффекты? И почему под root’ом не падает?

Voland_1994
() автор топика
Ответ на: комментарий от Voland_1994

Создал тикет на странице проекта, надеюсь разработчик скоро поправит. Спасибо всем, кто давал советы!

Voland_1994
() автор топика
Последнее исправление: Voland_1994 (всего исправлений: 1)
Ответ на: комментарий от Voland_1994

Похоже программа создала некорректный конфиг, который не обрабатывается правильно в basepalette. Настройки менялись для всей системы или только локального пользователя? Скорее второе, это объясняет почему root работал.

mxfm ★★
()
Ответ на: комментарий от mxfm

Действительно все очень интересно. В /etc/skel лежит конфиг с которым происходит падение (это видимо создатели EndeavourOS положили) и такая проблема сразу же есть даже у нового пользователя. Если удалить строку начинающуюся со stylesheets, то падения больше нет; если в qt5ct отметить хоть один из них (Style Sheets), то будут. Если подложить проблемный конфиг в Ubuntu, то FCEUX запускается, но начинается случайный падеж других приложений (например IBus Perferences и Files). Я в замешательстве.

Voland_1994
() автор топика
Ответ на: комментарий от Voland_1994

Я в замешательстве.

Цифро дрочерство QT до добра довело ? Товагищи захотели хаипа вместо того что бы орудовать с обычным css

anonymous
()
Ответ на: комментарий от Voland_1994

Имхо, тривиально. Маргинальные дистры часто добавляют вещи, которые плохо протестированы.

mxfm ★★
()
Последнее исправление: mxfm (всего исправлений: 1)
Ответ на: комментарий от Voland_1994

твоя тема лишний раз наводит на мысль о том, что говносборки - это зло


представь себе, что ты не знаешь, кто такие gdb/strace/lsof или боишься/не хочешь ими пользоваться - какой вывод можно сделать из сложившейся ситуации (софтина падает при запуске)?
поразмышляй на досуге, интересный кейс

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.