【问题标题】:Debug control crash in visual studio designerVisual Studio 设计器中的调试控件崩溃
【发布时间】:2011-04-13 09:37:13
【问题描述】:

当我构建应用程序时,我有一个控件在表单设计器上崩溃,我正在尝试找出如何调试问题。

我认为能够使用调试器所需要做的就是启动 VS 的第二个副本并使用 Debug-Attach 来处理并附加到 Visual Studio 的副本,我的麻烦控制的解决方案是我这样做了,但是当控件崩溃时什么都没有发生,所以我知道我做错了什么......

在设计器中发生崩溃并返回消息框:

---------------------------
Microsoft Visual Studio
---------------------------
The control NameSpace.MyControl has thrown an unhandled exception in the designer and has been disabled.  



Exception:

Could not load file or assembly 'OtherProject, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.



Stack trace:

   at NameSpace.MyControl.OnPaint(PaintEventArgs e)
---------------------------
OK   
---------------------------

OtherProject 是解决方案的一部分,由包含表单和自定义控件的项目引用。

当我关闭消息框时,控件会在我的表单上显示控件所在的堆栈跟踪,但由于它不包含行号,我不知道问题出在哪里。

【问题讨论】:

  • 崩溃是什么意思?整个 Visual Studio 是否会直接消失而没有任何错误消息?或者当您尝试打开表单时是否看到错误消息?当设计人员无法实例化控件并且通常您会在错误消息中获得非常有用的信息时,就会发生这种情况。如果有消息,请在此处发布。
  • OtherProject 是您解决方案中的一个项目吗?它编译了吗?

标签: debugging visual-studio-2010 designer designmode


【解决方案1】:

程序集在设计时加载时的搜索路径不同,它将是 Visual Studio 的探测路径。由 Common7\IDE 中的 devenv.exe.config 文件配置。仅包含 Public Assemblies 和 Private Assemblies 文件夹。 考虑您项目的构建目录。

修改此 .config 文件或将程序集复制到这些文件夹之一并不完全实用。到目前为止,最好的办法是在设计时不要调用需要此程序集的代码。使用 DesignMode 属性:

    protected override void OnPaint(PaintEventArgs e) {
        if (!this.DesignMode) {
            // Runtime painting code here
            //...
        }
        base.OnPaint(e);
    }

【讨论】:

  • 我正在尝试找出崩溃的来源,因此我只能抑制有问题的代码,并且在设计器中没有完全空白的控件。我的部分问题是该项目是由其他人启动的,并且控件以我没想到的方式相互交互。在这种情况下,崩溃发生在 controlA 中,但只有当 controlB 在表单上时才会发生。
  • 我显然无法帮助您为您找到那个,不确定您希望我说什么。 DesignMode 属性是关键。
  • 这就是我询问如何附加调试器的原因。我想得到它崩溃的线路,并查看在控件中调用了什么来触发它。设计师中显示的堆栈部分没有行号或显示任何内容,除了导致 OnPaint 调用的框架方法,因此它无助于缩小问题的范围。
  • 当 JIT 编译器无法为 OnPaint 方法生成代码时会发生故障。因此没有什么可看的。将自定义绘图代码移到自己的方法中,这样至少在轰炸前会进入OnPaint方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多