Как я могу узнать, когда ошибка valgrind вызвана моим кодом или библиотекой, от которой зависит мой код? - PullRequest
1 голос
/ 25 октября 2019

Я новичок в 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, которые поставляются предварительно. -установлен с вашей ОС. Вы не можете легко исправить это, но вы не хотите видеть эти ошибки (и да, их много!)

...