在生成线程时跟踪它们

时间:2011-01-26 19:23:33

标签: c# .net wpf

提前道歉 - 我不是解决这个问题的合适人选,但今天有一场大风暴,只有实习生(我)疯狂到我的团队进来。

保持简单 - 我有一个应用程序,在重复某个任务(反序列化文件并根据数据进行某些调用)大约115次之后,有一个阈值,其中任何一个其他任务都会使应用程序崩溃。可能导致应用程序崩溃的所有这三个操作都涉及显示新窗口。

我最好的猜测(因为我反复点击时盯着Windows任务管理器线程计数)是我们没有正确处理线程。该公式似乎是每次加载文件时产生的4个线程(实际上创建更多,大多数消失)。我想知道是否有一种方法可以逐步完成代码并在进程进行时观察线程数。现在我甚至不知道线程何时或何地被启动,但如果我这样做,我可以遵循他们的逻辑并确保他们不会继续不必要的操作。

谢谢!

3 个答案:

答案 0 :(得分:1)

您可以使用IntelliTrace查看所有应用程序线程。 只要你想要暂停它,你就可以看到每个正在运行的线程的调用堆栈。

答案 1 :(得分:1)

我认为最有可能的是您从后台线程创建新表单或访问表单/控件。

要调试此问题,请订阅以下事件

AppDomain.UnhandledExceptionApplication.ThreadException

AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);

在每个eventhandler中放置一个断点并锁定事件args中异常中的堆栈跟踪。

答案 2 :(得分:0)

如果您有权访问每个线程中正在运行的方法的源,那么您可以插入一些追加到List的跟踪语句,您可以在调试器中查看或转储到文件中了解线程执行顺序。锁定列表以保持执行顺序。

相关问题