Я новичок в valgrind и у меня есть концептуальный вопрос о том, как прочитать трассировку стека ошибки valgrind.
В частности, я запускаю пример приложения opengl, которое делает не так уж много, просто открывает окно и отображает треугольник. Код взят из некоторого репозитория примеров github opengl, поэтому, конечно, нет никаких гарантий, что этот код без проблем.
В любом случае, когда я запускаю valgrind -v executable
на нем, я получаю множество сообщений об ошибках, подобных этому здесь.
==26727== 522 errors in context 590 of 590:
==26727== Invalid write of size 2
==26727== at 0x4C36753: memmove (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==26727== by 0xEC9A77C: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
==26727== by 0xECAD278: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
==26727== by 0xEDBCD50: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
==26727== by 0xEDC7E1B: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
==26727== by 0x10E929: vinz::Scene::run() (scene.cpp:139)
==26727== by 0x10DFE6: main (main.cpp:42)
==26727== Address 0x7fa12047d300 is not stack'd, malloc'd or (recently) free'd
Означает ли это, что проблема вызвана моим кодом (так, что-топлохое происходит в scene.cpp: 139), или это означает, что где-то глубоко в зависимостях есть недопустимая запись, и поэтому я, так сказать, не в курсе?
Можно ли предположить, что, если первая строка в стеке ошибок относится к моему коду, то я являюсь виновником, но если первая строка в стеке ошибок valgrind вызвана какой-то зависимостью, то я не тот, кто ее вызывает?
В частности, я читал в руководстве по valgrind в разделе «Подавление ошибок»:
Инструменты проверки ошибок обнаруживают многочисленные проблемы в системных библиотеках, таких как библиотека C, которые поставляются предварительно. -установлен с вашей ОС. Вы не можете легко исправить это, но вы не хотите видеть эти ошибки (и да, их много!)