На работе в нашей программе редко-редко стала проявляться аномалия - в списке адресов почему-то переставали отображаться добавляемые адреса, несмотря на то, что они были в связанной с ним таблице.
Поймав очередной такой момент, я таки уговорил начальство позволить мне взять дамп с этой программы. Дамп - это полное содержание памяти приложения. Потратив примерно час на попытки правильно открыть его в Visual Studio, я получил прямо в нос списком из 12-ти нитей выполнения. Посмотрев стек каждой из них, я нашел точку в программном коде, откуда мог начать поиски проблемы.
Результат поиска:
Проблема - обнаружена, в какой-то момент таблица с данными умудряется раздваиваться - одна остается как источник данных для списка, а со второй, собственно, ведется работы по добавлению/удалению строк. Если бы не дамп, я бы никогда об этом не додумался бы.
Причина - не имею ни малейшего понятия 0_о. Я просмотрел упоминание этой таблицы по всему коду, и нет ничего, что могло бы стать причиной такого поведения.
Решение - я, эм... сделал что-то в нескольких местах... Не имею понятия, поможет ли это...
Тем не менее...
Programming Level Up!
New ability: Dump analysis.