Detecting memleaks with valgrind

Hi everyone,

It’s about how to interpret a valgrind report if there’s no debug symbols from libg* libs in system. Is there some way to get more info what part of code can trigger valgrind to report “definitely lost”?

Code in C compiled with “-g -ggdb -fno-omit-frame-pointer” flags, Valgrind run as:

G_DEBUG="gc-friendly:bind-now-modules" \
valgrind --show-leak-kinds=definite --leak-check=full \
  --suppressions="/usr/share/glib-2.0/valgrind/glib.supp" \
  --suppressions="/usr/share/gtk-4.0/valgrind/gtk.supp" \
  --suppressions="~/pango.supp" \
  ./program $@

displays

==20275== HEAP SUMMARY:
==20275==     in use at exit: 18,267,665 bytes in 52,721 blocks
==20275==   total heap usage: 607,968 allocs, 555,247 frees, 184,104,484 bytes allocated
==20275== 
==20275== 164 (96 direct, 68 indirect) bytes in 1 blocks are definitely lost in loss record 16,524 of 19,366
==20275==    at 0x484A993: calloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==20275==    by 0x55DB7E9: g_malloc0 (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7800.0)
==20275==    by 0x5554C42: g_type_create_instance (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.7800.0)
==20275==    by 0x553B1EF: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.7800.0)
==20275==    by 0x553C745: g_object_new_with_properties (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.7800.0)
==20275==    by 0x553D5F0: g_object_new (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.7800.0)
==20275==    by 0x53BE442: g_io_module_new (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.7800.0)
==20275==    by 0x53BE741: g_io_modules_scan_all_in_directory_with_scope (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.7800.0)
==20275==    by 0x4AEEF4B: gtk_init_check (in /usr/lib/x86_64-linux-gnu/libgtk-4.so.1.1200.3)
==20275==    by 0x4AEF39C: gtk_init (in /usr/lib/x86_64-linux-gnu/libgtk-4.so.1.1200.3)
==20275==    by 0x4A2685B: ??? (in /usr/lib/x86_64-linux-gnu/libgtk-4.so.1.1200.3)
==20275==    by 0x5549ADC: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.7800.0)
==20275== 
==20275== 174 (32 direct, 142 indirect) bytes in 2 blocks are definitely lost in loss record 16,553 of 19,366
==20275==    at 0x4845828: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==20275==    by 0x55D9CD1: g_malloc (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7800.0)
==20275==    by 0x55F2B6C: g_slice_alloc0 (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7800.0)
==20275==    by 0x55BD18B: ??? (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7800.0)
==20275==    by 0x55BD84D: g_error_new_valist (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7800.0)
==20275==    by 0x55BDA9E: g_set_error (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7800.0)
==20275==    by 0x5484AD0: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.7800.0)
==20275==    by 0x53F9C53: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.7800.0)
==20275==    by 0x5604A31: ??? (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7800.0)
==20275==    by 0x5602330: ??? (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7800.0)
==20275==    by 0x5755B59: start_thread (pthread_create.c:444)
==20275==    by 0x57E6463: clone (clone.S:100)
==20275== 
==20275== 672 (56 direct, 616 indirect) bytes in 1 blocks are definitely lost in loss record 18,109 of 19,366
==20275==    at 0x5554DF1: g_type_create_instance (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.7800.0)
==20275==    by 0x553B1EF: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.7800.0)
==20275==    by 0x553D272: g_object_new_valist (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.7800.0)
==20275==    by 0x553D5CC: g_object_new (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.7800.0)
==20275==    by 0x53EB68D: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.7800.0)
==20275==    by 0x53EFAA2: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.7800.0)
==20275==    by 0x53F38B2: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.7800.0)
==20275==    by 0x53D7084: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.7800.0)
==20275==    by 0x53EFAA2: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.7800.0)
==20275==    by 0x53F38B2: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.7800.0)
==20275==    by 0x53CC0BC: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.7800.0)
==20275==    by 0x53EFAA2: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.7800.0)
==20275== 
==20275== 2,016 (168 direct, 1,848 indirect) bytes in 3 blocks are definitely lost in loss record 18,790 of 19,366
==20275==    at 0x5554DF1: g_type_create_instance (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.7800.0)
==20275==    by 0x553B1EF: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.7800.0)
==20275==    by 0x553D272: g_object_new_valist (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.7800.0)
==20275==    by 0x553D5CC: g_object_new (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.7800.0)
==20275==    by 0x53EB68D: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.7800.0)
==20275==    by 0x53EFAA2: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.7800.0)
==20275==    by 0x53F38B2: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.7800.0)
==20275==    by 0x53D7084: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.7800.0)
==20275==    by 0x53EFAA2: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.7800.0)
==20275==    by 0x53EFADC: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.7800.0)
==20275==    by 0x55D1A10: ??? (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7800.0)
==20275==    by 0x562D46E: ??? (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7800.0)
==20275== 
==20275== 8,807 (6,656 direct, 2,151 indirect) bytes in 26 blocks are definitely lost in loss record 19,182 of 19,366
==20275==    at 0x4845828: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==20275==    by 0x5A24B91: ??? (in /usr/lib/x86_64-linux-gnu/libfontconfig.so.1.12.0)
==20275==    by 0x5A250D0: ??? (in /usr/lib/x86_64-linux-gnu/libfontconfig.so.1.12.0)
==20275==    by 0x5A34329: ??? (in /usr/lib/x86_64-linux-gnu/libfontconfig.so.1.12.0)
==20275==    by 0x62987FD: ??? (in /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.10)
==20275==    by 0x6295DE3: ??? (in /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.10)
==20275==    by 0x62979BC: ??? (in /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.10)
==20275==    by 0x629BA99: XML_ParseBuffer (in /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.10)
==20275==    by 0x5A3137C: ??? (in /usr/lib/x86_64-linux-gnu/libfontconfig.so.1.12.0)
==20275==    by 0x5A31CCD: ??? (in /usr/lib/x86_64-linux-gnu/libfontconfig.so.1.12.0)
==20275==    by 0x5A31EA8: ??? (in /usr/lib/x86_64-linux-gnu/libfontconfig.so.1.12.0)
==20275==    by 0x5A3251C: ??? (in /usr/lib/x86_64-linux-gnu/libfontconfig.so.1.12.0)
==20275== 
==20275== 12,821 (512 direct, 12,309 indirect) bytes in 1 blocks are definitely lost in loss record 19,205 of 19,366
==20275==    at 0x484ABC0: realloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==20275==    by 0x5A24C38: ??? (in /usr/lib/x86_64-linux-gnu/libfontconfig.so.1.12.0)
==20275==    by 0x5A250D0: ??? (in /usr/lib/x86_64-linux-gnu/libfontconfig.so.1.12.0)
==20275==    by 0x527CE1B: ??? (in /usr/lib/x86_64-linux-gnu/libcairo.so.2.11800.0)
==20275==    by 0x51587FC: ??? (in /usr/lib/x86_64-linux-gnu/libpangocairo-1.0.so.0.5100.0)
==20275==    by 0x5D38B7D: ??? (in /usr/lib/x86_64-linux-gnu/libpangoft2-1.0.so.0.5100.0)
==20275==    by 0x51822B3: ??? (in /usr/lib/x86_64-linux-gnu/libpango-1.0.so.0.5100.0)
==20275==    by 0x5195FC4: ??? (in /usr/lib/x86_64-linux-gnu/libpango-1.0.so.0.5100.0)
==20275==    by 0x518A6CB: pango_layout_get_lines_readonly (in /usr/lib/x86_64-linux-gnu/libpango-1.0.so.0.5100.0)
==20275==    by 0x4B7985E: ??? (in /usr/lib/x86_64-linux-gnu/libgtk-4.so.1.1200.3)
==20275==    by 0x4B79B04: ??? (in /usr/lib/x86_64-linux-gnu/libgtk-4.so.1.1200.3)
==20275==    by 0x4B79CE3: ??? (in /usr/lib/x86_64-linux-gnu/libgtk-4.so.1.1200.3)
==20275== 
==20275== 12,821 (512 direct, 12,309 indirect) bytes in 1 blocks are definitely lost in loss record 19,206 of 19,366
==20275==    at 0x484ABC0: realloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==20275==    by 0x5A24C38: ??? (in /usr/lib/x86_64-linux-gnu/libfontconfig.so.1.12.0)
==20275==    by 0x5A250D0: ??? (in /usr/lib/x86_64-linux-gnu/libfontconfig.so.1.12.0)
==20275==    by 0x527CE1B: ??? (in /usr/lib/x86_64-linux-gnu/libcairo.so.2.11800.0)
==20275==    by 0x51587FC: ??? (in /usr/lib/x86_64-linux-gnu/libpangocairo-1.0.so.0.5100.0)
==20275==    by 0x5D38B7D: ??? (in /usr/lib/x86_64-linux-gnu/libpangoft2-1.0.so.0.5100.0)
==20275==    by 0x51822B3: ??? (in /usr/lib/x86_64-linux-gnu/libpango-1.0.so.0.5100.0)
==20275==    by 0x5195FC4: ??? (in /usr/lib/x86_64-linux-gnu/libpango-1.0.so.0.5100.0)
==20275==    by 0x518AF75: ??? (in /usr/lib/x86_64-linux-gnu/libpango-1.0.so.0.5100.0)
==20275==    by 0x518B139: pango_layout_get_size (in /usr/lib/x86_64-linux-gnu/libpango-1.0.so.0.5100.0)
==20275==    by 0x4AC977D: ??? (in /usr/lib/x86_64-linux-gnu/libgtk-4.so.1.1200.3)
==20275==    by 0x4B59242: ??? (in /usr/lib/x86_64-linux-gnu/libgtk-4.so.1.1200.3)
==20275== 
==20275== LEAK SUMMARY:
==20275==    definitely lost: 8,032 bytes in 35 blocks
==20275==    indirectly lost: 32,481 bytes in 1,264 blocks
==20275==      possibly lost: 620,181 bytes in 1,164 blocks
==20275==    still reachable: 9,088,018 bytes in 37,778 blocks
==20275==                       of which reachable via heuristic:
==20275==                         newarray           : 768,888 bytes in 9 blocks
==20275==                         multipleinheritance: 19,200 bytes in 28 blocks
==20275==         suppressed: 8,357,337 bytes in 11,128 blocks
==20275== Reachable blocks (those to which a pointer was found) are not shown.

In order for your logs to be actually useful, you need to install the debug symbols for all the dependencies involved. Otherwise, all you’re going to get are those ???, and that will make identifying the leak really hard.

You distribution should have those debugging symbols in a separate package; if it’s own of those “from source” distributions, you may need to rebuild every package yourself and disable stripping of the debugging symbols.

Thank you for hints,

after installing all dbgsym packages proposed find-dbgsym-packages, it’s still not clear because there’s no explicit entries from program code, only implicit calls from libs. Yes, there’s lib’s function names instead of ‘???’, but it still no clear which part of code trigerred it. (And it looks like some code paths are changed with debug libs)

==41283== HEAP SUMMARY:
==41283==     in use at exit: 18,210,163 bytes in 52,350 blocks
==41283==   total heap usage: 570,928 allocs, 518,578 frees, 144,661,838 bytes allocated
==41283== 
==41283== 164 (96 direct, 68 indirect) bytes in 1 blocks are definitely lost in loss record 16,337 of 19,151
==41283==    at 0x484A993: calloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==41283==    by 0x55DA7E9: g_malloc0 (gmem.c:163)
==41283==    by 0x5553C42: g_type_create_instance (gtype.c:1979)
==41283==    by 0x553A1EF: g_object_new_internal.part.0 (gobject.c:2245)
==41283==    by 0x553B745: UnknownInlinedFun (gobject.c:2242)
==41283==    by 0x553B745: g_object_new_with_properties (gobject.c:2408)
==41283==    by 0x553C5F0: g_object_new (gobject.c:2054)
==41283==    by 0x53BD442: g_io_module_new (giomodule.c:420)
==41283==    by 0x53BD741: g_io_modules_scan_all_in_directory_with_scope (giomodule.c:566)
==41283==    by 0x4AEEECB: UnknownInlinedFun (gtkmediafile.c:627)
==41283==    by 0x4AEEECB: UnknownInlinedFun (gtkmain.c:561)
==41283==    by 0x4AEEECB: UnknownInlinedFun (gtkmain.c:612)
==41283==    by 0x4AEEECB: gtk_init_check (gtkmain.c:596)
==41283==    by 0x4AEF31C: gtk_init (gtkmain.c:652)
==41283==    by 0x4A2685B: gtk_application_startup (gtkapplication.c:259)
==41283==    by 0x5548ADC: UnknownInlinedFun (gclosure.c:895)
==41283==    by 0x5548ADC: signal_emit_valist_unlocked (gsignal.c:3516)
==41283== 
==41283== 174 (32 direct, 142 indirect) bytes in 2 blocks are definitely lost in loss record 16,367 of 19,151
==41283==    at 0x4845828: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==41283==    by 0x55D8CD1: g_malloc (gmem.c:130)
==41283==    by 0x55F1B6C: g_slice_alloc0 (gslice.c:276)
==41283==    by 0x55BC18B: g_error_allocate (gerror.c:710)
==41283==    by 0x55BC84D: UnknownInlinedFun (gerror.c:724)
==41283==    by 0x55BC84D: g_error_new_valist (gerror.c:767)
==41283==    by 0x55BCA9E: g_set_error (gerror.c:965)
==41283==    by 0x5483AD0: do_lookup_by_address.constprop.0 (gthreadedresolver.c:511)
==41283==    by 0x53F8C53: threaded_resolver_worker_cb (gthreadedresolver.c:1590)
==41283==    by 0x5603A31: g_thread_pool_thread_proxy.lto_priv.0 (gthreadpool.c:350)
==41283==    by 0x5601330: g_thread_proxy (gthread.c:831)
==41283==    by 0x5754B59: start_thread (pthread_create.c:444)
==41283==    by 0x57E5463: clone (clone.S:100)
==41283== 
==41283== 672 (56 direct, 616 indirect) bytes in 1 blocks are definitely lost in loss record 17,902 of 19,151
==41283==    at 0x5553DF1: g_type_create_instance (gtype.c:1975)
==41283==    by 0x553A1EF: g_object_new_internal.part.0 (gobject.c:2245)
==41283==    by 0x553C272: UnknownInlinedFun (gobject.c:2562)
==41283==    by 0x553C272: g_object_new_valist (gobject.c:2584)
==41283==    by 0x553C5CC: g_object_new (gobject.c:2057)
==41283==    by 0x53EA68D: UnknownInlinedFun (gsocketclient.c:2027)
==41283==    by 0x53EA68D: g_socket_client_enumerator_callback (gsocketclient.c:1957)
==41283==    by 0x53EEAA2: g_task_return_now (gtask.c:1371)
==41283==    by 0x53F28B2: UnknownInlinedFun (gtask.c:1440)
==41283==    by 0x53F28B2: g_task_return (gtask.c:1397)
==41283==    by 0x53D6084: return_result (gproxyaddressenumerator.c:428)
==41283==    by 0x53EEAA2: g_task_return_now (gtask.c:1371)
==41283==    by 0x53F28B2: UnknownInlinedFun (gtask.c:1440)
==41283==    by 0x53F28B2: g_task_return (gtask.c:1397)
==41283==    by 0x53CA93A: UnknownInlinedFun (gnetworkaddress.c:920)
==41283==    by 0x53CA93A: on_address_timeout (gnetworkaddress.c:937)
==41283==    by 0x55D1BBD: g_timeout_dispatch (gmain.c:5121)
==41283== 
==41283== 672 (56 direct, 616 indirect) bytes in 1 blocks are definitely lost in loss record 17,903 of 19,151
==41283==    at 0x5553DF1: g_type_create_instance (gtype.c:1975)
==41283==    by 0x553A1EF: g_object_new_internal.part.0 (gobject.c:2245)
==41283==    by 0x553C272: UnknownInlinedFun (gobject.c:2562)
==41283==    by 0x553C272: g_object_new_valist (gobject.c:2584)
==41283==    by 0x553C5CC: g_object_new (gobject.c:2057)
==41283==    by 0x53EA68D: UnknownInlinedFun (gsocketclient.c:2027)
==41283==    by 0x53EA68D: g_socket_client_enumerator_callback (gsocketclient.c:1957)
==41283==    by 0x53EEAA2: g_task_return_now (gtask.c:1371)
==41283==    by 0x53F28B2: UnknownInlinedFun (gtask.c:1440)
==41283==    by 0x53F28B2: g_task_return (gtask.c:1397)
==41283==    by 0x53D6084: return_result (gproxyaddressenumerator.c:428)
==41283==    by 0x53EEAA2: g_task_return_now (gtask.c:1371)
==41283==    by 0x53EEADC: complete_in_idle_cb (gtask.c:1385)
==41283==    by 0x55D0A10: g_main_dispatch.lto_priv.0 (gmain.c:3476)
==41283==    by 0x562C46E: UnknownInlinedFun (gmain.c:4284)
==41283==    by 0x562C46E: g_main_context_iterate_unlocked.isra.0 (gmain.c:4349)
==41283== 
==41283== 1,344 (112 direct, 1,232 indirect) bytes in 2 blocks are definitely lost in loss record 18,458 of 19,151
==41283==    at 0x5553DF1: g_type_create_instance (gtype.c:1975)
==41283==    by 0x553A1EF: g_object_new_internal.part.0 (gobject.c:2245)
==41283==    by 0x553C272: UnknownInlinedFun (gobject.c:2562)
==41283==    by 0x553C272: g_object_new_valist (gobject.c:2584)
==41283==    by 0x553C5CC: g_object_new (gobject.c:2057)
==41283==    by 0x53EA68D: UnknownInlinedFun (gsocketclient.c:2027)
==41283==    by 0x53EA68D: g_socket_client_enumerator_callback (gsocketclient.c:1957)
==41283==    by 0x53EEAA2: g_task_return_now (gtask.c:1371)
==41283==    by 0x53F28B2: UnknownInlinedFun (gtask.c:1440)
==41283==    by 0x53F28B2: g_task_return (gtask.c:1397)
==41283==    by 0x53D6084: return_result (gproxyaddressenumerator.c:428)
==41283==    by 0x53EEAA2: g_task_return_now (gtask.c:1371)
==41283==    by 0x53F28B2: UnknownInlinedFun (gtask.c:1440)
==41283==    by 0x53F28B2: g_task_return (gtask.c:1397)
==41283==    by 0x53CB0BC: UnknownInlinedFun (gnetworkaddress.c:920)
==41283==    by 0x53CB0BC: got_ipv6_addresses (gnetworkaddress.c:994)
==41283==    by 0x53EEAA2: g_task_return_now (gtask.c:1371)
==41283== 
==41283== LEAK SUMMARY:
==41283==    definitely lost: 352 bytes in 7 blocks
==41283==    indirectly lost: 32,481 bytes in 1,264 blocks
==41283==      possibly lost: 632,141 bytes in 1,096 blocks
==41283==    still reachable: 8,924,715 bytes in 35,725 blocks
==41283==                       of which reachable via heuristic:
==41283==                         newarray           : 768,888 bytes in 9 blocks
==41283==                         multipleinheritance: 19,200 bytes in 28 blocks
==41283==         suppressed: 8,463,306 bytes in 12,938 blocks
==41283== Reachable blocks (those to which a pointer was found) are not shown.

and with pango code

==41761== HEAP SUMMARY:
==41761==     in use at exit: 18,609,053 bytes in 54,679 blocks
==41761==   total heap usage: 710,636 allocs, 655,957 frees, 752,509,791 bytes allocated
==41761== 
==41761== 164 (96 direct, 68 indirect) bytes in 1 blocks are definitely lost in loss record 16,629 of 19,551
==41761==    at 0x484A993: calloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==41761==    by 0x55DA7E9: g_malloc0 (gmem.c:163)
==41761==    by 0x5553C42: g_type_create_instance (gtype.c:1979)
==41761==    by 0x553A1EF: g_object_new_internal.part.0 (gobject.c:2245)
==41761==    by 0x553B745: UnknownInlinedFun (gobject.c:2242)
==41761==    by 0x553B745: g_object_new_with_properties (gobject.c:2408)
==41761==    by 0x553C5F0: g_object_new (gobject.c:2054)
==41761==    by 0x53BD442: g_io_module_new (giomodule.c:420)
==41761==    by 0x53BD741: g_io_modules_scan_all_in_directory_with_scope (giomodule.c:566)
==41761==    by 0x4AEEECB: UnknownInlinedFun (gtkmediafile.c:627)
==41761==    by 0x4AEEECB: UnknownInlinedFun (gtkmain.c:561)
==41761==    by 0x4AEEECB: UnknownInlinedFun (gtkmain.c:612)
==41761==    by 0x4AEEECB: gtk_init_check (gtkmain.c:596)
==41761==    by 0x4AEF31C: gtk_init (gtkmain.c:652)
==41761==    by 0x4A2685B: gtk_application_startup (gtkapplication.c:259)
==41761==    by 0x5548ADC: UnknownInlinedFun (gclosure.c:895)
==41761==    by 0x5548ADC: signal_emit_valist_unlocked (gsignal.c:3516)
==41761== 
==41761== 174 (32 direct, 142 indirect) bytes in 2 blocks are definitely lost in loss record 16,662 of 19,551
==41761==    at 0x4845828: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==41761==    by 0x55D8CD1: g_malloc (gmem.c:130)
==41761==    by 0x55F1B6C: g_slice_alloc0 (gslice.c:276)
==41761==    by 0x55BC18B: g_error_allocate (gerror.c:710)
==41761==    by 0x55BC84D: UnknownInlinedFun (gerror.c:724)
==41761==    by 0x55BC84D: g_error_new_valist (gerror.c:767)
==41761==    by 0x55BCA9E: g_set_error (gerror.c:965)
==41761==    by 0x5483AD0: do_lookup_by_address.constprop.0 (gthreadedresolver.c:511)
==41761==    by 0x53F8C53: threaded_resolver_worker_cb (gthreadedresolver.c:1590)
==41761==    by 0x5603A31: g_thread_pool_thread_proxy.lto_priv.0 (gthreadpool.c:350)
==41761==    by 0x5601330: g_thread_proxy (gthread.c:831)
==41761==    by 0x5754B59: start_thread (pthread_create.c:444)
==41761==    by 0x57E5463: clone (clone.S:100)
==41761== 
==41761== 672 (56 direct, 616 indirect) bytes in 1 blocks are definitely lost in loss record 18,259 of 19,551
==41761==    at 0x5553DF1: g_type_create_instance (gtype.c:1975)
==41761==    by 0x553A1EF: g_object_new_internal.part.0 (gobject.c:2245)
==41761==    by 0x553C272: UnknownInlinedFun (gobject.c:2562)
==41761==    by 0x553C272: g_object_new_valist (gobject.c:2584)
==41761==    by 0x553C5CC: g_object_new (gobject.c:2057)
==41761==    by 0x53EA68D: UnknownInlinedFun (gsocketclient.c:2027)
==41761==    by 0x53EA68D: g_socket_client_enumerator_callback (gsocketclient.c:1957)
==41761==    by 0x53EEAA2: g_task_return_now (gtask.c:1371)
==41761==    by 0x53F28B2: UnknownInlinedFun (gtask.c:1440)
==41761==    by 0x53F28B2: g_task_return (gtask.c:1397)
==41761==    by 0x53D6084: return_result (gproxyaddressenumerator.c:428)
==41761==    by 0x53EEAA2: g_task_return_now (gtask.c:1371)
==41761==    by 0x53F28B2: UnknownInlinedFun (gtask.c:1440)
==41761==    by 0x53F28B2: g_task_return (gtask.c:1397)
==41761==    by 0x53CB0BC: UnknownInlinedFun (gnetworkaddress.c:920)
==41761==    by 0x53CB0BC: got_ipv6_addresses (gnetworkaddress.c:994)
==41761==    by 0x53EEAA2: g_task_return_now (gtask.c:1371)
==41761== 
==41761== 2,016 (168 direct, 1,848 indirect) bytes in 3 blocks are definitely lost in loss record 18,960 of 19,551
==41761==    at 0x5553DF1: g_type_create_instance (gtype.c:1975)
==41761==    by 0x553A1EF: g_object_new_internal.part.0 (gobject.c:2245)
==41761==    by 0x553C272: UnknownInlinedFun (gobject.c:2562)
==41761==    by 0x553C272: g_object_new_valist (gobject.c:2584)
==41761==    by 0x553C5CC: g_object_new (gobject.c:2057)
==41761==    by 0x53EA68D: UnknownInlinedFun (gsocketclient.c:2027)
==41761==    by 0x53EA68D: g_socket_client_enumerator_callback (gsocketclient.c:1957)
==41761==    by 0x53EEAA2: g_task_return_now (gtask.c:1371)
==41761==    by 0x53F28B2: UnknownInlinedFun (gtask.c:1440)
==41761==    by 0x53F28B2: g_task_return (gtask.c:1397)
==41761==    by 0x53D6084: return_result (gproxyaddressenumerator.c:428)
==41761==    by 0x53EEAA2: g_task_return_now (gtask.c:1371)
==41761==    by 0x53EEADC: complete_in_idle_cb (gtask.c:1385)
==41761==    by 0x55D0A10: g_main_dispatch.lto_priv.0 (gmain.c:3476)
==41761==    by 0x562C46E: UnknownInlinedFun (gmain.c:4284)
==41761==    by 0x562C46E: g_main_context_iterate_unlocked.isra.0 (gmain.c:4349)
==41761== 
==41761== 5,054 (512 direct, 4,542 indirect) bytes in 1 blocks are definitely lost in loss record 19,268 of 19,551
==41761==    at 0x484ABC0: realloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==41761==    by 0x5A23C38: FcPatternObjectInsertElt (fcpat.c:516)
==41761==    by 0x5A240D0: FcPatternObjectAddWithBinding (fcpat.c:711)
==41761==    by 0x5A1EF2F: UnknownInlinedFun (fcpat.c:738)
==41761==    by 0x5A1EF2F: UnknownInlinedFun (fcpat.c:884)
==41761==    by 0x5A1EF2F: FcDefaultSubstitute (fcdefault.c:312)
==41761==    by 0x5D37B7D: UnknownInlinedFun (pangofc-fontmap.c:2066)
==41761==    by 0x5D37B7D: UnknownInlinedFun (pangofc-fontmap.c:2143)
==41761==    by 0x5D37B7D: pango_fc_font_map_load_fontset (pangofc-fontmap.c:2245)
==41761==    by 0x51812B3: UnknownInlinedFun (itemize.c:902)
==41761==    by 0x51812B3: UnknownInlinedFun (itemize.c:962)
==41761==    by 0x51812B3: pango_itemize_with_font (itemize.c:1570)
==41761==    by 0x5194FC4: pango_layout_check_lines.part.0.lto_priv.0 (pango-layout.c:4894)
==41761==    by 0x51979F7: UnknownInlinedFun (pango-layout.c:4786)
==41761==    by 0x51979F7: UnknownInlinedFun (pango-layout.c:7215)
==41761==    by 0x51979F7: _pango_layout_get_iter (pango-layout.c:7206)
==41761==    by 0x519B716: pango_renderer_draw_layout (pango-renderer.c:188)
==41761==    by 0x515B827: UnknownInlinedFun (pangocairo-render.c:1007)
==41761==    by 0x515B827: pango_cairo_show_layout (pangocairo-render.c:1139)
==41761==    by 0x13222A: gr_draw_grid (graph.c:314)
==41761==    by 0x4A6CDB7: gtk_drawing_area_snapshot (gtkdrawingarea.c:260)
==41761== 
==41761== 5,198 (512 direct, 4,686 indirect) bytes in 1 blocks are definitely lost in loss record 19,273 of 19,551
==41761==    at 0x484ABC0: realloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==41761==    by 0x5A23C38: FcPatternObjectInsertElt (fcpat.c:516)
==41761==    by 0x5A240D0: FcPatternObjectAddWithBinding (fcpat.c:711)
==41761==    by 0x5A1EF2F: UnknownInlinedFun (fcpat.c:738)
==41761==    by 0x5A1EF2F: UnknownInlinedFun (fcpat.c:884)
==41761==    by 0x5A1EF2F: FcDefaultSubstitute (fcdefault.c:312)
==41761==    by 0x5D37B7D: UnknownInlinedFun (pangofc-fontmap.c:2066)
==41761==    by 0x5D37B7D: UnknownInlinedFun (pangofc-fontmap.c:2143)
==41761==    by 0x5D37B7D: pango_fc_font_map_load_fontset (pangofc-fontmap.c:2245)
==41761==    by 0x51812B3: UnknownInlinedFun (itemize.c:902)
==41761==    by 0x51812B3: UnknownInlinedFun (itemize.c:962)
==41761==    by 0x51812B3: pango_itemize_with_font (itemize.c:1570)
==41761==    by 0x5194FC4: pango_layout_check_lines.part.0.lto_priv.0 (pango-layout.c:4894)
==41761==    by 0x5189F75: UnknownInlinedFun (pango-layout.c:4786)
==41761==    by 0x5189F75: pango_layout_get_extents_internal.lto_priv.0 (pango-layout.c:2925)
==41761==    by 0x51589E1: _pango_cairo_font_get_metrics (pangocairo-font.c:293)
==41761==    by 0x5193AEC: pango_layout_run_get_extents_and_height (pango-layout.c:5713)
==41761==    by 0x51945F2: pango_layout_line_get_extents_and_height.part.0.lto_priv.0 (pango-layout.c:5830)
==41761==    by 0x5189A8C: UnknownInlinedFun (pango-layout.c:5773)
==41761==    by 0x5189A8C: get_line_extents_layout_coords.lto_priv.0 (pango-layout.c:2877)
==41761== 
==41761== LEAK SUMMARY:
==41761==    definitely lost: 1,376 bytes in 9 blocks
==41761==    indirectly lost: 58,799 bytes in 2,340 blocks
==41761==      possibly lost: 626,681 bytes in 1,165 blocks
==41761==    still reachable: 9,278,371 bytes in 36,750 blocks
==41761==                       of which reachable via heuristic:
==41761==                         newarray           : 768,888 bytes in 9 blocks
==41761==                         multipleinheritance: 19,200 bytes in 28 blocks
==41761==         suppressed: 8,481,178 bytes in 13,057 blocks
==41761== Reachable blocks (those to which a pointer was found) are not shown.

Update:
the above output was with libs from app linked with latest distro packages (glib2.78.0 gtk4.12.2 pango1.51.0), then after relinking it with the last git tagged libs (glib2.79.2 gtk4.13.8 pango1.51.2):
some of them are gone (like glib initial), some are the same (like pango_show_layout), and a couple others are appeared

Supposedly all of them are false positive (not added in valgrind supps yet) one-time allocations and can be ignored

==321310== HEAP SUMMARY:
==321310==     in use at exit: 11,662,707 bytes in 45,920 blocks
==321310==   total heap usage: 733,500 allocs, 687,580 frees, 970,007,431 bytes allocated
==321310== 
==321310== 2 bytes in 2 blocks are definitely lost in loss record 192 of 17,081
==321310==    at 0x4845828: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==321310==    by 0x59CE511: g_malloc (gmem.c:100)
==321310==    by 0x4A48CB9: g_strdup_inline (gstrfuncs.h:317)
==321310==    by 0x4A48CB9: gtk_at_context_get_text (gtkatcontext.c:1411)
==321310==    by 0x4A48F8C: gtk_at_context_get_name_internal (gtkatcontext.c:1447)
==321310==    by 0x4A48F8C: gtk_at_context_get_text_accumulate (gtkatcontext.c:1394)
==321310==    by 0x4A48E96: gtk_at_context_get_text_accumulate (gtkatcontext.c:1372)
==321310==    by 0x4A48BEC: gtk_at_context_get_text (gtkatcontext.c:1435)
==321310==    by 0x4CCB200: collect_object.isra.0 (gtkatspicache.c:145)
==321310==    by 0x4CCB8D1: emit_add_accessible (gtkatspicache.c:235)
==321310==    by 0x4CCB8D1: gtk_at_spi_cache_add_context (gtkatspicache.c:436)
==321310==    by 0x4A4859B: gtk_at_context_realize.part.0 (gtkatcontext.c:791)
==321310==    by 0x4B3561C: gtk_notebook_real_switch_page (gtknotebook.c:5429)
==321310==    by 0x591DF8F: g_closure_invoke (gclosure.c:834)
==321310==    by 0x5932777: signal_emit_unlocked_R.isra.0 (gsignal.c:3919)
==321310== 
==321310== 174 (32 direct, 142 indirect) bytes in 2 blocks are definitely lost in loss record 15,077 of 17,081
==321310==    at 0x4845828: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==321310==    by 0x59CE511: g_malloc (gmem.c:100)
==321310==    by 0x59E8CCC: g_slice_alloc0 (gslice.c:217)
==321310==    by 0x59AE2EB: g_error_allocate (gerror.c:235)
==321310==    by 0x59AE6CD: g_error_new_steal (gerror.c:249)
==321310==    by 0x59AE6CD: g_error_new_valist (gerror.c:292)
==321310==    by 0x59AED8E: g_set_error (gerror.c:490)
==321310==    by 0x57D6E60: do_lookup_by_address.constprop.0 (gthreadedresolver.c:512)
==321310==    by 0x57D8586: threaded_resolver_worker_cb (gthreadedresolver.c:1601)
==321310==    by 0x59F5E61: g_thread_pool_thread_proxy (gthreadpool.c:336)
==321310==    by 0x59F52F0: g_thread_proxy (gthread.c:835)
==321310==    by 0x5B4BB59: start_thread (pthread_create.c:444)
==321310==    by 0x5BDC463: clone (clone.S:100)
==321310== 
==321310== 672 (56 direct, 616 indirect) bytes in 1 blocks are definitely lost in loss record 16,221 of 17,081
==321310==    at 0x5940E0F: g_type_create_instance (gtype.c:1929)
==321310==    by 0x59240DF: g_object_new_internal.part.0 (gobject.c:2603)
==321310==    by 0x5926B92: g_object_new_internal (gobject.c:2920)
==321310==    by 0x5926B92: g_object_new_valist (gobject.c:2942)
==321310==    by 0x5926EEC: g_object_new (gobject.c:2415)
==321310==    by 0x57C8FE3: g_socket_client_enumerator_callback (gsocketclient.c:2082)
==321310==    by 0x57C8FE3: g_socket_client_enumerator_callback (gsocketclient.c:2013)
==321310==    by 0x57D2122: g_task_return_now (gtask.c:1361)
==321310==    by 0x57D2DC2: g_task_return (gtask.c:1430)
==321310==    by 0x57D2DC2: g_task_return (gtask.c:1387)
==321310==    by 0x57B68C4: return_result (gproxyaddressenumerator.c:432)
==321310==    by 0x57D2122: g_task_return_now (gtask.c:1361)
==321310==    by 0x57D2DC2: g_task_return (gtask.c:1430)
==321310==    by 0x57D2DC2: g_task_return (gtask.c:1387)
==321310==    by 0x57ABD5C: complete_queued_task (gnetworkaddress.c:927)
==321310==    by 0x57ABD5C: got_ipv6_addresses (gnetworkaddress.c:1001)
==321310==    by 0x57D2122: g_task_return_now (gtask.c:1361)
==321310== 
==321310== 672 (56 direct, 616 indirect) bytes in 1 blocks are definitely lost in loss record 16,222 of 17,081
==321310==    at 0x5940E0F: g_type_create_instance (gtype.c:1929)
==321310==    by 0x59240DF: g_object_new_internal.part.0 (gobject.c:2603)
==321310==    by 0x5926B92: g_object_new_internal (gobject.c:2920)
==321310==    by 0x5926B92: g_object_new_valist (gobject.c:2942)
==321310==    by 0x5926EEC: g_object_new (gobject.c:2415)
==321310==    by 0x57C8FE3: g_socket_client_enumerator_callback (gsocketclient.c:2082)
==321310==    by 0x57C8FE3: g_socket_client_enumerator_callback (gsocketclient.c:2013)
==321310==    by 0x57D2122: g_task_return_now (gtask.c:1361)
==321310==    by 0x57D2DC2: g_task_return (gtask.c:1430)
==321310==    by 0x57D2DC2: g_task_return (gtask.c:1387)
==321310==    by 0x57B68C4: return_result (gproxyaddressenumerator.c:432)
==321310==    by 0x57D2122: g_task_return_now (gtask.c:1361)
==321310==    by 0x57D2DC2: g_task_return (gtask.c:1430)
==321310==    by 0x57D2DC2: g_task_return (gtask.c:1387)
==321310==    by 0x57ABBFA: complete_queued_task (gnetworkaddress.c:927)
==321310==    by 0x57ABBFA: got_ipv4_addresses (gnetworkaddress.c:1042)
==321310==    by 0x57D2122: g_task_return_now (gtask.c:1361)
==321310== 
==321310== 1,344 (112 direct, 1,232 indirect) bytes in 2 blocks are definitely lost in loss record 16,549 of 17,081
==321310==    at 0x5940E0F: g_type_create_instance (gtype.c:1929)
==321310==    by 0x59240DF: g_object_new_internal.part.0 (gobject.c:2603)
==321310==    by 0x5926B92: g_object_new_internal (gobject.c:2920)
==321310==    by 0x5926B92: g_object_new_valist (gobject.c:2942)
==321310==    by 0x5926EEC: g_object_new (gobject.c:2415)
==321310==    by 0x57C8FE3: g_socket_client_enumerator_callback (gsocketclient.c:2082)
==321310==    by 0x57C8FE3: g_socket_client_enumerator_callback (gsocketclient.c:2013)
==321310==    by 0x57D2122: g_task_return_now (gtask.c:1361)
==321310==    by 0x57D2DC2: g_task_return (gtask.c:1430)
==321310==    by 0x57D2DC2: g_task_return (gtask.c:1387)
==321310==    by 0x57B68C4: return_result (gproxyaddressenumerator.c:432)
==321310==    by 0x57D2122: g_task_return_now (gtask.c:1361)
==321310==    by 0x57D215C: complete_in_idle_cb (gtask.c:1375)
==321310==    by 0x59C43A8: g_main_dispatch (gmain.c:3344)
==321310==    by 0x59C7606: g_main_context_dispatch_unlocked (gmain.c:4152)
==321310==    by 0x59C7606: g_main_context_iterate_unlocked.isra.0 (gmain.c:4217)
==321310== 
==321310== 3,384 (696 direct, 2,688 indirect) bytes in 3 blocks are definitely lost in loss record 16,804 of 17,081
==321310==    at 0x484A993: calloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==321310==    by 0x59CE569: g_malloc0 (gmem.c:133)
==321310==    by 0x5940C94: g_type_create_instance (gtype.c:1933)
==321310==    by 0x59240DF: g_object_new_internal.part.0 (gobject.c:2603)
==321310==    by 0x5926B92: g_object_new_internal (gobject.c:2920)
==321310==    by 0x5926B92: g_object_new_valist (gobject.c:2942)
==321310==    by 0x5926EEC: g_object_new (gobject.c:2415)
==321310==    by 0x4CCECED: gtk_at_spi_create_context (gtkatspicontext.c:1892)
==321310==    by 0x4A49B50: gtk_at_context_create (gtkatcontext.c:703)
==321310==    by 0x4B9D04D: gtk_stack_page_accessible_get_at_context (gtkstack.c:257)
==321310==    by 0x4A497A3: get_parent_context (gtkatcontext.c:1229)
==321310==    by 0x4A497A3: gtk_at_context_set_accessible_parent (gtkatcontext.c:541)
==321310==    by 0x4A3EFBF: gtk_accessible_set_accessible_parent (gtkaccessible.c:173)
==321310==    by 0x5922A07: object_set_property (gobject.c:2169)
==321310== 
==321310== 5,054 (512 direct, 4,542 indirect) bytes in 1 blocks are definitely lost in loss record 16,881 of 17,081
==321310==    at 0x484ABC0: realloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==321310==    by 0x5E1AC38: FcPatternObjectInsertElt (fcpat.c:516)
==321310==    by 0x5E1B0D0: FcPatternObjectAddWithBinding (fcpat.c:711)
==321310==    by 0x5E15F2F: UnknownInlinedFun (fcpat.c:738)
==321310==    by 0x5E15F2F: UnknownInlinedFun (fcpat.c:884)
==321310==    by 0x5E15F2F: FcDefaultSubstitute (fcdefault.c:312)
==321310==    by 0x612EB7D: UnknownInlinedFun (pangofc-fontmap.c:2066)
==321310==    by 0x612EB7D: UnknownInlinedFun (pangofc-fontmap.c:2143)
==321310==    by 0x612EB7D: pango_fc_font_map_load_fontset (pangofc-fontmap.c:2245)
==321310==    by 0x5503676: itemize_state_update_for_new_run (itemize.c:902)
==321310==    by 0x5503676: itemize_state_process_run (itemize.c:962)
==321310==    by 0x5503676: pango_itemize_with_font (itemize.c:1570)
==321310==    by 0x5513A55: pango_layout_check_lines.part.0 (pango-layout.c:4900)
==321310==    by 0x5516D57: pango_layout_check_lines (pango-layout.c:4792)
==321310==    by 0x5516D57: _pango_layout_get_iter (pango-layout.c:7221)
==321310==    by 0x5516D57: _pango_layout_get_iter (pango-layout.c:7212)
==321310==    by 0x551F646: pango_renderer_draw_layout (pango-renderer.c:188)
==321310==    by 0x54DA4E7: _pango_cairo_do_layout (pangocairo-render.c:1007)
==321310==    by 0x54DA4E7: pango_cairo_show_layout (pangocairo-render.c:1139)
==321310==    by 0x1322E8: gr_draw_grid (graph.c:314)
==321310==    by 0x4A9D747: gtk_drawing_area_snapshot (gtkdrawingarea.c:260)
==321310== 
==321310== 5,198 (512 direct, 4,686 indirect) bytes in 1 blocks are definitely lost in loss record 16,884 of 17,081
==321310==    at 0x484ABC0: realloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==321310==    by 0x5E1AC38: FcPatternObjectInsertElt (fcpat.c:516)
==321310==    by 0x5E1B0D0: FcPatternObjectAddWithBinding (fcpat.c:711)
==321310==    by 0x5E15F2F: UnknownInlinedFun (fcpat.c:738)
==321310==    by 0x5E15F2F: UnknownInlinedFun (fcpat.c:884)
==321310==    by 0x5E15F2F: FcDefaultSubstitute (fcdefault.c:312)
==321310==    by 0x612EB7D: UnknownInlinedFun (pangofc-fontmap.c:2066)
==321310==    by 0x612EB7D: UnknownInlinedFun (pangofc-fontmap.c:2143)
==321310==    by 0x612EB7D: pango_fc_font_map_load_fontset (pangofc-fontmap.c:2245)
==321310==    by 0x5503676: itemize_state_update_for_new_run (itemize.c:902)
==321310==    by 0x5503676: itemize_state_process_run (itemize.c:962)
==321310==    by 0x5503676: pango_itemize_with_font (itemize.c:1570)
==321310==    by 0x5513A55: pango_layout_check_lines.part.0 (pango-layout.c:4900)
==321310==    by 0x5516325: pango_layout_check_lines (pango-layout.c:4792)
==321310==    by 0x5516325: pango_layout_get_extents_internal (pango-layout.c:2925)
==321310==    by 0x54D70C1: _pango_cairo_font_get_metrics (pangocairo-font.c:293)
==321310==    by 0x550FE7F: pango_layout_run_get_extents_and_height (pango-layout.c:5719)
==321310==    by 0x5510118: pango_layout_line_get_extents_and_height.part.0 (pango-layout.c:5836)
==321310==    by 0x5510EF8: pango_layout_line_get_extents_and_height (pango-layout.c:5779)
==321310==    by 0x5510EF8: get_line_extents_layout_coords (pango-layout.c:2877)
==321310== 
==321310== LEAK SUMMARY:
==321310==    definitely lost: 1,978 bytes in 13 blocks
==321310==    indirectly lost: 64,581 bytes in 2,507 blocks
==321310==      possibly lost: 28,865 bytes in 364 blocks
==321310==    still reachable: 6,779,735 bytes in 31,910 blocks
==321310==                       of which reachable via heuristic:
==321310==                         multipleinheritance: 14,400 bytes in 21 blocks
==321310==         suppressed: 4,624,868 bytes in 9,782 blocks
==321310== Reachable blocks (those to which a pointer was found) are not shown.
==321310== To see them, rerun with: --leak-check=full --show-leak-kinds=all

This topic was automatically closed 45 days after the last reply. New replies are no longer allowed.