Помогите поймать AV с WinDbg и ADPlus 7.0 - PullRequest
4 голосов
/ 07 июня 2010

Я хочу отследить нарушение доступа к памяти в 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: 7.01.002 02/27/2009

Может быть, у кого-то есть рабочий пример конфигурации отладки приложения .NET с последней версией adplus.exe?

Ответы [ 2 ]

1 голос
/ 07 июня 2010

Это должно загрузить 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> 
0 голосов
/ 07 июня 2010

Согласно этой документации для ADPlus: код исключения должен быть шестнадцатеричным значением кода ошибки. Например, если вы хотите захватить AV - вам нужно 0xC0000005

Вот ссылка о захвате дампов ошибок для CLR

...