Здравствуйте, Valery A. Boronin, Вы писали:
[Skip]
VAB>если известна область памяти которая затирается — если повезет и она одна и та же иногда, то есть решение
VAB>- подключите к машине отладчик удаленный (WinDbg + VM Ware сгодится)
VAB>- путем проигрывания проблемного сценария в виртуалке (чтобы шансы на воспроизведение были выше, лучше заснапшотить поближе к моменту падения и одно и тоже состояние проигрывать в надежде на те же адреса и т.п.), можно сделать так:
VAB>- сначала падаем и смотрим по какому адресу проблема, адрес-диапазон запоминаем
VAB>- перезапуск виртуалки и в отладчике ставим бряки на запись по этому адресу
VAB>- удим рыбу
Могу предложить даже готовое решение как выловить такое место.
Есть такой продукт
SmartHeap, который реализует скоростной менеджер кучи (подменяются все New, Alloc, etc.). В нем есть Debug DLL со множествами способов отладки таких ситуаций:
1. К каждому выделенному указателю присобачивается вначале и в конце дополнительные контрольные байты. Если их кто то перетер то через секунд 5 (настривается) выскакивает диалжг "Типа AAA указатель такой то был перетерт" — типа переполнение буфера, с дикой информацией Время выделения, CallStack выделения, Поток, иеще куча всего.
2. Некоторые указатели можна поставить на мониторинг, система буте следить что бы в них ничего не изменилось, случайно Работает по принципу чеканья области памяти на CRC через определенное время
3. DeferFree — интересная штука. Вы освобождаете указатель, но система не отдает его обратно в кучу, а держит его определенное время, забивает его специальными символами и следит что бы в него никто не записал.
4. Может и не все вспомнил... Читайте что можна тут:
HeapAgent. Если заинтересовало, могу для теста выслать (продукт совсем и даже очень не бесплатный)