Помещенный Debug.Assert()
везде в код, где Вы хотите, имеют проверки работоспособности для обеспечения инвариантов. При компиляции Сборки конечных версий (т.е. никакой DEBUG
постоянный компилятор), вызовы к Debug.Assert()
будут удалены так, они не будут влиять на производительность.
необходимо все еще выдать исключения прежде, чем звонить Debug.Assert()
. Утверждение просто удостоверяется, что все как ожидалось, в то время как Вы все еще разрабатываете.
Вы можете использовать sos.dll внутри каталога windbg.
Сначала загрузите sos.dll в windbg:
.load clr10\sos.dll
Затем используйте! Sam ИЛИ! SaveAllModule для извлечения модулей в определенных расположение на диске:
!sam c:\notepad
Чтобы извлечь DLL без использования SOS, используйте расширение .writemem следующим образом:
найдите начальный и конечный адреса модуля, используя пример вывода lmvm dllname
для ieframe:
начало конечного имени модуля
61370000 61fb8000 ieframe
вычислить длину = конец-начало: ? 61fb8000 - 61370000
вывод: Вычислить выражение: 12877823 = 00c48000
, затем сохранить DLL следующим образом:
.writemem C: \ tmp \ mydll.dll 61370000 L? 00c48000
Это маловероятно чтобы предоставить вам точную DLL в том виде, в каком она была загружена с диска, исправить это нетривиально.
(Частично основано на этой статье )
Да, это правда. calc.exe также извлекает информацию о своем многопользовательском интерфейсе и прикрепляет ее к памяти, как и многие программы Windows, такие как mspaint, photoviewer и т. д.