调试Visual Studio Designer错误的好方法

调试Visual Studio Designer错误的好方法

Good Way to Debug Visual Studio Designer Errors

有没有在Visual Studio Designer中调试错误的好方法?

在我们的项目中,我们有大量的UserControls和许多复杂的表单。 对于复杂的异常,设计器经常会抛出各种异常,但并没有多大帮助,我想知道是否有某种很好的方法来找出问题所在。

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


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

在第一个VS实例中,您将在其中设置断点。使用第二个实例来加载设计器,以使"设计器"代码运行。


请参阅调试设计时控件(MSDN)。


在2005年一直是痛苦的一年,在2015年仍然如此。断点通常不会出现,这可能是因为程序集被影子复制或由设计人员(?)进行了某些操作。最好的办法是通过引入对Debugger.Break()的调用来手动中断。您可以按以下条件将其包装到编译器中:

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

我发现了为什么有时没有命中断点的原因。在"附加到进程"对话框中,"附加到:"类型必须为"选择..."。

一旦我更改为" Managed 4.0,4.5",就会遇到WinRT应用程序的断点。资料来源:WinRT中的Designer调试。


我已经发生过很多次了,这确实是一个痛苦。

首先,我建议尝试遵循设计者提供的堆栈跟踪,尽管我发现通常只是列出一堆用处不大的内部东西。

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

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

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

就我所知,基本上来说,除了一点点解决之外,没有其他解决方法!


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

为了使"编辑并继续"正常工作,请设置控件库的调试选项以运行VS,并以命令行参数作为解决方案文件名。然后,您可以简单地设置断点并按F5。它将像用户代码一样进行调试!附带说明,您也可以同时执行VS和Office加载项。


每个人都是不同的,有时它们可??能是晦涩的。第一步,我将执行以下操作:

  • 使用源代码管理并经常保存。如果发生设计器错误,请获取对最近发生的受影响控件的所有更改的列表,并测试每个控件,直到找到罪魁祸首。
  • 确保检查出所涉及控件的初始化例程。通常,由于通过控件的默认构造函数调用的某些错误或不良依赖关系(通常仅在VS中表现出来的错误),才会发生这些错误。

推荐阅读

    linux命令创建项目组?

    linux命令创建项目组?,管理,密码,项目,命令,系统,位置,文件,用户组,用户,文

    复制项目的linux命令?

    复制项目的linux命令?,系统,项目,文件,命令,目录,源文件,语法,选项,目标,功

    linux命令项目部署?

    linux命令项目部署?,项目,服务,环境,软件,系统,代理,管理,统一,做好,业务,怎

    linux命令忽略错误?

    linux命令忽略错误?,系统,地址,工作,信息,设备,命令,设计,灵活,观察,标准,lin

    linux部署项目的命令?

    linux部署项目的命令?,项目,系统,设备,环境,工作,基础,传播,信息,标准,代码,L

    linux项目常用命令?

    linux项目常用命令?,工作,地址,系统,信息,管理,项目,命令,目录,标准,网络,lin

    linux项目更新命令?

    linux项目更新命令?,系统,信息,网络,地址,网站,通信,管理,时间,项目,命令,lin

    启动项目命令linux?

    启动项目命令linux?,工作,经理,产品,技术,地址,数字,系统,项目,命令,信息,怎

    linux编译项目的命令?

    linux编译项目的命令?,系统,工作,地址,软件,工具,信息,代码,项目,命令,环境,l

    linux调试终端命令?

    linux调试终端命令?,系统,工作,地址,首页,电脑,终端,命令,标准,信息,基础,求L

    项目linux常用命令?

    项目linux常用命令?,工作,地址,系统,管理,设备,信息,项目,命令,目录,标准,lin

    linux脚本调试的命令?

    linux脚本调试的命令?,工作,系统,管理,命令,地址,标准,脚本,底部,代码,官网,l

    linux命令调试模式?

    linux命令调试模式?,系统,工作,信息,地址,工程,命令,工具,环境,设备,地方,lin

    linux调试驱动的命令?

    linux调试驱动的命令?,系统,网络,官网,百度,地址,下来,第一,官方网站,软件,

    linux命令调试过程?

    linux命令调试过程?,代码,通用,地方,信息,系统,程序,进程,命令,编辑,断点,如

    linux上部署项目命令?

    linux上部署项目命令?,项目,软件,服务,工具,环境,代理,地址,代码,首页,做好,l

    linux创建项目命令?

    linux创建项目命令?,名称,新增,项目,文件,命令,首次,工作,时间,文件夹,文件

    linux命令输入方法?

    linux命令输入方法?,系统,电脑,密码,管理,地址,命令,网站,工具,首开,位置,lin

    linux项目部署命令?

    linux项目部署命令?,项目,服务,软件,环境,系统,代理,代码,统一,数字,基础,怎