Russian Qt Forum

Qt => Мультимедиа => Тема начата: sergebegger от Июль 04, 2010, 14:54



Название: Проблема с ALSA
Отправлено: sergebegger от Июль 04, 2010, 14:54
Помогите пожалуйста, куда копать?
При изменении Volume - segmentation fault
Исходники прилагаются.....


Название: Re: Проблема с ALSA
Отправлено: Rcus от Июль 04, 2010, 15:46
Valgrind же
Цитировать
==23310== Use of uninitialised value of size 8
==23310==    at 0x4041BA: MainWindow::setVolume(int) (mainwindow.cpp:20)
==23310==    by 0x4095BE: MainWindow::qt_metacall(QMetaObject::Call, int, void**) (moc_mainwindow.cpp:72)
==23310==    by 0x5F26E3E: QMetaObject::activate(QObject*, QMetaObject const*, int, void**) (qobject.cpp:3293)
==23310==    by 0x5968BDD: QAbstractSlider::valueChanged(int) (moc_qabstractslider.cpp:182)
==23310==    by 0x5721CAB: QSlider::mouseMoveEvent(QMouseEvent*) (qslider.cpp:514)
==23310==    by 0x53231DE: QWidget::event(QEvent*) (qwidget.cpp:7983)
==23310==    by 0x52CD22B: QApplicationPrivate::notify_helper(QObject*, QEvent*) (qapplication.cpp:4300)
==23310==    by 0x52D3ECA: QApplication::notify(QObject*, QEvent*) (qapplication.cpp:3865)
==23310==    by 0x5F1406B: QCoreApplication::notifyInternal(QObject*, QEvent*) (qcoreapplication.cpp:704)
==23310==    by 0x52D30AD: QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool) (qcoreapplication.h:215)
==23310==    by 0x5352F64: QETWidget::translateMouseEvent(_XEvent const*) (qapplication_x11.cpp:4368)
==23310==    by 0x53518AB: QApplication::x11ProcessEvent(_XEvent*) (qapplication_x11.cpp:3501)
==23310==
==23310== Invalid read of size 8
==23310==    at 0x4041BA: MainWindow::setVolume(int) (mainwindow.cpp:20)
==23310==    by 0x4095BE: MainWindow::qt_metacall(QMetaObject::Call, int, void**) (moc_mainwindow.cpp:72)
==23310==    by 0x5F26E3E: QMetaObject::activate(QObject*, QMetaObject const*, int, void**) (qobject.cpp:3293)
==23310==    by 0x5968BDD: QAbstractSlider::valueChanged(int) (moc_qabstractslider.cpp:182)
==23310==    by 0x5721CAB: QSlider::mouseMoveEvent(QMouseEvent*) (qslider.cpp:514)
==23310==    by 0x53231DE: QWidget::event(QEvent*) (qwidget.cpp:7983)
==23310==    by 0x52CD22B: QApplicationPrivate::notify_helper(QObject*, QEvent*) (qapplication.cpp:4300)
==23310==    by 0x52D3ECA: QApplication::notify(QObject*, QEvent*) (qapplication.cpp:3865)
==23310==    by 0x5F1406B: QCoreApplication::notifyInternal(QObject*, QEvent*) (qcoreapplication.cpp:704)
==23310==    by 0x52D30AD: QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool) (qcoreapplication.h:215)
==23310==    by 0x5352F64: QETWidget::translateMouseEvent(_XEvent const*) (qapplication_x11.cpp:4368)
==23310==    by 0x53518AB: QApplication::x11ProcessEvent(_XEvent*) (qapplication_x11.cpp:3501)
==23310==  Address 0x56 is not stack'd, malloc'd or (recently) free'd
==23310==
==23310==
==23310== Process terminating with default action of signal 11 (SIGSEGV)
==23310==  Access not within mapped region at address 0x56
==23310==    at 0x4041BA: MainWindow::setVolume(int) (mainwindow.cpp:20)
==23310==    by 0x4095BE: MainWindow::qt_metacall(QMetaObject::Call, int, void**) (moc_mainwindow.cpp:72)
==23310==    by 0x5F26E3E: QMetaObject::activate(QObject*, QMetaObject const*, int, void**) (qobject.cpp:3293)
==23310==    by 0x5968BDD: QAbstractSlider::valueChanged(int) (moc_qabstractslider.cpp:182)
==23310==    by 0x5721CAB: QSlider::mouseMoveEvent(QMouseEvent*) (qslider.cpp:514)
==23310==    by 0x53231DE: QWidget::event(QEvent*) (qwidget.cpp:7983)
==23310==    by 0x52CD22B: QApplicationPrivate::notify_helper(QObject*, QEvent*) (qapplication.cpp:4300)
==23310==    by 0x52D3ECA: QApplication::notify(QObject*, QEvent*) (qapplication.cpp:3865)
==23310==    by 0x5F1406B: QCoreApplication::notifyInternal(QObject*, QEvent*) (qcoreapplication.cpp:704)
==23310==    by 0x52D30AD: QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool) (qcoreapplication.h:215)
==23310==    by 0x5352F64: QETWidget::translateMouseEvent(_XEvent const*) (qapplication_x11.cpp:4368)
==23310==    by 0x53518AB: QApplication::x11ProcessEvent(_XEvent*) (qapplication_x11.cpp:3501)
hint: line 10


Название: Re: Проблема с ALSA
Отправлено: sergebegger от Июль 04, 2010, 15:57
Спасибо за подсказку про Valgrind  - gdb такого не показал.
А нельзя-ли поконкретнее ткнуть носом?  :D



Название: Re: Проблема с ALSA
Отправлено: sergebegger от Июль 04, 2010, 16:06
А у меня картина другая.....
Цитировать
==12223== Invalid read of size 4
==12223==    at 0x804ADB7: MainWindow::setVolume(int) (mainwindow.cpp:20)
==12223==    by 0x804FC0F: MainWindow::qt_metacall(QMetaObject::Call, int, void**) (moc_mainwindow.cpp:72)
==12223==    by 0x513F5DA: QMetaObject::metacall(QObject*, QMetaObject::Call, int, void**) (in /usr/lib/libQtCore.so.4.6.2)
==12223==    by 0x514E4AE: QMetaObject::activate(QObject*, QMetaObject const*, int, void**) (in /usr/lib/libQtCore.so.4.6.2)
==12223==    by 0x5BDE8D3: QAbstractSlider::valueChanged(int) (in /usr/lib/libQtGui.so.4.6.2)
==12223==    by 0x58F4925: QAbstractSlider::setValue(int) (in /usr/lib/libQtGui.so.4.6.2)
==12223==    by 0x58F49FD: QAbstractSlider::triggerAction(QAbstractSlider::SliderAction) (in /usr/lib/libQtGui.so.4.6.2)
==12223==    by 0x58F4EB8: QAbstractSlider::setSliderPosition(int) (in /usr/lib/libQtGui.so.4.6.2)
==12223==    by 0x5995638: QSlider::mouseMoveEvent(QMouseEvent*) (in /usr/lib/libQtGui.so.4.6.2)
==12223==    by 0x556CF0E: QWidget::event(QEvent*) (in /usr/lib/libQtGui.so.4.6.2)
==12223==    by 0x58F4794: QAbstractSlider::event(QEvent*) (in /usr/lib/libQtGui.so.4.6.2)
==12223==    by 0x5995CDE: QSlider::event(QEvent*) (in /usr/lib/libQtGui.so.4.6.2)
==12223==  Address 0x0 is not stack'd, malloc'd or (recently) free'd


Название: Re: Проблема с ALSA
Отправлено: sergebegger от Июль 04, 2010, 16:40
Интересный момент - кто-же kill-яет микшер?
И как его от этого оградить?
Вот такой вариант работает...
Код:
void MainWindow::setVolume(int value)
{
    alsaMixer *amixer = new alsaMixer();
    amixer->setVolume(value,value);
}
но правильно-ли это?


Название: Re: Проблема с ALSA
Отправлено: Rcus от Июль 04, 2010, 20:08
Что значит другая? Различие в размере в сообщении Invalid read of size 8 объясняется отличием в размере указателя. mainwindow.cpp:20 - вызов виртуального метода, значит ошибка произошла во время доступа к vtbl, что в данном случае является следствием обращения к неинициализированному указателю на объект. "hint: line 10" указывал на mainwindow.cpp:10, где вы вместо инициализации MainWindow::amixer создали локальную переменную.

Всё это выводится из первого сообщения, куда еще точнее?


Название: Re: Проблема с ALSA
Отправлено: sergebegger от Июль 06, 2010, 01:36
"Учиться, учиться, и ещё раз учиться"((с) однако В.И. Ленин ) - для меня это до сих пор актуально..... Спасибо, разобрался....