我在我的GTKMM-3.0应用程序中遇到了一个错误,该应用程序似乎与我的快速Google搜索相关的内存,但是我无法取消可能的原因。该应用程序将随机失败,并且我删除了在每个呼叫signal_timeout()中更新的所有代码,但无效。它似乎与键/按钮都不相关。
Valgrind的帮助不大,因为GUI花了很长时间才能旋转。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
它几乎可以肯定是您的应用程序中的一个堆损坏或它使用的库之一,而不是glib中的错误。调试这些问题的唯一真正方法是使用Valgrind。确保使用环境中的G_SLICE=always-malloc
运行它,因为它将禁用GSLICE并改用malloc()
,哪个Valgrind可以更好地仪器。
如果Valgrind确实无法适用于您的应用程序,则可以尝试通过在环境中设置MALLOC_CHECK_=1
来启用更简单的GLIBC堆一致性检查:https://www.gnu.org/software/software/libc/manual/manual/html_node/HEAP-CONSISTINCY-CHECKING.HTML#HEAP-CONSISTINCY-CHECKING