2008-09-02 75 views
36

有没有一种很好的方法可以在Visual Studio Designer中调试错误?调试Visual Studio Designer错误的好方法

在我们的项目中,我们有大量的UserControls和许多复杂的表单。对于复杂的问题,设计人员经常会抛出各种不利的例外情况,我想知道是否有一些很好的方法可以找出问题所在。

的语言是C#,我们正在使用Visual Studio 2005

回答

0

每个人都是不同的,他们有时是模糊的。作为第一步,我将执行以下操作:

  • 使用源代码管理并经常保存。当设计者错误发生时,得到的所有变化最近已经发生的影响控制列表,并测试每一个,直到找到元凶
  • 一定要检查参与控件的初始化程序。很多时候,这些错误会发生,因为一些错误或坏的依赖是通过默认构造函数呼吁控制
1

我有这种情况发生了很多次,这是(可能只体现在VS的错误)真正的痛苦。

首先我建议尝试遵循由设计者提供的堆栈跟踪,但我发现,往往只是列出了一堆内部的东西,是没有多大用处。

如果不工作,然后尝试编译,并从那里确定的除外。你真的在盲目飞行,这是问题所在。然后,您可以尝试简单地运行代码并查看运行时引发的异常,这应该会提供更多信息。

最后时刻方法可以是从表单中删除所有的非生成的代码和逐渐重新引入它来确定错误。

如果您使用自定义控件,你可以手动删除相关的自定义控件,以及如果前面的方法仍然导致错误生成的代码。然后,您可以用相同的方式逐步重新引入此步骤,以确定哪个自定义控件导致问题,然后单独进行调试。

基本上只要我可以告诉周围出现比苦干出来有点其他问题没有真正的方法!

38

我已经能够通过运行第二个VS实例来调试一些控制设计器问题,然后从第一个VS实例执行“调试 - >附加到进程”并选择“devenv”。

第一个VS实例是您设置断点的地方。使用第二个实例加载设计器以使“设计器”代码运行。

+0

不会中断... – serhio 2011-12-09 16:25:06

+0

什么是简单的解决方案!爱它,帮助我大大。 – Mohgeroth 2012-09-26 13:54:54

+0

**为什么使用第二个实例导致设计器代码运行**?我不明白为什么你不要在`InitializeComponent()`方法中注释``属性? – 2012-10-31 09:35:40

0

您可以运行VS的第二个实例并将其附加到VS的第一个实例(Ctrl + Alt + P)。在第一个实例中设置断点,在第二个实例中运行设计器,并且断点将被触发。您可以浏览代码,但“编辑并继续”不起作用。

要编辑并继续工作,请设置控制库的调试选项,以使用命令行参数作为解决方案文件名来运行VS。然后,您可以简单地设置断点并按F5。它将像用户代码一样进行调试!作为一个便笺,你可以做VS和Office加载项。

1

我发现了为什么有时候断点没有被击中。在附加到进程对话框中,“附加到:”类型必须是“选择...”。

当我更改为“托管4.0,4.5”时,WinRT应用程序的断点被击中。来源:Designer Debugging in WinRT

2

它在2005年一直很痛苦,现在仍然是在2015年。断点通常不会触及,可能是因为程序集被阴影复制或设计者(?)的东西。您可以做的最好的方式是通过致电Debugger.Break()手动中断。您可以将其编译为一个条件如下的编译器:

#if DEBUG 
    System.Diagnostics.Debugger.Break(); 
#endif 
int line_to = break; // <- if a simple breakpoint here does not suffice