Помогите поймать AV с WinDbg и ADPlus 7.0
Я хочу отследить нарушение доступа к памяти в SQL Server Compact Edition, как это описано на сайте http://debuggingblog.com/wp/2009/02/18/memory-access-violation-in-sql-server-compact-editionce/. конфиг это:
<ADPlus>
<Settings>
<RunMode>CRASH</RunMode>
<Option>Quiet</Option>
<ProcessName>MyApp.exe</ProcessName>
</Settings>
<Exceptions>
<Option>NoDumpOnFirstChance</Option>
<Config>
<Code>clr;av</Code><!–to get the full dump on clr access violation–>
<Actions1>FullDump</Actions1>
<ReturnAction1>gn</ReturnAction1>
</Config>
</Exceptions>
</ADPlus>
Я загружаю последние средства отладки и наблюдаю, как Microsoft переписывает инструмент adplus в управляемый код и изменяет синтаксис файла конфигурации. Я переписываю конфигурационный файл так:
<ADPlus Version="2">
<Settings>
<RunMode>Crash</RunMode>
<Option>Quiet</Option>
<Option>NoDumpOnFirst</Option>
<Sympath>c:\symbols\</Sympath>
<OutputDir>c:\work\output\</OutputDir>
<ProcessName>c:\work\app\output\MyApp.exe</ProcessName>
</Settings>
<Exceptions><!--to get the full dump on clr access violation-->
<Exception Code="clr;av">
<Actions1>FullDump</Actions1>
<ReturnAction1>gn</ReturnAction1>
</Exception>
</Exceptions>
</ADPlus>
И я получаю ошибку "Не удалось найти исключение с кодом: clr;av". Если я правильно понимаю, это не загружает расширение SOS, но я не могу найти правильный раздел и синтаксис, который я должен использовать, чтобы загрузить его.
adplus_old.vbs - по некоторым причинам не запустил процесс на Windows 7. WinDBG 6.12.0002.633 X86 ADPlus Engine Версия: 7.01.002 27.02.2009
Может быть, у кого-то есть рабочий пример конфигурации отладки приложения.NET с последним файлом adplus.exe?
2 ответа
Это должно загрузить SOS.dll для вас (если вы используете framework v1, это <cmd>.load clr10\sos.dll</cmd>
):
<ADPlus Version="2">
<precommands>
<cmd>.loadby sos mscorwks</cmd>
</precommands>
<Settings>
<RunMode>Crash</RunMode>
<Option>Quiet</Option>
<Option>NoDumpOnFirst</Option>
<Sympath>c:\symbols\</Sympath>
<OutputDir>c:\work\output\</OutputDir>
<ProcessName>c:\work\app\output\MyApp.exe</ProcessName>
</Settings>
<Exceptions><!--to get the full dump on clr access violation-->
<Exception Code="clr;av">
<Actions1>FullDump</Actions1>
<ReturnAction1>gn</ReturnAction1>
</Exception>
</Exceptions>
</ADPlus>