【问题标题】:Memory slicing error in glib-2.0glib-2.0 中的内存切片错误
【发布时间】:2017-11-21 18:59:32
【问题描述】:

我在我的 Gtkmm-3.0 应用程序中遇到了一个错误,该错误似乎与我的快速谷歌搜索有关的内存有关,但我无法找出可能的原因。该应用程序将随机失败,并且我已经删除了在每次调用 signal_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

【问题讨论】:

    标签: c++11 gtk glib gtkmm3


    【解决方案1】:

    这几乎可以肯定是您的应用程序或其使用的某个库中的堆损坏错误,而不是 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

    【讨论】:

    • 我将它剥离到绝对最低限度,实际上让 Valgrind 在合理的时间内运行。我可能很幸运,但我确实找到了一个可以不时将数据写入过时指针的地方。基础再次获胜。这是我第一次使用 Gtk,所以我会保留其他提示以供将来参考。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    • 1970-01-01
    • 1970-01-01
    • 2019-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多