Возможно, Valgrind потерян в _dl_init libgobject libglib - PullRequest
1 голос
/ 02 мая 2020

Я пытаюсь отладить проблемы с памятью в моей программе, однако сообщения об ошибках, поступающие из valgrind, бесполезны. Вот пример.

==3944334== 184 bytes in 1 blocks are possibly lost in loss record 224 of 239
==3944334==    at 0x483BD7B: realloc (vg_replace_malloc.c:836)
==3944334==    by 0x5675928: g_realloc (in /usr/lib/libglib-2.0.so.0.6400.2)
==3944334==    by 0x55CD2E5: ??? (in /usr/lib/libgobject-2.0.so.0.6400.2)
==3944334==    by 0x55C8D4C: g_type_register_static (in /usr/lib/libgobject-2.0.so.0.6400.2)
==3944334==    by 0x55E0EF2: g_param_type_register_static (in /usr/lib/libgobject-2.0.so.0.6400.2)
==3944334==    by 0x55C1977: ??? (in /usr/lib/libgobject-2.0.so.0.6400.2)
==3944334==    by 0x55BFB4C: ??? (in /usr/lib/libgobject-2.0.so.0.6400.2)
==3944334==    by 0x4011099: call_init.part.0 (in /usr/lib/ld-2.31.so)
==3944334==    by 0x40111A0: _dl_init (in /usr/lib/ld-2.31.so)
==3944334==    by 0x4002139: ??? (in /usr/lib/ld-2.31.so)
==3944334==    by 0x2: ???
==3944334==    by 0x1FFF0002DA: ???

Я хочу знать, являются ли эти ошибки проблемой. Если они есть, я хочу знать, как их решить, если нет, я хочу знать, как их подавить.

Обычно, если я сталкиваюсь с ошибкой в ​​valgrind, я могу найти имя функции, которую я узнаю, и номер строки и устраните ошибку оттуда. Однако в этом случае нет ни одного имени функции, которое я распознаю как мое, при всех ошибках. Вот как я запускаю valgrind.

valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes -s ./logdraw -f log.txt

А вот сводка valgrind.

==3944839== LEAK SUMMARY:
==3944839==    definitely lost: 0 bytes in 0 blocks
==3944839==    indirectly lost: 0 bytes in 0 blocks
==3944839==      possibly lost: 1,352 bytes in 18 blocks
==3944839==    still reachable: 47,893 bytes in 221 blocks
==3944839==                       of which reachable via heuristic:
==3944839==                         newarray           : 1,536 bytes in 16 blocks
==3944839==         suppressed: 0 bytes in 0 blocks
==3944839== 
==3944839== ERROR SUMMARY: 18 errors from 18 contexts (suppressed: 0 from 0)

Чтобы еще больше усложнить ситуацию, я могу поставить "return 0;" в качестве первой строки в моей основной функции и по-прежнему возвращать все эти ошибки при запуске valgrind. Я думал, что смогу триангулировать проблему, используя это, но, видимо, не могу.

Вот мой make-файл, если он имеет значение.

logdraw: log.o gtkUI.o
    gcc `pkg-config --cflags gtk+-3.0` -g -Wall -o logdraw logdraw.o gtkUI.o `pkg-config --libs gtk+-3.0`

log.o: logdraw.c gtkUI.h
    gcc `pkg-config --cflags gtk+-3.0` -g -Wall -c logdraw.c `pkg-config --libs gtk+-3.0` -O0 -I.

gtkUI.o: gtkUI.c gtkUI.h
    gcc `pkg-config --cflags gtk+-3.0` -g -Wall -c gtkUI.c `pkg-config --libs gtk+-3.0`

Я знаю, что есть некоторая странность памяти в gtk3, поэтому я закомментировал вызов, который я сделал функциям в моем файле gtkUI. c, а также #include для этого файла. Я не знаю, может ли это все еще повлиять на меня.

...