Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 了解为什么我的应用程序有时会出现问题的技巧';挂起';装载期间_C#_.net_Winforms_Debugging - Fatal编程技术网

C# 了解为什么我的应用程序有时会出现问题的技巧';挂起';装载期间

C# 了解为什么我的应用程序有时会出现问题的技巧';挂起';装载期间,c#,.net,winforms,debugging,C#,.net,Winforms,Debugging,我有一个(相当大的)应用程序,在加载时偶尔会出现“卡住”的情况,控件有一半油漆等 根据我从日志记录中得到的结果,这发生在_Load事件结束之后 我唯一一次从VisualStudio运行时遇到这种情况,我尝试暂停一下,然后就转到了应用程序。在main中运行行,所以这没有多大帮助 TaskMan没有说应用程序“没有响应”——但也许我没有等足够长的时间让它解决这个问题(有人知道需要多长时间吗?) 我将继续尝试缩小范围(测试机器上的ProcessExplorer等),但如果有人对搜索方向有任何想法,在我

我有一个(相当大的)应用程序,在加载时偶尔会出现“卡住”的情况,控件有一半油漆等

根据我从日志记录中得到的结果,这发生在_Load事件结束之后

我唯一一次从VisualStudio运行时遇到这种情况,我尝试暂停一下,然后就转到了应用程序。在main中运行行,所以这没有多大帮助

TaskMan没有说应用程序“没有响应”——但也许我没有等足够长的时间让它解决这个问题(有人知道需要多长时间吗?)

我将继续尝试缩小范围(测试机器上的ProcessExplorer等),但如果有人对搜索方向有任何想法,在我开始将printfs全部放入代码之前…

请使用类似或的探查器。此外,当您暂停时,如果代码在另一个线程上运行,您可以通过选择以下选项切换到另一个线程:


调试-->Windows-->线程。

您可以尝试连接探查器,并查看启动过程中花费的时间。这可能会让你找到一个好的候选人。

听上去,你可能在某个地方有一个无限循环。我会查看加载事件后发生的任何冗长的进程和/或循环。

如果调试器中没有出现问题,您可以运行该程序,等待它挂起,然后从Visual Studio中转到附加到进程。。。(在VS2005的“工具”菜单下)


然后查看其他海报中提到的线程。

您提供的诊断与行为匹配。窗体的加载事件将是在窗体绘制自身之前运行的代码的最后一位。下一个将是显示的事件。调试器确实会在Application.Run()调用时停止,这是您编写的调试器具有源代码信息的最后一段代码

关键是要仔细检查调用堆栈窗口,应用程序上方应该有额外的堆栈框架。运行一个。如果导致挂起的代码是托管代码,那么最上面的代码就是麻烦制造者。您将没有它的源代码,如果您需要该代码,使用Microsoft Reference源代码服务器进行安装是很重要的

但它不太可能是托管代码,绝大多数Paint事件处理程序都是非托管代码,在Windows或某种ActiveX控件中。要深入了解此类代码,您需要启用非托管调试。项目+属性,调试选项卡。另外,工具+选项,调试器,关闭“仅我的代码”。从Microsoft的符号服务器调试符号的设置对于理解堆栈跟踪非常重要,如果您仅在堆栈跟踪中获取十六进制地址,请执行此操作


接下来,您应该能够通过观察哪些控件正在被绘制,哪些控件没有被绘制,来了解是什么特定控件导致了这个问题。控件按Z顺序绘制,您看不到或只看到部分的控件应该是麻烦制造者。绘画挂起在Windows或.NET控件中是闻所未闻的,请怀疑窗体上有任何类型的ActiveX控件

是的,但是一个无限循环只是有时,这是我不理解的。是的,所以我会检查你所有的循环,即,逐步通过它们,并再次检查它们是否依赖于设置的任何特定标志。再说一次,这只是在黑暗中拍摄,因为没有代码供我调试:)