Я не сплю, я перешел в режим замедленного функционирования
Пожалуй, это была самая глубокая компьютерно-хирургическая операция, которую я когда-либо делал.
На работе в нашей программе редко-редко стала проявляться аномалия - в списке адресов почему-то переставали отображаться добавляемые адреса, несмотря на то, что они были в связанной с ним таблице.
Поймав очередной такой момент, я таки уговорил начальство позволить мне взять дамп с этой программы. Дамп - это полное содержание памяти приложения. Потратив примерно час на попытки правильно открыть его в Visual Studio, я получил прямо в нос списком из 12-ти нитей выполнения. Посмотрев стек каждой из них, я нашел точку в программном коде, откуда мог начать поиски проблемы.
Результат поиска:
Проблема - обнаружена, в какой-то момент таблица с данными умудряется раздваиваться - одна остается как источник данных для списка, а со второй, собственно, ведется работы по добавлению/удалению строк. Если бы не дамп, я бы никогда об этом не додумался бы.
Причина - не имею ни малейшего понятия 0_о. Я просмотрел упоминание этой таблицы по всему коду, и нет ничего, что могло бы стать причиной такого поведения.
Решение - я, эм... сделал что-то в нескольких местах... Не имею понятия, поможет ли это...
Тем не менее...
Programming Level Up!
New ability: Dump analysis.
На работе в нашей программе редко-редко стала проявляться аномалия - в списке адресов почему-то переставали отображаться добавляемые адреса, несмотря на то, что они были в связанной с ним таблице.
Поймав очередной такой момент, я таки уговорил начальство позволить мне взять дамп с этой программы. Дамп - это полное содержание памяти приложения. Потратив примерно час на попытки правильно открыть его в Visual Studio, я получил прямо в нос списком из 12-ти нитей выполнения. Посмотрев стек каждой из них, я нашел точку в программном коде, откуда мог начать поиски проблемы.
Результат поиска:
Проблема - обнаружена, в какой-то момент таблица с данными умудряется раздваиваться - одна остается как источник данных для списка, а со второй, собственно, ведется работы по добавлению/удалению строк. Если бы не дамп, я бы никогда об этом не додумался бы.
Причина - не имею ни малейшего понятия 0_о. Я просмотрел упоминание этой таблицы по всему коду, и нет ничего, что могло бы стать причиной такого поведения.
Решение - я, эм... сделал что-то в нескольких местах... Не имею понятия, поможет ли это...
Тем не менее...
Programming Level Up!
New ability: Dump analysis.
-
-
23.06.2015 в 23:05-
-
23.06.2015 в 23:15Но вот все, что после слова "примечание", я не смог декодировать. Можно поподробнее?
И да, UPD: причина нашлась, и оказалась довольно простой. Просто в одной из форме ВНЕЗАПНО запускалась процедура, заново инициализирующая датасет (набор таблиц, содержимое и структура которых хранятся в локальной оперативной памяти). Соответственно, прежняя таблица адресов оставалась лишь как источник данных для отображения, а новая, пустая таблица, пихалась в датасет.
-
-
24.06.2015 в 09:52А ну ты уже сказал что сделал, всё понятно теперь)