使用WinDbg和ADPlus 7.0帮助捕获AV

时间:2010-06-07 12:10:37

标签: .net sql-server-ce windbg access-violation adplus

我想在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>

我下载最新的调试工具,观察微软将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

也许某人有一个使用最新adplus.exe调试.NET应用程序配置的工作示例?

2 个答案:

答案 0 :(得分:1)

这应该为您加载SOS.dll(如果您使用的是框架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> 

答案 1 :(得分:0)

根据ADPlus的this文档:异常代码应为错误代码的十六进制值。例如,如果你想捕获AV - 你需要0xC0000005

以下是关于捕获CLR错误转储的link