C #, Mono 2.6.7 - SIGSEGV при наведении на TreeView - PullRequest
0 голосов
/ 26 октября 2011

Окружающая среда:
Моно 2.6.7
CentOS 5.4, 32-битный

У меня есть окно Gtk с различными стыковочными панелями (MonoDevelop.Components.Docking). В группе панелей с вкладками на одной панели происходит сбой приложения с SIGSEGV в очень специфической ситуации:

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

Вот трассировка стека при сбое приложения:

Stacktrace:

  at (wrapper managed-to-native) Gtk.Application.gtk_main () <0x00004>
  at (wrapper managed-to-native) Gtk.Application.gtk_main () <0x00004>
  at Gtk.Application.Run () <0x0000a>
  at MyApp.MainClass.Main (string[]) <0x002ad>
  at (wrapper runtime-invoke) <Module>.runtime_invoke_void_object (object,intptr,intptr,intptr) <0x00043>

Native stacktrace:
mono [0x80d93bb]
mono [0x8114180]
[0xdb6440]
/mydir/deps/lib/libcairo.so.2 [0x1f47178]
/mydir/deps/lib/libcairo.so.2 [0x1f432e0]
/mydir/deps/lib/libcairo.so.2 [0x1f4354d]
/mydir/deps/lib/libcairo.so.2 [0x1f17396]
/mydir/deps/lib/libcairo.so.2 [0x1f1989d]
/mydir/deps/lib/libcairo.so.2 [0x1f19cc1]
/mydir/deps/lib/libcairo.so.2 [0x1f164e6]
/mydir/deps/lib/libcairo.so.2 [0x1f06cb3]
/mydir/deps/lib/libcairo.so.2(cairo_fill_preserve+0x2c) [0x1eff00c]
/mydir/deps/lib/libcairo.so.2(cairo_fill+0x12) [0x1eff032]
/mydir/deps/lib/libgtk-x11-2.0.so.0 [0x345cc16]
/mydir/deps/lib/libgtk-x11-2.0.so.0(gtk_cell_renderer_render+0x92) [0x34596b2]
/mydir/deps/lib/libgtk-x11-2.0.so.0 [0x363594d]
/mydir/deps/lib/libgtk-x11-2.0.so.0 [0x3636689]
/mydir/deps/lib/libgtk-x11-2.0.so.0 [0x3632e88]
/mydir/deps/lib/libgtk-x11-2.0.so.0 [0x352804e]
/mydir/deps/lib/libgobject-2.0.so.0 [0x1ec5729]
/mydir/deps/lib/libgobject-2.0.so.0(g_closure_invoke+0x123) [0x1ec6f33]
/mydir/deps/lib/libgobject-2.0.so.0 [0x1ed80c1]
/mydir/deps/lib/libgobject-2.0.so.0(g_signal_emit_valist+0x68f) [0x1ed8d7f]
/mydir/deps/lib/libgobject-2.0.so.0(g_signal_emit+0x29) [0x1ed9179]
/mydir/deps/lib/libgtk-x11-2.0.so.0 [0x3645f78]
/mydir/deps/lib/libgtk-x11-2.0.so.0(gtk_main_do_event+0x507) [0x35225e7]
/mydir/deps/lib/libgdk-x11-2.0.so.0 [0xcfb38b]
/mydir/deps/lib/libgdk-x11-2.0.so.0(gdk_window_process_all_updates+0xf8) [0xcfba38]
/mydir/deps/lib/libgdk-x11-2.0.so.0 [0xcfba5b]
/mydir/deps/lib/libgdk-x11-2.0.so.0 [0xce1a18]
/mydir/deps/lib/libglib-2.0.so.0 [0x26ba01]
/mydir/deps/lib/libglib-2.0.so.0(g_main_context_dispatch+0x17c) [0x26d5bc]
/mydir/deps/lib/libglib-2.0.so.0 [0x270a26]
/mydir/deps/lib/libglib-2.0.so.0(g_main_loop_run+0x1a9) [0x270dd9]
/mydir/deps/lib/libgtk-x11-2.0.so.0(gtk_main+0xb4) [0x3522844]
[0x609524e]
[0x6095213]
[0xcc0766]
[0xd5e88c]
mono [0x8062076]
mono(mono_runtime_invoke+0x40) [0x8158b20]
mono(mono_runtime_exec_main+0xea) [0x815ed0a]
mono(mono_runtime_run_main+0x1ba) [0x81602fa]
mono(mono_main+0x1670) [0x80b5f80]
mono [0x80594a1]
/lib/libc.so.6(__libc_start_main+0xdc) [0x49ee9c]
mono(g_ascii_strcasecmp+0x95) [0x80593b1]

Debug info from gdb:

=================================================================
Got a SIGSEGV while executing native code. This usually indicates
a fatal error in the mono runtime or one of the native libraries 
used by your application.
=================================================================

Трудно дать какой-либо код, поскольку он является собственностью моего работодателя, и это довольно грязный код. Мне просто интересно, есть ли у кого-нибудь несколько советов по некоторым общим случаям, которые могут вызвать это, что я мог бы искать.

Также, пожалуйста, не просто отвечайте "используйте более позднюю версию Mono" и т. Д. Это среда, с которой мне дано работать. Если с этим связана какая-либо ошибка Mono, это будет полезной информацией.

Обратите внимание, что я нашел вопрос здесь: MonoTouch NullReference для каждого события / действия (SIGSEGV) ,
в нем упоминаются локальные компоненты пользовательского интерфейса с удаленными прикрепленными событиями. Я выполнил поиск по моему коду, и единственными компонентами локального интерфейса с событиями являются 2 пункта всплывающего меню. Однако в этой ситуации код не срабатывает, потому что я не запускаю меню (щелчок правой кнопкой мыши).

Спасибо.

Ответы [ 3 ]

0 голосов
/ 27 октября 2011

Вы сказали: «Пожалуйста, не просто отвечайте« используйте более позднюю версию Mono », но я просто не вижу, как вы не идете по этому пути. Возможно, вылетает из-за того, что GtkSharp устарел и глючит»Возможно, это Mono. Мы просто не знаем, что является причиной, учитывая опубликованную ошибку.

С учетом сказанного я бы написал тестовый пример с пользовательским интерфейсом в одном окне, а затем попытался изолироватьпроблема за пределами проприетарного приложения. Таким образом, если проблема все еще возникает, вы можете опубликовать здесь код, который будет проще для людей, чтобы точно определить проблему или даже помочь в регистрации ошибок в Mono или GtkSharp, и т.д ..

0 голосов
/ 28 октября 2011

Проблема оказалась в ошибке в пакете cairo, который мы использовали.Мы обновились до новой версии - проблема решена.Ошибка была связана с рендерингом pixbufs в ячейках.

К другим 2 постам, да, было бы здорово использовать более новую версию Mono.Тем не менее, мы работаем в условиях ограниченного времени и денег, поддерживая устаревшие проекты.Надеюсь, мы постараемся обновить Mono и протестировать все в следующем году.

0 голосов
/ 27 октября 2011

Mono 2.6.7 довольно старый, вы можете протестировать стабильный Mono 2.10.6?

...