C#,Mono 2.6.7 - 将鼠标悬停在TreeView上时的SIGSEGV

时间:2011-10-26 15:01:01

标签: c# mono centos gtk# sigsegv

环境:
单声道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 bug,那将是有用的信息。

请注意,我确实在这里找到了一个问题:MonoTouch NullReference for every event/Action (SIGSEGV)
提到附加事件的本地UI组件被处置。我在我的代码中进行了搜索,只有带事件的本地UI组件是2个弹出菜单项。但是,在这种情况下代码没有被触发,因为我没有触发菜单(右键单击)。

谢谢。

3 个答案:

答案 0 :(得分:0)

单声道2.6.7有点陈旧,你能用稳定的单声道2.10.6进行测试吗?

答案 1 :(得分:0)

你说“请不要只回复”使用更高版本的Mono“但我不知道你怎么不沿着这条路走下去。也许崩溃来自GtkSharp过时和越野车,也许是单声道。我们只是不知道是什么原因导致它发布错误。

话虽如此,我会在一个窗口上编写一个带有UI的测试用例,然后尝试在专有应用程序之外隔离问题。这样,如果问题仍然存在,您可以在此处发布代码,以便人们更容易查明问题,甚至协助针对Mono或GtkSharp等提交错误文件。

答案 2 :(得分:0)

问题恰好是我们使用的cairo包中的一个错误。我们升级到更新版本 - 问题解决了。该错误与在单元格中渲染pixbuf有关。

对于其他2个帖子,是的,使用较新版本的Mono会很棒。但是,我们在时间/资金限制下工作,同时支持遗留项目。希望我们能够努力升级Mono并在明年测试一切。