Oct. 21st, 2014

дебаг

Oct. 21st, 2014 01:30 pm
thedeemon: (office)
Вчера с прикольным багом столкнулся. Маленький веб-сервис, принимает запросы, отвечает JSON'ом. Посылаю запрос - отвечает, все хорошо. Посылаю еще раз - еще раз тот же ответ. Так несколько раз успешно, потом бац - при том же запросе вдруг Access Violation. Потом на тот же запрос опять успешно отвечает все тот же ответ. Т.е. при одних и тех же данных то работает, то не работает. Заметил, что чем больше обрабатывается данных, тем чаще не работает. Отладчик в поиске причины оказался не очень полезен: ну да, где-то в RTTI данных (которые автоматически генерятся компилятором) внезапно оказывается неожиданный null, и рантайм на него натыкается, но почему там null? Пришлось применить Метод Божественного Озарения™. Оказалось, я недавно перевел свои робингудские хэш-таблицы на использование библиотечного std.container.Array, который данные вне GC-кучи хранит и сам менеджит. А в нем оказался баг: при определенных условиях он забывал оповестить GC об имеющихся в массиве указателях, GC приходил и собирал те объекты, указатели в массиве оказывались протухшими. Главное в применении такого метода отладки - отойти подальше от монитора и клавиатуры.

Profile

thedeemon: (Default)
Dmitry Popov

July 2025

S M T W T F S
  12345
6789101112
13141516171819
20212223242526
27282930 31  

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 21st, 2025 05:53 pm
Powered by Dreamwidth Studios