2017-11-21 18 views
0

私のGtkmm-3.0アプリケーションでメモリが不足していると思われるバグがありましたが、原因を特定できませんでした。アプリケーションはランダムに失敗し、signal_timeout()を呼び出すたびに更新されるすべてのコードを削除しました。それはキー/ボタンの押下にも関連していないようです。glib-2.0でメモリスライシングエラーが発生しました

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

GLibのバグではなく、アプリケーションや使用するライブラリのヒープ破壊のバグです。これらの問題をデバッグする唯一の本当の方法は、Valgrindを使用することです。環境内にG_SLICE=always-mallocを設定して実行すると、GSliceが無効になり、代わりにmalloc()を使用するようになりました。

Valgrindのは、本当にあなたのアプリケーションのために動作しない場合、あなたは環境にMALLOC_CHECK_=1を設定することにより有効に簡単glibcのヒープ一貫性チェックを試みることができる:https://www.gnu.org/software/libc/manual/html_node/Heap-Consistency-Checking.html#Heap-Consistency-Checking

+0

私は絶対最低限にそれを取り除いて、実際に得ましたValgrindは妥当な時間内に実行されます。私は運が良かったかもしれませんが、時折、古いポインタにデータを書き込むことができる場所を見つけました。基礎は再び勝つ。 Gtkを使ったのは初めてのことですので、今後の参考になるように他のヒントを残しておきます。 – user8981137

関連する問題