.NET → В каждом .net приложении резервируется память для трех исключений
На выходных заходил я к своему другу new_s в гости и он показал мне интересную вещь. Ему по работе нужно было анализировать дамп памяти .net приложения, где он искал утечки памяти и другое аномальное поведение и показал мне, что при старте любого .net приложения окружение резервирует память для трех исключений:
И это нормальное поведение. Почему?
- ExecutionEngineException
- StackOverflowException
- OutOfMemoryException
И это нормальное поведение. Почему?
C++ → Отлаживаем ошибки доступа к памяти с помощью Application Verifier
Хабраюзер burdakovd задал в Q&A задачку про C++, vector и запись в чужую память. Задачка, кроме всего прочего, хороша тем, что на ней можно удобно продемонстрировать, как пользоваться инструментом Application Verifier и находить, кто же портит память.
Application Verifier — очень мощный инструмент, кроме диагностики работы с хипом он умеет уйму всего другого, например определять неправильную работу с хендлами, ошибки реализации многопоточности, эмулировать нехватку ресурсов, чтобы проверить корректную работу программы в таких условиях, но об этом как-нибудь в другой раз.
Application Verifier — очень мощный инструмент, кроме диагностики работы с хипом он умеет уйму всего другого, например определять неправильную работу с хендлами, ошибки реализации многопоточности, эмулировать нехватку ресурсов, чтобы проверить корректную работу программы в таких условиях, но об этом как-нибудь в другой раз.
Персональные блоги → Осторожней с ChildWindow в Silverlight SDK. MemoryLeak detected
В процессе поиска своих утечек памяти в приложении написанном на Silverlight (последняя запись в моём личном блоге) обнаружил в классе ChildWindow ошибку, приводящюю к утечке памяти.
Персональные блоги → Wow64 и анализ дампов Silverlight
Писал сложную форму на Silverlight и когда дописал, с ужасом обнаружил, что у меня где-то происходит утечка памяти. Волноваться я не стал, а снял несколько дампов на 3,5 гигабайта и хотел было в WinDbg выяснить в чём собственно дело, но SOS упорно посылал меня на любую из команд.
Дело в том, что Silverlight это x86, поэтому, как только мы загрузим дамп в WinDbg x86, то надо явно сказать, что работать мы будем 32х битном режиме.
Волшебное слово:
!wow64exts.sw
Пример:
.loadby sos coreclr
.chain
!wow64exts.sw
Дальше работаем как обычно.
Have fun
Дело в том, что Silverlight это x86, поэтому, как только мы загрузим дамп в WinDbg x86, то надо явно сказать, что работать мы будем 32х битном режиме.
Волшебное слово:
!wow64exts.sw
Пример:
.loadby sos coreclr
.chain
!wow64exts.sw
Дальше работаем как обычно.
Have fun
Разработка → Debugging: Развертывание сервера отладочной информации
Копая залежи документов на своем рабочем компе обнаружил инструкцию по развертыванию сервера отладочной информации, которую писал два-три года назад. Попробую представить её хабросообществу. Данная инструкция будет полезна C++ разработчикам под Windows, которые хотят использовать отладку релизных версий своего продукта (удаленно и напрямую, на своих компах и компах тестировщиков), а также делать разбор крашдампов (postmortem debugging).
.NET → Отладка приложений в .NET Framework 2.0 и выше
Хочу начать серию статей, посвящённых отладке ваших .NET приложений на стороне заказчика, а также оптимизации вашего кода. В связи с этим понадобиться немного подготовить вашу систему. В этой статье мы ознакомимся с различными инструментами для отладки приложений, немного углубимся в описание CLR, где это будет необходимо.