The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Приложение падает при интенсивном использовании GTK::TreeVie"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"Приложение падает при интенсивном использовании GTK::TreeVie"  
Сообщение от HellFire (ok) on 21-Ноя-08, 12:01 
Доброго времени суток.
Программа с таблицей TreeView, на которую постоянно поступают новые данные. Я использую метод GTK::TreeView::queue_draw(), чтобы принудительно перерисовать таблицу, после того, как записываю новые данные в TreeModel.

Программа работает пару суток, затем падает, что меня очень сильно не устраивает.
Сообщение при падении:

GLib-GObject-ERROR **: file gsignal.c: line 646 (emission_pop): should not be reached
aborting...

Иногда вываливается Segmentation fault.

Использую gtkmm2-2.2.8, gcc 3.3.3, SuSE 9.3
Буду благодарен за любую помощь.

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Приложение падает при интенсивном использовании GTK::TreeVie"  
Сообщение от NuINu (??) on 21-Ноя-08, 14:55 
>[оверквотинг удален]
>
>Сообщение при падении:
>
>GLib-GObject-ERROR **: file gsignal.c: line 646 (emission_pop): should not be reached
>aborting...
>
>Иногда вываливается Segmentation fault.
>
>Использую gtkmm2-2.2.8, gcc 3.3.3, SuSE 9.3
>Буду благодарен за любую помощь.

добейся корки, и после этого посмотри стек, потому как это ассерт вызванный из glibc
означающий просто не найден данный emission в списке. возможно туда(в метод pop объекта emission) передали NULL или еще какой нибудь мусор.

про сегфаулт ничего не скажу. опять таки корку смотри.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Приложение падает при интенсивном использовании GTK::TreeVie"  
Сообщение от HellFire (ok) on 27-Ноя-08, 16:21 

Запустил приложение через gdb, вот что получил при падении:

//-----------------------------------------------------------------
(monitor-linux:1940): GLib-GObject-CRITICAL **: file gobject.c: line 1337 (g_object_unref): assertion `G_IS_OBJECT (object)' failed

(monitor-linux:1940): Gtk-CRITICAL **: file gtkwidget.c: line 1827 (gtk_widget_hide): assertion `GTK_IS_WIDGET (widget)' failed

(monitor-linux:1940): GLib-GObject-CRITICAL **: file gobject.c: line 1337 (g_object_unref): assertion `G_IS_OBJECT (object)' failed

(monitor-linux:1940): Gtk-CRITICAL **: file gtkwidget.c: line 2176 (gtk_widget_queue_draw): assertion `GTK_IS_WIDGET (widget)' failed

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 1086968256 (LWP 1940)]
0x409f4fd7 in _int_malloc () from /lib/tls/libc.so.6
(gdb) where
#0 0x409f4fd7 in _int_malloc () from /lib/tls/libc.so.6
#1 0x409f6a14 in malloc () from /lib/tls/libc.so.6
#2 0x409ecac3 in vasprintf () from /lib/tls/libc.so.6
#3 0x40838dd0 in g_strdup_vprintf () from /opt/gnome/lib/libglib-2.0.so.0
#4 0x4083a468 in g_string_append_printf_internal () from /opt/gnome/lib/libglib-2.0.so.0
#5 0x4083a4a4 in g_string_append_printf () from /opt/gnome/lib/libglib-2.0.so.0
#6 0x4082ae4c in g_log_default_handler () from /opt/gnome/lib/libglib-2.0.so.0
#7 0x4082b0b6 in g_logv () from /opt/gnome/lib/libglib-2.0.so.0
#8 0x4082b2e2 in g_log () from /opt/gnome/lib/libglib-2.0.so.0
#9 0x4047b048 in gtk_widget_queue_draw () from /opt/gnome/lib/libgtk-x11-2.0.so.0
#10 0x401b1886 in Gtk::Widget::queue_draw () from /opt/gnome/lib/libgtkmm-2.0.so.1
#11 0x0806f0d7 in TableWindow::on_dispatcher_update (this=0xbfffe4a0) at ms_window.cc:222 //--------------------------------вызов метода из моего кода
#12 0x0806a34e in SigC::ClassSlot0_<void, TableWindow>::proxy (s=0x80e9450) at class_slot.h:82
#13 0x08066718 in SigC::Signal0<void, SigC::Marshal<void> >::emit_ (data=0x80e7340) at signal.h:625
#14 0x407a173b in Glib::DispatchNotifier::pipe_io_handler () from /opt/gnome/lib/libglibmm-2.0.so.1
#15 0x407a2213 in SigC::ClassSlot1_<bool, Glib::IOCondition, Glib::DispatchNotifier>::proxy () from /opt/gnome/lib/libglibmm-2.0.so.1
#16 0x407a490d in Glib::IOSource::dispatch () from /opt/gnome/lib/libglibmm-2.0.so.1
#17 0x407a4b77 in Glib::Source::dispatch_vfunc () from /opt/gnome/lib/libglibmm-2.0.so.1
#18 0x408229ca in g_main_context_dispatch () from /opt/gnome/lib/libglib-2.0.so.0
#19 0x40824adb in g_main_context_iterate () from /opt/gnome/lib/libglib-2.0.so.0
#20 0x40824d07 in g_main_loop_run () from /opt/gnome/lib/libglib-2.0.so.0
#21 0x4039311f in gtk_main () from /opt/gnome/lib/libgtk-x11-2.0.so.0
#22 0x40150bd7 in Gtk::Main::run_impl () from /opt/gnome/lib/libgtkmm-2.0.so.1
#23 0x40150ca5 in Gtk::Main::run () from /opt/gnome/lib/libgtkmm-2.0.so.1
#24 0x08069916 in main (argc=1, argv=0xbfffe864) at ms_main.cc:138
//-----------------------------------------------------------------

В классе TableWindow есть поле
//-----------------------------------------------------------------
Glib::Dispatcher dispatcher_update;
//-----------------------------------------------------------------

В конструкторе класса TableWindow я присоединяю обработчик (метод TableWindow::on_dispatcher_update() ) к диспатчеру
//-----------------------------------------------------------------
   this->dispatcher_update.connect(SigC::slot_class(*this,
               &TableWindow::on_dispatcher_update) );
//-----------------------------------------------------------------

А потом в отдельном потоке пишу следующее, чтобы вызвать перерисовку таблицы:
//-----------------------------------------------------------------
w->dispatcher_update();
//-----------------------------------------------------------------

А вот и метод TableWindow::on_dispatcher_update()
//-----------------------------------------------------------------
void TableWindow::on_dispatcher_update()
{
    m_TreeView.queue_draw();
}
//-----------------------------------------------------------------

По-прежнему, не могу отыскать ошибку.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Приложение падает при интенсивном использовании GTK::TreeVie"  
Сообщение от NuINu (??) on 27-Ноя-08, 16:55 
>
>Запустил приложение через gdb, вот что получил при падении:
>

а вы, простите, еще и потоки используете?
ууу... по мне так у вас слишком сложное приложение.

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

тут возможны варианты.
а) вы их где то затерли
б) передали неправильный параметр в функцию(искуственно заткнув рот компилятору приведением типов)
в) где то отсоединили объект (счетчик ссылок на стал равным нулю) и его удалила система управления объектами gobject. в дальнейшем вы его пытаетесь использвать как будто ничего не случилось.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Приложение падает при интенсивном использовании GTK::TreeVie"  
Сообщение от Michelnok (??) on 28-Ноя-08, 02:48 
>Program received signal SIGSEGV, Segmentation fault.
>[Switching to Thread 1086968256 (LWP 1940)]
>0x409f4fd7 in _int_malloc () from /lib/tls/libc.so.6

Скорее всего память где-то раньше была перепахана, если свалилось в malloc.
Поэтому искать надо не в функциях выше по стеку, а в предыдущих действиях.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру