2013-06-28 3 views
3

valgrind --leak-check=yes으로 내 C++ 응용 프로그램을 디버깅 할 수 있으며 가능한 메모리 누수에 대한 많은 정보를 얻고 있습니다. 이것은 Qt, POSIX 스레드 및 QuantLib을 사용하는 C++ 응용 프로그램입니다. 나는 정보가 정확하지 않다고 생각하고 그것을 테스트했고 앱이 아무 것도하지 않는 매우 간단한 Qt 앱이라 할지라도 많은 정보를 얻었습니다. 아마도 valgrind는 Qt 및 POSIX 스레드에 대해 혼동되는 메모리 정보를 오해하고 있습니다.Linux의 C++ Qt 응용 프로그램에서 메모리 누수를 확인하는 방법은 무엇입니까?

내 질문에 내가 할 수있는이 Qt 응용 프로그램을 올바르게 디버깅하는 방법, 이상적으로는 valgrind를 사용하는 것이지만 가능한 경우 다른 방법일까요?

==9419== Memcheck, a memory error detector 
==9419== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al. 
==9419== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info 
==9419== Command: ./qt_tradingclient_1 
==9419== Parent PID: 19797 
==9419== 
==9419== 
==9419== HEAP SUMMARY: 
==9419==  in use at exit: 1,587,688 bytes in 10,156 blocks 
==9419== total heap usage: 365,203 allocs, 355,047 frees, 92,510,461 bytes allocated 
==9419== 
==9419== 1 bytes in 1 blocks are possibly lost in loss record 3 of 5,210 
==9419== at 0x4C2B3F8: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) 
==9419== by 0x8AC36E0: g_malloc (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1) 
==9419== by 0x8AD9F5B: g_strdup (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1) 
==9419== by 0x88461DB: g_param_spec_string (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3400.1) 
==9419== by 0x1153F1B7: ??? (in /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0.2400.13) 
==9419== by 0x8855925: g_type_class_ref (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3400.1) 
==9419== by 0x883DDF0: g_object_newv (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3400.1) 
==9419== by 0x883E38B: g_object_new (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3400.1) 
==9419== by 0x1153D7DF: gtk_settings_get_for_screen (in /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0.2400.13) 
==9419== by 0x114EC298: ??? (in /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0.2400.13) 
==9419== by 0x883A5C3: g_cclosure_marshal_VOID__OBJECTv (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3400.1) 
==9419== by 0x8837406: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3400.1) 
==9419== 
==9419== 1 bytes in 1 blocks are possibly lost in loss record 4 of 5,210 
==9419== at 0x4C2B3F8: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) 
==9419== by 0x8AC36E0: g_malloc (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1) 
==9419== by 0x8AD9F5B: g_strdup (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1) 
==9419== by 0x88461DB: g_param_spec_string (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3400.1) 
==9419== by 0x114E1933: ??? (in /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0.2400.13) 
==9419== by 0x8855925: g_type_class_ref (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3400.1) 
==9419== by 0x170E3225: ??? (in /usr/lib/x86_64-linux-gnu/gtk-2.0/modules/libcanberra-gtk-module.so) 
==9419== by 0x170E4FB1: gtk_module_init (in /usr/lib/x86_64-linux-gnu/gtk-2.0/modules/libcanberra-gtk-module.so) 
==9419== by 0x114EB7F0: ??? (in /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0.2400.13) 
==9419== by 0x883713F: g_closure_invoke (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3400.1) 
==9419== by 0x884854F: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3400.1) 
==9419== by 0x88504AE: g_signal_emit_valist (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3400.1) 
==9419== 

// 그리고 더 많은, 그리고 마지막으로 요약 :

당신이 응용 프로그램에서 메모리가 누수하지만이 Valgrind의에서 검출되지 않았는지 확인하는 경우
==9419== 32,768 bytes in 16 blocks are possibly lost in loss record 5,208 of 5,210 
==9419== at 0x4C2B4F0: realloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) 
==9419== by 0x8AC377E: g_realloc (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1) 
==9419== by 0x8A931C2: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1) 
==9419== by 0x8A93632: g_array_insert_vals (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1) 
==9419== by 0x1151B084: ??? (in /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0.2400.13) 
==9419== by 0x1151B289: ??? (in /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0.2400.13) 
==9419== by 0x16EBA76B: ??? (in /usr/lib/x86_64-linux-gnu/gtk-2.0/2.10.0/engines/libmurrine.so) 
==9419== by 0x1151CBF0: ??? (in /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0.2400.13) 
==9419== by 0x11521066: gtk_rc_get_style (in /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0.2400.13) 
==9419== by 0x115F2BEF: ??? (in /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0.2400.13) 
==9419== by 0x115F35BD: gtk_widget_realize (in /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0.2400.13) 
==9419== by 0x115F4187: gtk_widget_set_parent (in /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0.2400.13) 
==9419== 
==9419== LEAK SUMMARY: 
==9419== definitely lost: 5,759 bytes in 31 blocks 
==9419== indirectly lost: 12,804 bytes in 396 blocks 
==9419==  possibly lost: 482,706 bytes in 2,236 blocks 
==9419== still reachable: 1,086,419 bytes in 7,493 blocks 
==9419==   suppressed: 0 bytes in 0 blocks 
==9419== Reachable blocks (those to which a pointer was found) are not shown. 
==9419== To see them, rerun with: --leak-check=full --show-reachable=yes 
==9419== 
==9419== For counts of detected and suppressed errors, rerun with: -v 
==9419== ERROR SUMMARY: 812 errors from 812 contexts (suppressed: 3 from 3) 
+0

간단한 Qt 앱의 valgrind 출력은 이미 [Valgrind 및 Qt를 사용중인 사람이 있습니까?] (http://stackoverflow.com/questions/1593717/is-anyone-using-valgrind-and-qt) –

+0

에서 이미 답변되었습니다. 아니, 내 질문에 대한 대답이 없다. 어떻게 디버깅하여 허위보고를 피할 수 있습니까? – 4pie0

+0

가능한 복제본 [valgrind 및 Qt를 사용하는 사람이 있습니까?] (http://stackoverflow.com/questions/1593717/is-anyone-using-valgrind-and-qt) – malat

답변

0

, 아마도 Velgrind은 몇 가지 문제를 찾는 것입니다 응용 프로그램을로드하십시오.

확실하지 않은 경우 사용중인 라이브러리가 메모리를 누출 할 수 있으며 확인해야합니다.

+0

OP는 다른 방식으로 의미가 있다고 생각합니다. 누설로 유출되지 않았 음을 감지하고 있습니다. –

관련 문제