Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Замечание
Эта статья связана с .NET Framework. Он не применяется к более новым реализациям .NET, включая .NET 6 и более поздние версии.
Помощники по управляемой отладке (MDAs) — это средства отладки, которые работают с средой CLR для предоставления сведений о состоянии среды выполнения. Помощники создают информационные сообщения о событиях во время выполнения, которые вы не можете поймать. С помощью mdAs можно изолировать ошибки приложений, возникающие при переходе между управляемым и неуправляемным кодом.
Вы можете включить или отключить все mdAs, добавив ключ в реестр Windows или установив переменную среды. Вы можете включить определенные mdAs с помощью параметров конфигурации приложения. Дополнительные параметры конфигурации можно задать для некоторых отдельных MDA в файле конфигурации приложения. Так как эти файлы конфигурации анализируются при загрузке среды выполнения, необходимо включить MDA перед запуском управляемого приложения. Его нельзя включить для приложений, которые уже начались.
В следующей таблице перечислены MDAs, которые поставляются с .NET Framework.
По умолчанию платформа .NET Framework активирует подмножество MDAs для всех управляемых отладчиков. Вы можете просмотреть набор по умолчанию в Visual Studio, выбравпараметры исключений> в меню отладки, а затем разверните список "Помощники по управляемой отладке".
Включение и отключение MDAs
Вы можете включить и отключить mdAs с помощью раздела реестра, переменной среды и параметров конфигурации приложений. Для использования параметров конфигурации приложения необходимо активировать либо ключ реестра, либо переменную среды.
Подсказка
Вместо отключения mdAs можно запретить Visual Studio отображать диалоговое окно MDA при получении уведомления MDA. Для этого выберитепараметры исключений> в меню отладки, разверните список помощников по управляемой отладке, а затем установите или снимите флажок "Разрыв при возникновении" для отдельного MDA.
Ключ реестра
Чтобы включить MDAs, добавьте в реестр Windows подключ HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\MDA (тип REG_SZ, значение 1). Скопируйте следующий пример в текстовый файл с именем MDAEnable.reg. Откройте редактор реестра Windows (RegEdit.exe) и в меню "Файл" выберите "Импорт". Выберите файл MDAEnable.reg , чтобы включить mdAs на этом компьютере. Установка подкл. строковым значением 1 (не значение DWORD 1) позволяет считывать параметры MDA из файла ApplicationName.suffix.mda.config. Например, файл конфигурации MDA для Notepad будет называться notepad.exe.mda.config.
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework]
"MDA"="1"
Если компьютер работает с 32-разрядным приложением в 64-разрядной операционной системе, необходимо задать ключ MDA следующим образом:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework]
"MDA"="1"
Дополнительные сведения см. в разделеApplication-Specific Параметры конфигурации . Параметр реестра можно переопределить переменной COMPLUS_MDA среды. Дополнительную информацию см. в разделе Переменная среды.
Чтобы отключить mdAs, установите для подраздела MDA значение 0 (ноль) с помощью редактора реестра Windows.
По умолчанию некоторые MDA включаются при запуске приложения, подключенного к отладчику, даже без добавления ключа в реестр. Эти помощники можно отключить, выполнив файл MDADisable.reg , как описано ранее в этом разделе.
переменная окружения
Активация MDA также может контролироваться переменной среды COMPLUS_MDA, которая переопределяет ключ реестра. Строка COMPLUS_MDA представляет собой нечувствительный регистр, разделенный точкой с запятой список имен MDA или других специальных строк управления. Запуск под управляемым или неуправляемым отладчиком по умолчанию активирует набор MDA. Это делается путем неявного добавления списка, разделенного точкой с запятой, содержимого MDA, включенных по умолчанию в отладчиках, к значению переменной среды или ключа реестра. Ниже приведены строки специальных элементов управления:
0— деактивирует все MDA.1— считывает параметры MDA из ApplicationName.mda.config.managedDebugger— явно активирует все MDAs, которые неявно активируются при запуске управляемого исполняемого файла под отладчиком.unmanagedDebugger— явно активирует все MDAs, которые неявно активируются при запуске неуправляемого исполняемого файла под отладчиком.
Если есть конфликтующие параметры, последние параметры переопределяют предыдущие параметры:
COMPLUS_MDA=0отключает все MDA, включая те, которые неявно включены под отладчиком.COMPLUS_MDA=gcUnmanagedToManagedвключаетgcUnmanagedToManagedв дополнение к любым MDAs, которые неявно включены в отладчике.COMPLUS_MDA=0;gcUnmanagedToManagedвключаетgcUnmanagedToManaged, но отключает MDAs, которые в противном случае были бы неявно включены в отладчике.
Параметры Конфигурации Application-Specific
Вы можете включить, отключить и настроить некоторые помощники по отдельности в файле конфигурации MDA для приложения. Чтобы включить использование файла конфигурации приложения для настройки MDA, необходимо задать раздел реестра MDA или COMPLUS_MDA переменную среды. Файл конфигурации приложения обычно находится в том же каталоге, что и исполняемый файл приложения (.exe) . Имя файла принимает имя формы ApplicationName.mda.config; например, notepad.exe.mda.config. Помощники, включенные в файл конфигурации приложения, могут иметь атрибуты или элементы, предназначенные для управления поведением помощника.
В следующем примере показано, как включить и настроить маршалинг:
<mdaConfig>
<assistants>
<marshaling>
<methodFilter>
<match name="*"/>
</methodFilter>
<fieldFilter>
<match name="*"/>
</fieldFilter>
</marshaling>
</assistants>
</mdaConfig>
MDA Marshaling содержит сведения об управляемом типе, который маршалируется в неуправляемый тип для каждого перехода от управляемого к неуправляемому в приложении. MDA Marshaling также может фильтровать имена полей метода и структуры, предоставленных в дочерних элементах methodFilter и fieldFilter соответственно.
В следующем примере показано, как включить несколько MDA с помощью параметров по умолчанию:
<mdaConfig>
<assistants>
<illegalPrepareConstrainedRegion />
<invalidCERCall />
<openGenericCERCall />
<virtualCERCall />
</assistants>
</mdaConfig>
Это важно
При указании нескольких помощников в файле конфигурации необходимо указать их в алфавитном порядке. Например, если вы хотите включить как virtualCERCall, так и invalidCERCall MDAs, необходимо добавить запись <invalidCERCall /> перед записью <virtualCERCall />. Если записи не находятся в алфавитном порядке, отображается необработанное сообщение об исключении файла конфигурации.
Исключения MDA
Если MDA включен, он активен, даже если код не выполняется под отладчиком. Если событие MDA возникает, когда отладчик отсутствует, сообщение о событии отображается в диалоговом окне необработанного исключения, хотя это не необработанное исключение. Чтобы избежать диалогового окна, удалите параметры включения MDA, если код не выполняется в среде отладки.
При выполнении кода в интегрированной среде разработки Visual Studio можно избежать диалогового окна исключения, которое отображается для определенных событий MDA. Для этого в меню отладки выберитепараметры исключений>. В окне "Параметры исключений " разверните список "Помощники по управляемой отладке ", а затем снимите флажок "Разрыв при возникновении " для отдельного MDA. Это диалоговое окно также можно использовать для включения отображения диалоговых окон исключений MDA.
Выходные данные MDA
Выходные данные MDA аналогичны следующему примеру, в котором показаны выходные данные PInvokeStackImbalance MDA:
Вызов функции PInvoke "MDATest! MDATest.Program::StdCall' разбалансировал стек. Скорее всего, это связано с тем, что управляемая подпись PInvoke не соответствует неуправляемой целевой подписи. Убедитесь, что соглашение о вызовах и параметры подписи PInvoke соответствуют целевой неуправляемой подписи.