我在Gtkmm-3.0应用程序中遇到了一个错误,该错误似乎与我的快速谷歌搜索有关,但我一直无法弄清楚可能的原因。应用程序将随机失败,并且我已经删除了在每次调用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
答案 0 :(得分: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