2013-10-17 59 views
0

我正在寻找一些关于win32异常“创建窗口句柄错误”的帮助。 我们的程序(WinForms - C#)有时会抛出这个异常,有时窗口甚至会冻结,所以用户必须启动进程才能重新运行。如何找到win32异常源“创建窗口句柄错误”

从关于这个问题的许多其他线索,我知道我应该寻找什么,但不是在那里,因为我们的程序是相当大的。所以我希望有一种方法可以限制我要检查的代码行......是否有任何工具可以帮助解决这个异常问题?

回答

0

短暂更新:我解决了这个问题。

ProcDump对我的帮助不大,因为我从我们的日志文件中获得了相同的信息。但是,我能够在我们的开发环境中重现错误。感谢调试器并在taskmanager中显示用户对象计数,我发现memoryleak的来源 - 一个动态创建的未配置的texbox。

再次感谢提示!

0

如果在调试器内部发生这个问题,您可以设置调试器(我将假设您使用C#的Visual Studio)来抛出异常。在你的情况下,你会想设置一个异常断点(我认为)System.ComponentModel.Win32Exception

再次假定Visual Studio为IDE,在“Debug”菜单中是“Exceptions ...”项目。这允许你告诉调试器在特定异常被抛出时或者在未处理时抛出。

在公共语言运行时异常下,展开System.ComponentModel,并启用投掷列中的复选框System.ComponentModel.Win32Exception

然后就照常进行。如果在调试期间发生异常,它应该闯入你的程序并让你看到它发生的地方。

编辑:如果您不能重现您的开发机器上的问题,看看您是否能够建立目标机器时发生崩溃时产生转储。一种做法是运行ProcDump。如果发生异常,请使用-e参数运行它以创建转储。然后你可以在牧场分析这件事。

+0

嗨,感谢您的回答,是的,我使用的是Visual Studio 2012. 但是,我还没有能够在我们的本地计算机上重现问题,并且我们没有任何管理员权限用户在那里安装工作室。 但我会继续尝试重现错误 - 这次使用正确配置的调试器。感谢提醒,我已经完全忘记了这个选项在我所有的(绝望)尝试获取这个... – Sue

+0

我已经添加了一些信息,可以_may_帮助,关于创建一个小型转储,你可以分析以后的时间。 – icabod

+1

ProcDump的'-e'命令行参数只会在未处理的异常情况下写入一个minidump。鉴于大多数C#代码的性质,未处理的异常很少。您可能想使用'-e 1'来代替首次机会异常的小型转储。请注意,这可能会产生** lot **的小型转储。 – IInspectable