2017-11-21 18 views
0

내 Gtkmm-3.0 응용 프로그램에서 빠른 Google 검색과 관련된 것으로 보이는 버그가 발생했지만 가능한 원인을 설명하지 못했습니다. 응용 프로그램이 무작위로 실패하고, 아무런 효과없이 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가 더 잘 수행 할 수 있습니다.

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