Ответ 1
Как отладить эту ошибку?
В общем, вы хотите использовать по крайней мере эти методы:
- Убедитесь, что код компилируется и содержит ссылки без предупреждений.
-Wall
является хорошим началом, но лучше-Wextra
. - Убедитесь, что приложение разработало протоколирование и трассировку, которые могут быть включены или отключены, и которые содержат достаточно подробностей для отладки этих проблем и небольших накладных расходов.
- Удостоверьтесь, что код имеет хороший охват при тестировании.
- Удостоверьтесь, что тесты дезинфицирующими являются чистыми.
там также нет предупреждения в проверке valgrind.
Непонятно, просто ли вы запускали целевое приложение под Valgrind, или у вас также есть модульные тесты, а тесты - Valgrind-clean. Также неясно, наблюдали ли вы неправильное поведение приложения в Valgrind или нет.
Valgrind был лучшим инструментом для кучи и неинтеллизированной памяти, но в 2017 году это уже не так.
Компилятор Address, Thread и Memory дезинфицирующие средства улавливают значительно более широкий класс ошибок (например, глобальные и стековые переполнения и расписания данных), и вы должны запускать ваши устройства проверяют их все.
Если все вышеперечисленное не позволяет найти проблему, вы можете запустить реальное приложение, используемое для дезинфицирующих средств.
Наконец, есть такие инструменты, как трассировка GDB и systemtap - их труднее изучить, но дать вам значительную силу. Обзор здесь.