18:27

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

Тем не менее...
Programming Level Up!
New ability: Dump analysis.

@темы: Программирование

Комментарии
23.06.2015 в 23:05

73!
Трудно конечно представить каким левелом асемблера надо обладать что бы такое делать, но вот примечание - возможно не поможет/не стоило просто потому, что мб это какой то, собственно, механизм сохранения числа обращений к базе? Дескать, чтобы отправлять запросы на изменени базы сразу одним охапком после определенной операции а не кучу мелких? Возможно стоит поискать то что обращается и когда обращается к этим слепкам? Data/Code breakpoint, maybeh?
23.06.2015 в 23:15

Я не сплю, я перешел в режим замедленного функционирования
Acto, в моем случае знание ассемблера не пригодилось - я смог подключить исходники, так что все, что мне было нужно, было на привычных мне C#/VB.Net.
Но вот все, что после слова "примечание", я не смог декодировать. Можно поподробнее? :)

И да, UPD: причина нашлась, и оказалась довольно простой. Просто в одной из форме ВНЕЗАПНО запускалась процедура, заново инициализирующая датасет (набор таблиц, содержимое и структура которых хранятся в локальной оперативной памяти). Соответственно, прежняя таблица адресов оставалась лишь как источник данных для отображения, а новая, пустая таблица, пихалась в датасет.
24.06.2015 в 09:52

73!
Можно поподробнее?
А ну ты уже сказал что сделал, всё понятно теперь)