Visual studio 调试Visual Studio设计器错误的好方法

Visual studio 调试Visual Studio设计器错误的好方法,visual-studio,gui-designer,Visual Studio,Gui Designer,在VisualStudioDesigner中是否有调试错误的好方法 在我们的项目中,我们有大量的用户控件和许多复杂的表单。对于复杂的异常,设计师经常抛出各种各样的异常,但这些异常并没有多大帮助,我想知道是否有什么好方法可以找出出现问题的地方 语言是C#,我们使用的是Visual Studio 2005。每一种语言都是不同的,有时它们可能是模糊的。作为第一步,我将执行以下操作: 经常使用源代码管理和保存。当发生设计器错误时,获取最近对受影响控件所做的所有更改的列表,并测试每个更改,直到找到罪魁祸

在VisualStudioDesigner中是否有调试错误的好方法

在我们的项目中,我们有大量的用户控件和许多复杂的表单。对于复杂的异常,设计师经常抛出各种各样的异常,但这些异常并没有多大帮助,我想知道是否有什么好方法可以找出出现问题的地方


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

每一种语言都是不同的,有时它们可能是模糊的。作为第一步,我将执行以下操作:

  • 经常使用源代码管理和保存。当发生设计器错误时,获取最近对受影响控件所做的所有更改的列表,并测试每个更改,直到找到罪魁祸首
  • 确保检查相关控件的初始化例程。这些错误通常是由于通过控件的默认构造函数调用的某个错误或错误依赖项(该错误可能只在VS中显示)

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

首先,我建议尝试遵循设计器提供的堆栈跟踪,尽管我发现它通常只是列出了一些没有多大用处的内部内容

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

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

如果您使用的是自定义控件,那么如果前面的方法仍然导致错误,您也可以手动删除与自定义控件相关的生成代码。然后,您可以以相同的方式一步一步地重新引入此控件,以确定是哪个自定义控件导致了问题,然后分别进行调试


基本上,就我所知,除了努力解决这个问题外,没有其他真正的解决办法

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


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

请参见(MSDN)。

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


对于“编辑并继续工作”,请将control library的调试选项设置为以命令行参数作为解决方案文件名运行VS。然后您可以简单地设置断点并点击F5。它将像用户代码一样调试!顺便说一句,你也可以在VS和Office外接程序中这样做。

我发现了为什么有时候断点不被命中。在“附加到流程”对话框中,“附加到:”类型必须为“选择…”


当我更改为“Managed4.0,4.5”时,应用程序的断点被命中。资料来源:。

这在2005年是一种痛苦,到2015年仍然如此。断点通常不会命中,可能是因为程序集被卷影复制或是由设计器执行的操作(?)。您所能做的最好的方法是通过引入对
Debugger.break()
的调用来手动中断。您可以将其包装到编译器条件中,如下所示:

#if DEBUG
   System.Diagnostics.Debugger.Break(); 
#endif
int line_to = break; // <- if a simple breakpoint here does not suffice
#如果调试
System.Diagnostics.Debugger.Break();
#恩迪夫

int line_to=break;//非常感谢冯!尤其是“启动调试会话”部分起到了帮助。“在第二个实例中,运行设计器,断点将触发”…不触发…多么简单的解决方案!喜欢它,帮了我大忙。为什么要使用第二个实例来运行设计器代码?我不明白你为什么不在
InitializeComponent()
方法上注释掉``属性?@Jeremy Thompson,因为Visual Studio承载并执行任何与设计器相关的代码(当你自己运行应用程序时不会执行的代码)。如果有任何问题,您可以通过注释掉任何“IsDesignMode”检查来解决。DebuggerStepThrough其实不是一回事。我看到你实际上在谈论VS顶级解决方案。库多斯布特,2016年会更好吗?;^)但2017年会更好吗?当然不是。。。仍然是一个错误和恼人的一如既往,并没有简单的方法来解决它。事实上,不止一位微软资源表示,这些错误是“故意”发生的,而最令人恼火的是,微软拒绝承认这是他们的问题。