调试Visual Studio Designer错误的好方法

时间:2008-09-02 14:22:16

标签: visual-studio gui-designer

是否有一种在Visual Studio Designer中调试错误的好方法?

在我们的项目中,我们有大量的UserControls和许多复杂的表单。对于复杂的,设计师经常会抛出各种例外,这些例外并没有多大帮助,我想知道是否有一些很好的方法来弄清楚出了什么问题。

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

7 个答案:

答案 0 :(得分:38)

我已经能够通过运行VS的第二个实例调试一些控制设计器问题,然后从第一个VS实例执行“Debug - > Attach to Process”并选择“devenv”。

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

答案 1 :(得分:7)

请参阅 Debugging Design-Time Controls (MSDN)。

答案 2 :(得分:2)

它在2005年一直很痛苦,现在仍然是在2015年。断点通常不会受到影响,可能是因为组件被影子复制或设计师的某些东西(?)。您可以做的最好的事情是通过调用Debugger.Break()来手动中断。您可以将其包装到条件编译器中,如下所示:

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

答案 3 :(得分:1)

我已经多次发生这种情况,这真的很痛苦。

首先,我建议尝试遵循设计师提供的堆栈跟踪,但我发现通常只是列出了一堆内部功能并没有多大用处。

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

最后一种方法可能是从表单中删除所有未生成的代码,然后逐步重新引入它以确定错误。

如果您正在使用自定义控件,则可以手动删除与自定义控件相关的生成代码,如果之前的方法仍然导致错误。然后,您可以以相同的方式逐步重新介绍此问题,以确定导致问题的自定义控件,然后单独调试。

基本上,据我所知,这个问题并没有真正的解决方法,只能将其搞砸一点!

答案 4 :(得分:1)

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

一旦我更改为“托管4.0,4.5”,就会遇到WinRT应用程序的断点。来源: Designer Debugging in WinRT

答案 5 :(得分:0)

每一个都是不同的,它们有时可能是模糊不清的。作为第一步,我会做以下事情:

  • 使用源代码管理并经常保存。发生设计器错误时,获取最近发生的受影响控件的所有更改列表,并测试每个更改,直到找到罪魁祸首
  • 请务必查看所涉及控件的初始化例程。通常会出现这些错误,因为某些错误或通过控件的默认构造函数调用的错误依赖性(一个错误可能只在VS中显示)

答案 6 :(得分:0)

您可以运行VS的第二个实例并将其附加到VS的第一个实例(Ctrl + Alt + P)。在第一个实例中设置断点,在第二个实例中运行设计器,断点将触发。您可以单步执行代码,但“编辑并继续”将无效。

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