0

我在我的 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
4

1 回答 1

1

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

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

于 2017-11-21T19:28:02.957 回答