Падает QT-программа (Debian Wheezy)

Knoppix

Модераторы: Warderer, Модераторы разделов

Аватара пользователя
Yaros
Сообщения: 501
ОС: Debian Wheezy / Gentoo

Падает QT-программа

Сообщение Yaros »

Доброго всем времени суток.
Есть программа, которая падает при использовании сей функции:

Код: Выделить всё

void MainWindow::PlayAlarm()
{
        if(!recoverypage_->DisableSound() && player_.state() == QProcess::NotRunning)
        {
        player_.start("aplay",  QStringList() << config_->ErrorSoundFile());
        }
}
Если закоментировать строку с player_.start, софтина работает, но нет звука.
Есть подозрение, что банально не хватает какого-то пакета, но не понимаю, как его найти. Программист, который писал, сейчас не доступен.
Если нужны выводы типа strace, могу докинуть.
=========
=Мой блог. =
=========
Gentoo-ниасилятар
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Падает QT-программа

Сообщение Bizdelnick »

В консоль при падении что-то пишет?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
Yaros
Сообщения: 501
ОС: Debian Wheezy / Gentoo

Re: Падает QT-программа

Сообщение Yaros »

В консоль пишет

Код: Выделить всё

____Shutdown erl2pp exception
Вывод strace получился на 12к строк, сюда копировать или куда-нибудь выложить лучше?
=========
=Мой блог. =
=========
Gentoo-ниасилятар
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Падает QT-программа

Сообщение Bizdelnick »

Пальцем в небо: если этот вызов должен запускать aplay, проверьте его наличие в системе.

Yaros писал(а):
16.07.2015 15:23
сюда копировать или куда-нибудь выложить лучше?

На pastebin.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
s.xbatob
Сообщения: 1139
ОС: Fedora

Re: Падает QT-программа

Сообщение s.xbatob »

Чего гадать? К вашим услугам gdb. Собирайте с отладкой, прямо под отладчиком роняйте, анализируйте стек вызовов, значения переменных,.. Насчёт неустановленный пакетов - сильно вряд ли.
Только start() реализован асинхронно, а аргументы его разрушаются сразу после выхода. Попробуйте создать переменные, запустить с ними и дождаться хотя бы старта (waitForStarted() ) За Qt подобные грабли водятся
Спасибо сказали:
Аватара пользователя
Yaros
Сообщения: 501
ОС: Debian Wheezy / Gentoo

Re: Падает QT-программа

Сообщение Yaros »

s.xbatob писал(а):
16.07.2015 15:54
Чего гадать? К вашим услугам gdb. Собирайте с отладкой, прямо под отладчиком роняйте, анализируйте стек вызовов, значения переменных,.. Насчёт неустановленный пакетов - сильно вряд ли.
Только start() реализован асинхронно, а аргументы его разрушаются сразу после выхода. Попробуйте создать переменные, запустить с ними и дождаться хотя бы старта (waitForStarted() ) За Qt подобные грабли водятся

Моя не программист, моя администратор. Я кроме перла начального уровня и баша ничего не знаю))
=========
=Мой блог. =
=========
Gentoo-ниасилятар
Спасибо сказали:
Аватара пользователя
s.xbatob
Сообщения: 1139
ОС: Fedora

Re: Падает QT-программа

Сообщение s.xbatob »

Тогда на что вы рассчитываете - даже если локализуете ошибку? Призывайте к ответу автора!
Спасибо сказали:
Аватара пользователя
Yaros
Сообщения: 501
ОС: Debian Wheezy / Gentoo

Re: Падает QT-программа

Сообщение Yaros »

s.xbatob писал(а):
16.07.2015 16:22
Тогда на что вы рассчитываете - даже если локализуете ошибку? Призывайте к ответу автора!

Если локализовать ошибку, можт как обезьяна с гранатой осилю это исправить.
Такой здоровенный (за пару-тройку секунд работы) лог не влез на пастбин, выложил на гуглодиск:
https://drive.google.com/file/d/0B54AOMJrHt...iew?usp=sharing
=========
=Мой блог. =
=========
Gentoo-ниасилятар
Спасибо сказали:
Obscurus
Сообщения: 171

Re: Падает QT-программа

Сообщение Obscurus »

Дурацкий вопрос - а сам aplay в системе установлен? Там ведь не сегфолт, как я понял, а какое-то необработанное исключение. Может параметры неверные ему передаются?
Как вы его собираете, из консоли через qmake? А то в qt-creator очень удобный режим отладки есть,
Спасибо сказали:
Аватара пользователя
Yaros
Сообщения: 501
ОС: Debian Wheezy / Gentoo

Re: Падает QT-программа

Сообщение Yaros »

Obscurus писал(а):
17.07.2015 10:35
Дурацкий вопрос - а сам aplay в системе установлен? Там ведь не сегфолт, как я понял, а какое-то необработанное исключение. Может параметры неверные ему передаются?
Как вы его собираете, из консоли через qmake? А то в qt-creator очень удобный режим отладки есть,

Любопытно:

Код: Выделить всё

# alsamixer
cannot open  mixer: no such file or directory

В железке, по ходу, нет звуковой карты, о чем программе неизвестно.
=========
=Мой блог. =
=========
Gentoo-ниасилятар
Спасибо сказали:
Аватара пользователя
Yaros
Сообщения: 501
ОС: Debian Wheezy / Gentoo

Re: Падает QT-программа

Сообщение Yaros »

Подключил колонки, вроде как там должна быть встроенная карта.

Код: Выделить всё

root@mgmt:~# cat /proc/asound/oss/sndstat
Sound Driver:3.8.1a-980706 (ALSA v1.0.24 emulation code)
Kernel: Linux mgmt 3.2.0-4-686-pae #1 SMP Debian 3.2.65-1 i686
Config options: 0
Installed drivers:
Type 10: ALSA emulation
Card config:
USB  AUDIO at usb-0000:00:14.0-2, full speed
Audio devices: NOT ENABLED IN CONFIG
Synth devices: NOT ENABLED IN CONFIG
Midi devices: NOT ENABLED IN CONFIG
Timers:
31: system timer
Mixers: NOT ENABLED IN CONFIG
Alsamixer ведет себя так же.
=========
=Мой блог. =
=========
Gentoo-ниасилятар
Спасибо сказали:
Аватара пользователя
s.xbatob
Сообщения: 1139
ОС: Fedora

Re: Падает QT-программа

Сообщение s.xbatob »

это всё к падениям программы относиться не должно. Если мы, конечно, под падениями понимаем одно и то же.
Спасибо сказали:
Аватара пользователя
Yaros
Сообщения: 501
ОС: Debian Wheezy / Gentoo

Re: Падает QT-программа

Сообщение Yaros »

s.xbatob писал(а):
17.07.2015 17:07
это всё к падениям программы относиться не должно. Если мы, конечно, под падениями понимаем одно и то же.

То есть с то, что оно падает при вызове звука, не в счет? Или aplay может и без этого работать?
=========
=Мой блог. =
=========
Gentoo-ниасилятар
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Падает QT-программа

Сообщение Bizdelnick »

Yaros писал(а):
17.07.2015 17:16
То есть с то, что оно падает при вызове звука, не в счет? Или aplay может и без этого работать?

Программа не должна падать из-за невозможности проиграть звук. То есть лечить надо не aplay, а код.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
s.xbatob
Сообщения: 1139
ОС: Fedora

Re: Падает QT-программа

Сообщение s.xbatob »

Yaros писал(а):
17.07.2015 17:16
s.xbatob писал(а):
17.07.2015 17:07
это всё к падениям программы относиться не должно. Если мы, конечно, под падениями понимаем одно и то же.

То есть с то, что оно падает при вызове звука, не в счет? Или aplay может и без этого работать?

aplay - это отдельный процесс. С ним может происходить что угодно, но на его родителе это не отражается, во всяком случае напрямую.
Спасибо сказали:
Аватара пользователя
Yaros
Сообщения: 501
ОС: Debian Wheezy / Gentoo

Re: Падает QT-программа

Сообщение Yaros »

То есть надо вместо строки

Код: Выделить всё

player_.start("aplay",  QStringList() << config_->ErrorSoundFile());

написать код, который бы не только запускал, но и полноценно отслеживал все происходящие косяки?
=========
=Мой блог. =
=========
Gentoo-ниасилятар
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Падает QT-программа

Сообщение Bizdelnick »

Yaros писал(а):
17.07.2015 17:27
написать код, который бы не только запускал, но и полноценно отслеживал все происходящие косяки?

Нет. Вам наоборот нужно, чтобы возможные косяки никак не сказывались на выполнении программы.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Obscurus
Сообщения: 171

Re: Падает QT-программа

Сообщение Obscurus »

Yaros писал(а):
17.07.2015 17:27
То есть надо вместо строки

Код: Выделить всё

player_.start("aplay",  QStringList() << config_->ErrorSoundFile());

написать код, который бы не только запускал, но и полноценно отслеживал все происходящие косяки?


Может попробовать эту строку обернуть в try/catch? Хотя такие конструкции в qt популярностью не пользуются.
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Падает QT-программа

Сообщение NickLion »

Qt использует сигнал-слотовую систему, я думаю, что Вы не там ищете. Покажие другие места использования player_. И функции, которые связаны connect'ом. QProcess после start() дёргает сигналы started() и error(), ошибка может быть в соответствующим им слотах.
Спасибо сказали:
Аватара пользователя
Yaros
Сообщения: 501
ОС: Debian Wheezy / Gentoo

Re: Падает QT-программа

Сообщение Yaros »

NickLion писал(а):
18.07.2015 16:25
Qt использует сигнал-слотовую систему, я думаю, что Вы не там ищете. Покажие другие места использования player_. И функции, которые связаны connect'ом. QProcess после start() дёргает сигналы started() и error(), ошибка может быть в соответствующим им слотах.

В файле maint_main_window.cpp:

Код: Выделить всё

void MainWindow::PlayAlarm()
{
        if(!recoverypage_->DisableSound() && player_.state() == QProcess::NotRunning)
        {
        player_.start("aplay",  QStringList() << config_->ErrorSoundFile());
        }
}
В файле maint_main_window.hpp:

Код: Выделить всё

private:
        // Audio player
        QProcess player_;
Все, что с connect нагрепал:

Код: Выделить всё

root@mgmt:~/sciii/src/maint# grep -rn "connect(" ./*
./controls/vdbpage.cpp:16:    connect(btn_vdb_on_off_, SIGNAL(toggled(bool)), this, SLOT(ui_btn_vdb_switch(bool)));
./maint_main_window.cpp:60:    connect(gnsspage_, SIGNAL(update_data()), this, SLOT(update_data()));
./maint_main_window.cpp:64:    connect(vdbpage_, SIGNAL(update_data()), this, SLOT(update_data()));
./maint_main_window.cpp:65:    connect(vdbpage_, SIGNAL(report_error(QString)), this, SLOT(report_error(QString)));
./maint_main_window.cpp:69:    connect(recoverypage_, SIGNAL(update_data()), this, SLOT(update_data()));
./maint_main_window.cpp:70:    connect(recoverypage_, SIGNAL(report_error(QString)), this, SLOT(report_error(QString)));
./maint_main_window.cpp:71:    connect(recoverypage_, SIGNAL(shutdown()), this, SLOT(shutdown()));
./maint_main_window.cpp:150:    connect(fast_timer_, SIGNAL(timeout()), this, SLOT(update_clock()));
./maint_main_window.cpp:154:    connect(timer_, SIGNAL(timeout()), this, SLOT(update_data()));
./maint_main_window.cpp_:60:    connect(gnsspage_, SIGNAL(update_data()), this, SLOT(update_data()));
./maint_main_window.cpp_:64:    connect(vdbpage_, SIGNAL(update_data()), this, SLOT(update_data()));
./maint_main_window.cpp_:65:    connect(vdbpage_, SIGNAL(report_error(QString)), this, SLOT(report_error(QString)));
./maint_main_window.cpp_:69:    connect(recoverypage_, SIGNAL(update_data()), this, SLOT(update_data()));
./maint_main_window.cpp_:70:    connect(recoverypage_, SIGNAL(report_error(QString)), this, SLOT(report_error(QString)));
./maint_main_window.cpp_:71:    connect(recoverypage_, SIGNAL(shutdown()), this, SLOT(shutdown()));
./maint_main_window.cpp_:150:    connect(fast_timer_, SIGNAL(timeout()), this, SLOT(update_clock()));
./maint_main_window.cpp_:154:    connect(timer_, SIGNAL(timeout()), this, SLOT(update_data()));
=========
=Мой блог. =
=========
Gentoo-ниасилятар
Спасибо сказали:
Аватара пользователя
s.xbatob
Сообщения: 1139
ОС: Fedora

Re: Падает QT-программа

Сообщение s.xbatob »

А всё-таки, в чём заключается её падение?
Программа завершается или убивается каким-либо сигналом? Если сигналом, то - каким? Если завершается. то не говорит ли она что-нибудь?
И - отстаньте от сигналов/слотов Qt: они тут явно не при чём.
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Падает QT-программа

Сообщение NickLion »

s.xbatob писал(а):
20.07.2015 16:28
И - отстаньте от сигналов/слотов Qt: они тут явно не при чём.

Ну, до сообщения 20 это было не очевидно.
Спасибо сказали:
Аватара пользователя
Yaros
Сообщения: 501
ОС: Debian Wheezy / Gentoo

Re: Падает QT-программа

Сообщение Yaros »

По совету NickLion разбил строку

Код: Выделить всё

player_.start("aplay",  QStringList() << config_->ErrorSoundFile());
на несколько строк:

Код: Выделить всё

        QStringList x;
        x << config_->ErrorSoundFile();
        player_.start("aplay", x);

Выяснилось, что причина падения в последней строке. QT, если что, 4.
А как узнать, завершается сигналом или как-то иначе?
=========
=Мой блог. =
=========
Gentoo-ниасилятар
Спасибо сказали:
Аватара пользователя
Yaros
Сообщения: 501
ОС: Debian Wheezy / Gentoo

Re: Падает QT-программа

Сообщение Yaros »

NickLeon так же обратил внимание на эту часть strace:

Код: Выделить всё

--- SIGCHLD (Child exited) @ 0 (0) ---
write(6, "\0", 1)                       = 1
sigreturn()                             = ? (mask now [])
futex(0xb6703b18, FUTEX_WAKE_PRIVATE, 2147483647) = 0
close(9)                                = 0
time(NULL)                              = 1437048466
send(3, "<14>Jul 16 15:07:46 maint: ?????"..., 45, MSG_NOSIGNAL) = 45
write(4, "\1\0\0\0\0\0\0\0", 8)         = 8
write(2, "____Shutdown erl2pp exception\n ?"..., 50) = 50
write(2, "____Exit in shutdown\n \n", 23) = 23
brk(0x93d3000)                          = 0x93d3000
time(NULL)                              = 1437048466
brk(0x93d1000)                          = 0x93d1000
send(3, "<14>Jul 16 15:07:46 maint: Conso"..., 50, MSG_NOSIGNAL) = 50
write(4, "\1\0\0\0\0\0\0\0", 8)         = 8
close(11)                               = 0
time(NULL)                              = 1437048466
send(3, "<14>Jul 16 15:07:46 maint: Redun"..., 55, MSG_NOSIGNAL) = 55
time(NULL)                              = 1437048466
send(3, "<14>Jul 16 15:07:46 maint: Node "..., 51, MSG_NOSIGNAL) = 51
write(2, "Remote closing...\n", 18)     = 18
close(-1)                               = -1 EBADF (Bad file descriptor)
write(2, "Done\n", 5)                   = 5
time(NULL)                              = 1437048466
send(3, "<14>Jul 16 15:07:46 maint: Node "..., 51, MSG_NOSIGNAL) = 51
write(2, "Remote closing...\n", 18)     = 18
close(8)                                = 0
write(2, "Done\n", 5)                   = 5
write(6, "@", 1)                        = 1
close(6)                                = 0
futex(0x9189f2c, FUTEX_WAIT_PRIVATE, 1, NULL) = 0
futex(0x9189f10, FUTEX_WAKE_PRIVATE, 1) = 0
close(5)                                = 0
mmap2(NULL, 2097152, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = 0xb4ec0000
munmap(0xb4ec0000, 262144)              = 0
munmap(0xb5000000, 786432)              = 0
mprotect(0xb4f00000, 135168, PROT_READ|PROT_WRITE) = 0
rt_sigaction(SIGCHLD, NULL, {0xb69873d0, [], SA_NOCLDSTOP}, 8) = 0
rt_sigaction(SIGCHLD, {SIG_DFL, [], 0}, NULL, 8) = 0
exit_group(0)                           = ?
=========
=Мой блог. =
=========
Gentoo-ниасилятар
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Падает QT-программа

Сообщение Bizdelnick »

Yaros писал(а):
20.07.2015 17:45
А как узнать, завершается сигналом или как-то иначе?

Ну в выводе strace присутствует получение SIGCHLD, что логично. Что там происходит после этого, я сказать не берусь, потому как в Qt не силён.
Upd. Отвлёкся при написании, предыдущего сообщения не видел.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
devilr
Сообщения: 3665
ОС: Mandriva => Gentoo (~amd64)
Контактная информация:

Re: Падает QT-программа

Сообщение devilr »

Есть банальное предположение, что программа не "падает", а в ней где то есть перехватчик сигналов (подобных SIGCHLD). Дочерний процесс создается и тут же завершается. Естественно, что меняется статус и перехватчик сигналов на это реагирует как на ошибку и вываливает стек вызовов. Я подобное как то давно делал и точно так-же удивлялся, почему у меня программа "падает".
Может и здесь что-то похожее?
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Эхо разума
Спасибо сказали:
Аватара пользователя
Yaros
Сообщения: 501
ОС: Debian Wheezy / Gentoo

Re: Падает QT-программа

Сообщение Yaros »

devilr писал(а):
22.07.2015 09:32
Есть банальное предположение, что программа не "падает", а в ней где то есть перехватчик сигналов (подобных SIGCHLD). Дочерний процесс создается и тут же завершается. Естественно, что меняется статус и перехватчик сигналов на это реагирует как на ошибку и вываливает стек вызовов. Я подобное как то давно делал и точно так-же удивлялся, почему у меня программа "падает".
Может и здесь что-то похожее?

Может, а как это проверить?
=========
=Мой блог. =
=========
Gentoo-ниасилятар
Спасибо сказали:
Аватара пользователя
devilr
Сообщения: 3665
ОС: Mandriva => Gentoo (~amd64)
Контактная информация:

Re: Падает QT-программа

Сообщение devilr »

Можно в исходниках поискать слово signal
Или что-то типа "case SIGCHLD"
Или просто SIGCHLD
И перекинуть строчки, содержащие вышесказанное, сюда. Посмотрю - скажу.
Ну, либо исходник самой программы, если не секрет/жалко/еще_что_нибудь.
Трудно гадать без исходников.
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Эхо разума
Спасибо сказали:
Аватара пользователя
s.xbatob
Сообщения: 1139
ОС: Fedora

Re: Падает QT-программа

Сообщение s.xbatob »

devilr писал(а):
22.07.2015 13:14
Можно в исходниках поискать слово signal
Или что-то типа "case SIGCHLD"
Или просто SIGCHLD
И перекинуть строчки, содержащие вышесказанное, сюда. Посмотрю - скажу.
Ну, либо исходник самой программы, если не секрет/жалко/еще_что_нибудь.
Трудно гадать без исходников.

Я и без кода знаю где обрабатывается SIGCHLD: в библиотеке Qt в классе QProcess.
Вообще анализировать незнакомую, зато event-driven и многопоточную программу с помощью strace - занятие неблагородное и неэффективное.
Спасибо сказали:
Аватара пользователя
devilr
Сообщения: 3665
ОС: Mandriva => Gentoo (~amd64)
Контактная информация:

Re: Падает QT-программа

Сообщение devilr »

s.xbatob писал(а):
22.07.2015 13:35
devilr писал(а):
22.07.2015 13:14
Можно в исходниках поискать слово signal
Или что-то типа "case SIGCHLD"
Или просто SIGCHLD
И перекинуть строчки, содержащие вышесказанное, сюда. Посмотрю - скажу.
Ну, либо исходник самой программы, если не секрет/жалко/еще_что_нибудь.
Трудно гадать без исходников.

Я и без кода знаю где обрабатывается SIGCHLD: в библиотеке Qt в классе QProcess.
Вообще анализировать незнакомую, зато event-driven и многопоточную программу с помощью strace - занятие неблагородное и неэффективное.

SIGCHLD можно перехватить и из своей программы. Вообще не вмешиваясь в класс QProcess. Я такие вещи вообще стартую из main. Отладчик ведь не всегда применим и не всегда удобен.
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Эхо разума
Спасибо сказали:
Ответить