有没有在 Visual Studio 设计器中调试错误的好方法?
在我们的项目中,我们有大量的用户控件和许多复杂的表单。对于复杂的,Designer 经常抛出各种没有多大帮助的异常,我想知道是否有一些很好的方法来找出问题所在。
语言是 C#,我们使用的是 Visual Studio 2005。
有没有在 Visual Studio 设计器中调试错误的好方法?
在我们的项目中,我们有大量的用户控件和许多复杂的表单。对于复杂的,Designer 经常抛出各种没有多大帮助的异常,我想知道是否有一些很好的方法来找出问题所在。
语言是 C#,我们使用的是 Visual Studio 2005。
我已经能够通过运行 VS 的第二个实例来调试一些控件设计器问题,然后从您的第一个 VS 实例执行“调试 - > 附加到进程”并选择“devenv”。
第一个 VS 实例是您设置断点的地方。使用第二个实例加载设计器以使“设计器”代码运行。
请参阅调试设计时控件(MSDN)。
2005 年一直很痛苦,2015 年仍然如此。断点通常不会命中,可能是因为程序集被影子复制或设计师(?)。您可以做的最好的事情是通过引入对Debugger.Break()
. 您可以将其包装到有条件的编译器中,如下所示:
#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 中的设计器调试。
每一个都是不同的,它们有时可能是模糊的。作为第一步,我将执行以下操作:
您可以运行 VS 的第二个实例并将其附加到 VS 的第一个实例 (Ctrl+Alt+P)。在第一个实例中设置断点,在第二个实例中运行设计器,断点将触发。您可以单步执行代码,但“编辑并继续”将不起作用。
要使“编辑并继续”工作,请将控件库的调试选项设置为运行 VS,命令行参数为解决方案文件名。然后您可以简单地设置断点并按 F5。它将像用户代码一样进行调试!附带说明一下,您也可以对 VS 和 Office 加载项执行此操作。