object-> ref_count> 0使用webkitgtk时断言失败

时间:2016-03-24 03:52:13

标签: webkit gtk

我正在尝试创建托盘菜单的应用。其中一个托盘菜单项创建一个连接到登录服务的窗口。然而,尽管它似乎有效,但我仍然得到断言失败。我必须做一些简单的错误,但是什么呢?

以下程序演示了这个问题。

TEST.CPP

#include <gtk/gtk.h>
#include <webkit/webkit.h>
#include <stdlib.h>

int main(int argc, char* argv[])
{
  GtkWidget     * web_window = NULL;
  WebKitWebView * web_view = NULL;

  gtk_init(0L, 0L);

  if (web_window = gtk_window_new(GTK_WINDOW_TOPLEVEL)){
    //g_object_ref(G_OBJECT(web_window));
    gtk_window_set_default_size(GTK_WINDOW(web_window), 800, 600);

    g_signal_connect(web_window, "delete_event", G_CALLBACK(gtk_widget_hide_on_delete), NULL);

    if (web_view = WEBKIT_WEB_VIEW(webkit_web_view_new())){
      //g_object_ref(G_OBJECT(web_view));
      gtk_window_set_title(GTK_WINDOW(web_window), "Web View Test");
      gtk_container_add(GTK_CONTAINER(web_window), GTK_WIDGET(web_view));

      webkit_web_view_load_uri(web_view, "http://www.google.com/");
      gtk_widget_grab_focus(GTK_WIDGET(web_view));

      gtk_widget_show_all(web_window);
      gtk_window_present(GTK_WINDOW(web_window));

      gtk_main();
    }
    else
      printf("Failed to create WebView\n");
  }
  return 0;
}

编译:

g++ test.cpp $(pkg-config --cflags --libs webkitgtk-3.0) $(pkg-config --cflags --libs gtk+-3.0)

打开窗口并加载URL后,我看到这些断言失败:

(a.out:20179): GLib-GObject-CRITICAL **: g_object_ref: assertion 'object->ref_count > 0' failed

(a.out:20179): GLib-GObject-CRITICAL **: g_object_unref: assertion 'object->ref_count > 0' failed

当我然后单击关闭按钮(应隐藏窗口)时,我会看到这些断言失败:

(a.out:20179): GLib-GObject-CRITICAL **: g_object_ref: assertion 'object->ref_count > 0' failed

(a.out:20179): GLib-GObject-CRITICAL **: g_object_unref: assertion 'object->ref_count > 0' failed

正如您所看到的,我尝试将引用计数添加到web_window和web_view以查看问题是否存在,但它没有任何区别。

启用G_DEBUG =致命警告产生了一个核心转储,我在下面用gdb回溯。

Program terminated with signal SIGTRAP, Trace/breakpoint trap.
#0  0x00007fdd04662c13 in g_logv () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
(gdb) bt
#0  0x00007fdd04662c13 in g_logv () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#1  0x00007fdd04662d72 in g_log () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#2  0x00007fdd090c9aea in g_object_ref ()
   from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#3  0x00007fdd090de05f in g_signal_emit_valist ()
   from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#4  0x00007fdd090dece2 in g_signal_emit ()
   from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#5  0x00007fdd095345e6 in ?? () from /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#6  0x00007fdd0953609a in gtk_style_context_invalidate ()
   from /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#7  0x00007fdd09537e4c in ?? () from /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#8  0x00007fdd090c9dba in g_object_unref ()
   from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#9  0x00007fdd08440133 in derefGPtr<_GtkStyleContext> (ptr=<optimized out>)
    at ../Source/WTF/wtf/gobject/GRefPtr.h:235
#10 ~GRefPtr (this=0x7ffd0e22c3d0, __in_chrg=<optimized out>)
    at ../Source/WTF/wtf/gobject/GRefPtr.h:70
#11 WebCore::styleColor (themePart=themePart@entry=WebCore::Entry, 
    state=state@entry=(GTK_STATE_FLAG_SELECTED | GTK_STATE_FLAG_FOCUSED), 
    colorType=colorType@entry=WebCore::StyleColorForeground)
    at ../Source/WebCore/platform/gtk/RenderThemeGtk3.cpp:1098
#12 0x00007fdd084401f5 in WebCore::RenderThemeGtk::platformActiveSelectionForegr---Type <return> to continue, or q <return> to quit--- 
oundColor (this=<optimized out>)
    at ../Source/WebCore/platform/gtk/RenderThemeGtk3.cpp:1121
#13 0x00007fdd07dba689 in WebCore::RenderTheme::activeSelectionForegroundColor
    (this=0x7fdcf40e2870) at ../Source/WebCore/rendering/RenderTheme.cpp:567
#14 0x00007fdd07d6e521 in WebCore::RenderObject::selectionColor (
    this=0x7fdc811b4738, colorProperty=335)
    at ../Source/WebCore/rendering/RenderObject.cpp:1462
#15 0x00007fdd07d6e55e in WebCore::RenderObject::selectionForegroundColor (
    this=this@entry=0x7fdc811b4738)
    at ../Source/WebCore/rendering/RenderObject.cpp:1469
#16 0x00007fdd07de27c4 in WebCore::computeTextSelectionPaintStyle (
    textPaintStyle=..., renderer=..., lineStyle=..., paintInfo=..., 
    paintSelectedTextOnly=@0x7ffd0e22c5f1: false, 
    paintSelectedTextSeparately=@0x7ffd0e22c5f2: false, 
    selectionShadow=@0x7ffd0e22c628: 0x0)
    at ../Source/WebCore/rendering/TextPaintStyle.cpp:127
#17 0x00007fdd07c5265a in WebCore::InlineTextBox::paint (this=0x1956f60, 
    paintInfo=..., paintOffset=...)
    at ../Source/WebCore/rendering/InlineTextBox.cpp:575
#18 0x00007fdd07c4bc91 in WebCore::InlineFlowBox::paint (
    this=this@entry=0x1956fc0, paintInfo=..., paintOffset=..., lineTop=..., 
    lineTop@entry=..., lineBottom=..., lineBottom@entry=...)
    at ../Source/WebCore/rendering/InlineFlowBox.cpp:1162
---Type <return> to continue, or q <return> to quit---
#19 0x00007fdd07dd46c1 in WebCore::RootInlineBox::paint (this=0x1956fc0, 
    paintInfo=..., paintOffset=..., lineTop=..., lineBottom=...)
    at ../Source/WebCore/rendering/RootInlineBox.cpp:210
#20 0x00007fdd07d4252e in WebCore::RenderLineBoxList::paint (
    this=0x7fdc811b62e0, renderer=0x7fdc811b6240, paintInfo=..., 
    paintOffset=...) at ../Source/WebCore/rendering/RenderLineBoxList.cpp:265
#21 0x00007fdd07c59759 in WebCore::RenderBlock::paintContents (
    this=this@entry=0x7fdc811b6240, paintInfo=..., paintOffset=...)
    at ../Source/WebCore/rendering/RenderBlock.cpp:2373
#22 0x00007fdd07c6a473 in WebCore::RenderBlock::paintObject (
    this=0x7fdc811b6240, paintInfo=..., paintOffset=...)
    at ../Source/WebCore/rendering/RenderBlock.cpp:2509
#23 0x00007fdd07c57135 in WebCore::RenderBlock::paint (this=0x7fdc811b6240, 
    paintInfo=..., paintOffset=...)
    at ../Source/WebCore/rendering/RenderBlock.cpp:2186
#24 0x00007fdd07c42b4c in WebCore::InlineElementBox::paint (this=0x195b4c0, 
    paintInfo=..., paintOffset=...)
    at ../Source/WebCore/rendering/InlineElementBox.cpp:88
#25 0x00007fdd07c4bc91 in WebCore::InlineFlowBox::paint (
    this=this@entry=0x195b500, paintInfo=..., paintOffset=..., lineTop=..., 
    lineTop@entry=..., lineBottom=..., lineBottom@entry=...)
    at ../Source/WebCore/rendering/InlineFlowBox.cpp:1162
#26 0x00007fdd07dd46c1 in WebCore::RootInlineBox::paint (this=0x195b500, 
---Type <return> to continue, or q <return> to quit---
    paintInfo=..., paintOffset=..., lineTop=..., lineBottom=...)
    at ../Source/WebCore/rendering/RootInlineBox.cpp:210
#27 0x00007fdd07d4252e in WebCore::RenderLineBoxList::paint (
    this=0x7fdc811b63a0, renderer=0x7fdc811b6300, paintInfo=..., 
    paintOffset=...) at ../Source/WebCore/rendering/RenderLineBoxList.cpp:265
#28 0x00007fdd07c59759 in WebCore::RenderBlock::paintContents (
    this=this@entry=0x7fdc811b6300, paintInfo=..., paintOffset=...)
    at ../Source/WebCore/rendering/RenderBlock.cpp:2373
#29 0x00007fdd07c6a473 in WebCore::RenderBlock::paintObject (
    this=0x7fdc811b6300, paintInfo=..., paintOffset=...)
    at ../Source/WebCore/rendering/RenderBlock.cpp:2509
#30 0x00007fdd07c57135 in WebCore::RenderBlock::paint (this=0x7fdc811b6300, 
    paintInfo=..., paintOffset=...)
    at ../Source/WebCore/rendering/RenderBlock.cpp:2186
#31 0x00007fdd07c5988a in WebCore::RenderBlock::paintChild (
    this=this@entry=0x7fdc811b63c0, child=..., paintInfo=..., paintOffset=..., 
    paintInfoForChild=..., usePrintRect=usePrintRect@entry=false)
    at ../Source/WebCore/rendering/RenderBlock.cpp:2423
#32 0x00007fdd07c59b72 in WebCore::RenderBlock::paintChildren (
    this=0x7fdc811b63c0, paintInfo=..., paintOffset=..., 
    paintInfoForChild=..., usePrintRect=false)
    at ../Source/WebCore/rendering/RenderBlock.cpp:2393
#33 0x00007fdd07c59730 in WebCore::RenderBlock::paintContents (
---Type <return> to continue, or q <return> to quit---
    this=this@entry=0x7fdc811b63c0, paintInfo=..., paintOffset=...)
    at ../Source/WebCore/rendering/RenderBlock.cpp:2386
#34 0x00007fdd07c6a473 in WebCore::RenderBlock::paintObject (
    this=0x7fdc811b63c0, paintInfo=..., paintOffset=...)
    at ../Source/WebCore/rendering/RenderBlock.cpp:2509
#35 0x00007fdd07c57135 in WebCore::RenderBlock::paint (this=0x7fdc811b63c0, 
    paintInfo=..., paintOffset=...)
    at ../Source/WebCore/rendering/RenderBlock.cpp:2186
#36 0x00007fdd07c5988a in WebCore::RenderBlock::paintChild (
    this=this@entry=0x7fdc811b69c0, child=..., paintInfo=..., paintOffset=..., 
    paintInfoForChild=..., usePrintRect=usePrintRect@entry=false)
    at ../Source/WebCore/rendering/RenderBlock.cpp:2423
#37 0x00007fdd07c59b72 in WebCore::RenderBlock::paintChildren (
    this=0x7fdc811b69c0, paintInfo=..., paintOffset=..., 
    paintInfoForChild=..., usePrintRect=false)
    at ../Source/WebCore/rendering/RenderBlock.cpp:2393
#38 0x00007fdd07c59730 in WebCore::RenderBlock::paintContents (
    this=this@entry=0x7fdc811b69c0, paintInfo=..., paintOffset=...)
    at ../Source/WebCore/rendering/RenderBlock.cpp:2386
#39 0x00007fdd07c6a473 in WebCore::RenderBlock::paintObject (
    this=0x7fdc811b69c0, paintInfo=..., paintOffset=...)
    at ../Source/WebCore/rendering/RenderBlock.cpp:2509
#40 0x00007fdd07c57135 in WebCore::RenderBlock::paint (this=0x7fdc811b69c0, 
---Type <return> to continue, or q <return> to quit---
    paintInfo=..., paintOffset=...)
    at ../Source/WebCore/rendering/RenderBlock.cpp:2186
#41 0x00007fdd07c5988a in WebCore::RenderBlock::paintChild (
    this=this@entry=0x7fdc811b6a80, child=..., paintInfo=..., paintOffset=..., 
    paintInfoForChild=..., usePrintRect=usePrintRect@entry=false)
    at ../Source/WebCore/rendering/RenderBlock.cpp:2423
#42 0x00007fdd07c59b72 in WebCore::RenderBlock::paintChildren (
    this=0x7fdc811b6a80, paintInfo=..., paintOffset=..., 
    paintInfoForChild=..., usePrintRect=false)
    at ../Source/WebCore/rendering/RenderBlock.cpp:2393
#43 0x00007fdd07c59730 in WebCore::RenderBlock::paintContents (
    this=this@entry=0x7fdc811b6a80, paintInfo=..., paintOffset=...)
    at ../Source/WebCore/rendering/RenderBlock.cpp:2386
#44 0x00007fdd07c6a473 in WebCore::RenderBlock::paintObject (
    this=0x7fdc811b6a80, paintInfo=..., paintOffset=...)
    at ../Source/WebCore/rendering/RenderBlock.cpp:2509
#45 0x00007fdd07c57135 in WebCore::RenderBlock::paint (this=0x7fdc811b6a80, 
    paintInfo=..., paintOffset=...)
    at ../Source/WebCore/rendering/RenderBlock.cpp:2186
#46 0x00007fdd07c5988a in WebCore::RenderBlock::paintChild (
    this=this@entry=0x7fdc811b6b40, child=..., paintInfo=..., paintOffset=..., 
    paintInfoForChild=..., usePrintRect=usePrintRect@entry=false)
    at ../Source/WebCore/rendering/RenderBlock.cpp:2423
---Type <return> to continue, or q <return> to quit---
#47 0x00007fdd07c59b72 in WebCore::RenderBlock::paintChildren (
    this=0x7fdc811b6b40, paintInfo=..., paintOffset=..., 
    paintInfoForChild=..., usePrintRect=false)
    at ../Source/WebCore/rendering/RenderBlock.cpp:2393
#48 0x00007fdd07c59730 in WebCore::RenderBlock::paintContents (
    this=this@entry=0x7fdc811b6b40, paintInfo=..., paintOffset=...)
    at ../Source/WebCore/rendering/RenderBlock.cpp:2386
#49 0x00007fdd07c6a473 in WebCore::RenderBlock::paintObject (
    this=0x7fdc811b6b40, paintInfo=..., paintOffset=...)
    at ../Source/WebCore/rendering/RenderBlock.cpp:2509
#50 0x00007fdd07c57135 in WebCore::RenderBlock::paint (this=0x7fdc811b6b40, 
    paintInfo=..., paintOffset=...)
    at ../Source/WebCore/rendering/RenderBlock.cpp:2186
#51 0x00007fdd07c5988a in WebCore::RenderBlock::paintChild (
    this=this@entry=0x7fdc98144540, child=..., paintInfo=..., paintOffset=..., 
    paintInfoForChild=..., usePrintRect=usePrintRect@entry=false)
    at ../Source/WebCore/rendering/RenderBlock.cpp:2423
#52 0x00007fdd07c59b72 in WebCore::RenderBlock::paintChildren (
    this=0x7fdc98144540, paintInfo=..., paintOffset=..., 
    paintInfoForChild=..., usePrintRect=false)
    at ../Source/WebCore/rendering/RenderBlock.cpp:2393
#53 0x00007fdd07c59730 in WebCore::RenderBlock::paintContents (
    this=this@entry=0x7fdc98144540, paintInfo=..., paintOffset=...)
---Type <return> to continue, or q <return> to quit---
    at ../Source/WebCore/rendering/RenderBlock.cpp:2386
#54 0x00007fdd07c6a473 in WebCore::RenderBlock::paintObject (
    this=0x7fdc98144540, paintInfo=..., paintOffset=...)
    at ../Source/WebCore/rendering/RenderBlock.cpp:2509
#55 0x00007fdd07c57135 in WebCore::RenderBlock::paint (this=0x7fdc98144540, 
    paintInfo=..., paintOffset=...)
    at ../Source/WebCore/rendering/RenderBlock.cpp:2186
#56 0x00007fdd07d15c74 in WebCore::RenderLayer::paintForegroundForFragmentsWithPhase (this=this@entry=0x193c340, 
    phase=phase@entry=WebCore::PaintPhaseForeground, layerFragments=..., 
    context=context@entry=0x7ffd0e22e7c0, localPaintingInfo=..., 
    paintBehavior=paintBehavior@entry=0, 
    subtreePaintRootForRenderer=subtreePaintRootForRenderer@entry=0x0)
    at ../Source/WebCore/rendering/RenderLayer.cpp:4477
#57 0x00007fdd07d1aad6 in WebCore::RenderLayer::paintForegroundForFragments (
    this=this@entry=0x193c340, layerFragments=..., 
    context=context@entry=0x7ffd0e22e7c0, 
    transparencyLayerContext=transparencyLayerContext@entry=0x7ffd0e22e7c0, 
    transparencyPaintDirtyRect=..., 
    haveTransparency=haveTransparency@entry=false, localPaintingInfo=..., 
    paintBehavior=paintBehavior@entry=0, 
    subtreePaintRootForRenderer=subtreePaintRootForRenderer@entry=0x0, 
    selectionOnly=selectionOnly@entry=false, 
---Type <return> to continue, or q <return> to quit---
    forceBlackText=forceBlackText@entry=false)
    at ../Source/WebCore/rendering/RenderLayer.cpp:4441
#58 0x00007fdd07d27406 in WebCore::RenderLayer::paintLayerContents (
    this=this@entry=0x193c340, context=context@entry=0x7ffd0e22e7c0, 
    paintingInfo=..., paintFlags=224)
    at ../Source/WebCore/rendering/RenderLayer.cpp:4162
#59 0x00007fdd07d27a7f in WebCore::RenderLayer::paintLayerContentsAndReflection
    (this=this@entry=0x193c340, context=context@entry=0x7ffd0e22e7c0, 
    paintingInfo=..., paintFlags=paintFlags@entry=224)
    at ../Source/WebCore/rendering/RenderLayer.cpp:3858
#60 0x00007fdd07d283d9 in WebCore::RenderLayer::paintLayer (
    this=this@entry=0x193c340, context=context@entry=0x7ffd0e22e7c0, 
    paintingInfo=..., paintFlags=paintFlags@entry=224)
    at ../Source/WebCore/rendering/RenderLayer.cpp:3839
#61 0x00007fdd07d29d02 in WebCore::RenderLayer::paintList (this=0x192bcd0, 
    list=0x7fdc8115a830, context=0x7ffd0e22e7c0, paintingInfo=..., 
    paintFlags=224) at ../Source/WebCore/rendering/RenderLayer.cpp:4255
#62 0x00007fdd07d27520 in WebCore::RenderLayer::paintLayerContents (
    this=this@entry=0x192bcd0, context=context@entry=0x7ffd0e22e7c0, 
    paintingInfo=..., paintFlags=224)
    at ../Source/WebCore/rendering/RenderLayer.cpp:4173
#63 0x00007fdd07d27a7f in WebCore::RenderLayer::paintLayerContentsAndReflection
    (this=this@entry=0x192bcd0, context=context@entry=0x7ffd0e22e7c0, 
---Type <return> to continue, or q <return> to quit---
    paintingInfo=..., paintFlags=paintFlags@entry=224)
    at ../Source/WebCore/rendering/RenderLayer.cpp:3858
#64 0x00007fdd07d283d9 in WebCore::RenderLayer::paintLayer (
    this=this@entry=0x192bcd0, context=context@entry=0x7ffd0e22e7c0, 
    paintingInfo=..., paintFlags=paintFlags@entry=224)
    at ../Source/WebCore/rendering/RenderLayer.cpp:3839
#65 0x00007fdd07d29d02 in WebCore::RenderLayer::paintList (this=0x180d8f0, 
    list=0x7fdc8115a840, context=0x7ffd0e22e7c0, paintingInfo=..., 
    paintFlags=224) at ../Source/WebCore/rendering/RenderLayer.cpp:4255
#66 0x00007fdd07d27520 in WebCore::RenderLayer::paintLayerContents (
    this=this@entry=0x180d8f0, context=context@entry=0x7ffd0e22e7c0, 
    paintingInfo=..., paintFlags=224)
    at ../Source/WebCore/rendering/RenderLayer.cpp:4173
#67 0x00007fdd07d27a7f in WebCore::RenderLayer::paintLayerContentsAndReflection
    (this=this@entry=0x180d8f0, context=context@entry=0x7ffd0e22e7c0, 
    paintingInfo=..., paintFlags=paintFlags@entry=0)
    at ../Source/WebCore/rendering/RenderLayer.cpp:3858
#68 0x00007fdd07d283d9 in WebCore::RenderLayer::paintLayer (
    this=this@entry=0x180d8f0, context=context@entry=0x7ffd0e22e7c0, 
    paintingInfo=..., paintFlags=paintFlags@entry=0)
    at ../Source/WebCore/rendering/RenderLayer.cpp:3839
#69 0x00007fdd07d2867e in WebCore::RenderLayer::paint (
    this=this@entry=0x180d8f0, context=context@entry=0x7ffd0e22e7c0, 
---Type <return> to continue, or q <return> to quit---
    damageRect=..., paintBehavior=0, 
    subtreePaintRoot=subtreePaintRoot@entry=0x0, region=region@entry=0x0, 
    paintFlags=paintFlags@entry=0)
    at ../Source/WebCore/rendering/RenderLayer.cpp:3623
#70 0x00007fdd07bdda1d in WebCore::FrameView::paintContents (
    this=0x7fdcf40dd800, p=0x7ffd0e22e7c0, rect=...)
    at ../Source/WebCore/page/FrameView.cpp:3507
#71 0x00007fdd082ef894 in WebCore::ScrollView::paint (this=0x7fdcf40dd800, 
    context=0x7ffd0e22e7c0, rect=...)
    at ../Source/WebCore/platform/ScrollView.cpp:1162

#72 0x00007fdd074bc3bb in paintWebView (dirtyRegion=..., frame=0x7fdcf40f5c00, 
    webView=0x17dc440)
    at ../Source/WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp:588
#73 WebKit::ChromeClient::paint (this=0x173da00)
    at ../Source/WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp:631
#74 0x00007fdd075c67b1 in WebCore::ThreadTimers::sharedTimerFiredInternal (
    this=0x7fdcf4108f50) at ../Source/WebCore/platform/ThreadTimers.cpp:132
#75 0x00007fdd075dea62 in WebCore::sharedTimerTimeoutCallback ()
    at ../Source/WebCore/platform/gtk/SharedTimerGtk.cpp:49
#76 0x00007fdd0465c703 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#77 0x00007fdd0465bce5 in g_main_context_dispatch ()
   from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#78 0x00007fdd0465c048 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
---Type <return> to continue, or q <return> to quit---
#79 0x00007fdd0465c30a in g_main_loop_run ()
   from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#80 0x00007fdd094a6e25 in gtk_main ()
   from /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#81 0x0000000000400d52 in main ()

1 个答案:

答案 0 :(得分:0)

很自然地认为您做错了事,但是当遇到GLib-GObject-CRITICAL失败时,问题几乎与代码无关,而与GNOME生态系统无关。

例如,通过在较旧版本的GNOME上运行它们,我可以在C ++ / Python中用完善的项目和准系统GTK + 3应用程序重现此问题,但该问题在最新版本的GNOME中消失了。

由于我没有在两次测试之间修改代码,所以代码必须没问题。

如果考虑到计划中的过时开发,强迫软件用户升级GNOME以便使用它,那么今天可能就不再发行了。

但是,如果您是针对旧版本的GNOME进行开发,或者由于某种原因而在最新版本的GNOME中出现此(或新的)GLib-GObject-CRITICAL故障,那么最简单的解决方案是将其过滤掉。

我个人将在适用的情况下进行单元测试,并忽略以下GLib-GObject-CRITICAL故障模式:

  • object->ref_count > 0
  • source->priv != NULL