Re[2]: Самый хитрый баг
От: Danchik Украина  
Дата: 30.03.06 16:44
Оценка:
Здравствуйте, 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. Если заинтересовало, могу для теста выслать (продукт совсем и даже очень не бесплатный)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.