zoukankan      html  css  js  c++  java
  • 开发托管ActiveX或第三方程序托管插件时调试问题解决方法

    问题描述:

    用VS2010开发ActiveX控件,项目属性里,调试设置为:

        启动外部程序:C:\Program Files\Internet Explorer\iexplore.exe

        命令行参数:-noframemerging -nohangrecovery http://localhost/PrintSettingTest.htm

    目标框架设置为2.0时,可调试,断点可命中,模块列表可看见待调试托管dll已经加载,一切正常。

    但之后按照部署要求,目标框架统一改为.NET 4.0,问题出现了,无法命中任何断点,调试时模块列表为空,初步判断VS2010调试器加载调试引擎的

    框架版本选择错误,未正确识别,google了一大堆,找到建立iexplore.exe.config并加入如下配置,强制指定clr版本的方法:

    1 <?xml version="1.0"?>
    2 <configuration>
    3     <startup useLegacyV2RuntimeActivationPolicy="true">
    4         <supportedRuntime version="v4.0"/>
    5     </startup>
    6 </configuration>

    测试无效。又建立了TestActiveX.dll.config,内容如上,同样无效。

    后尝试在欲调试代码前加入代码:

    1             Debugger.Launch();
    2             Debugger.Break();

    运行,出现如下错误:

     听他的,分离再附加:

    可见模块正常加载,可以调试并命中断点。

    但每次都要手动附加貌似非常麻烦哦,继续google,找到好方法:
    http://through-the-interface.typepad.com/through_the_interface/2010/04/hitting-breakpoints-in-net-class-libraries-while-debugging-with-visual-studio-2010.html

    解决方法:

    因为我的托管dll的宿主是IE,那么我在解决方案上点右键,添加-》现有项目,定位到 C:\Program Files\Internet Explorer\ 并选择 iexplore.exe

    在iexplore项目上右键:

    然后把iexplore设为启动项。

    注意,到此并未结束,因为IE8开始每个网页Tab都会开新进程,导致当只打开一个网页调试会出现一个框架进程,我们得取消他。使用下面的注册表取消:

    Windows Registry Editor Version 5.00
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN]
    
    "TabProcGrowth"=dword:00000000
    ;当不调试时用以下字段代替以上字段
    ;"TabProcGrowth"=-

    把注册表另存为REG文件,并导入。这下你就可以痛痛快快地调试托管dll了。

  • 相关阅读:
    mongodb(2)
    mongodb(1)
    分片集群
    副本集 集群
    java连接腾讯云上的redis
    maven打包
    生成ftp文件的目录树
    从ftp获取文件并生成压缩包
    android 连续点击退出程序
    Android之完美退出方法
  • 原文地址:https://www.cnblogs.com/binsys/p/2470779.html
Copyright © 2011-2022 走看看