代码之家  ›  专栏  ›  技术社区  ›  user8981137

glib-2.0中的内存切片错误

  •  0
  • user8981137  · 技术社区  · 7 年前

    我在Gtkmm-3.0应用程序中遇到了一个bug,它似乎与我的快速谷歌搜索有关,但我无法找出可能的原因。应用程序将随机失败,我删除了在每次调用signal\u timeout()期间更新的所有代码,但没有任何效果。这似乎也与按键无关。

    由于GUI需要很长时间才能启动,Valgrind的帮助不大。任何来自Gtk/Glib用户或之前遇到此错误的人的建议都将不胜感激。下面是我最近的核心文件中的堆栈跟踪。

    (gdb) bt
        #0  0x00007f4b5de27720 in magazine_cache_push_magazine () at /lib64/libglib-2.0.so.0
        #1  0x00007f4b5de278e2 in private_thread_memory_cleanup () at /lib64/libglib-2.0.so.0
        #2  0x00007f4b5a6b6c22 in __nptl_deallocate_tsd () at /lib64/libpthread.so.0
        #3  0x00007f4b5a6b6e33 in start_thread () at /lib64/libpthread.so.0
        #4  0x00007f4b5cabf34d in clone () at /lib64/libc.so.6
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Philip Withnall    7 年前

    几乎可以肯定,这是应用程序或它使用的某个库中的堆损坏错误,而不是GLib中的错误。调试这些问题的唯一真正方法是使用Valgrind。确保使用 G_SLICE=always-malloc 在环境中设置,因为这将禁用GSlice并使用 malloc() 相反,哪个Valgrind可以更好地使用仪器。

    如果Valgrind确实不适用于您的应用程序,您可以尝试更简单的glibc堆一致性检查,通过设置 MALLOC_CHECK_=1 在环境中: https://www.gnu.org/software/libc/manual/html_node/Heap-Consistency-Checking.html#Heap-Consistency-Checking