2011-01-26 52 views
1

道歉 - 我不是合适的人选要解决这个问题,但今天有一个大的暴风雪,只有实习生(我)是够疯狂的进来我球队。跟踪线程,因为他们提前催生

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

我最好的猜测(从Windows任务管理器线程数盯着我反复点击囊括)是我们没有处置线程的正确。公式似乎是每次加载文件时出现的4个线程(实际上创建的更多,大多数都会消失)。我想知道是否可以通过代码逐步完成并观察过程进行时的线程数量。现在我真的不知道什么时候或者在哪里开始线程,但是如果我这样做了,我可以遵循他们的逻辑并确保它们不会不必要地继续运行。

谢谢!

+0

当代码停止时,线程将消失。您可以使用调试器跟踪线程,但似乎不太可能会帮助您。 – 2011-01-26 19:28:50

+0

任何你不使用ThreadPool的理由?根据你所说的话,这将消除这个问题。重用线程比持续创建/处理它们更好(即使它们的处理正确)。 – 2011-01-26 19:40:55

回答

0

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

1

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

1

我认为最有可能的是,你从创建一个后台线程的新形式或访问形式/控制。

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

AppDomain.UnhandledExceptionApplication.ThreadException

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

将断点在每个事件处理程序,并锁定了在事件参数异常的堆栈跟踪。