Следите за тем, как они порождаются - PullRequest
1 голос
/ 26 января 2011

Заранее извиняюсь - я не тот человек, который решает эту проблему, но сегодня сильная снежная буря, и только стажер (я) был достаточно сумасшедшим, чтобы войти из моей команды.

Проще говоря - у меня есть приложение, в котором после повторения определенной задачи (десериализации файла и выполнения определенных вызовов на основе данных) около 115 раз существует порог, при котором любая из нескольких других задач может вызвать сбой приложения. Все три действия, которые могут привести к сбою приложения, включают отображение новых окон.

Мое лучшее предположение (судя по тому, как я смотрю на счетчик потоков в диспетчере задач Windows, когда я нажимал несколько раз), заключается в том, что мы неправильно удаляем потоки. Формула, по-видимому, состоит из 4-х потоков, которые появляются (больше на самом деле создаются, большинство уходят) каждый раз, когда я загружаю файл. Я хочу знать, есть ли способ пройти по коду и наблюдать за количеством потоков по мере продвижения процесса. Прямо сейчас я действительно даже не знаю, когда и где запускаются потоки, но если бы я это сделал, я мог бы следовать их логике и убедиться, что они не продолжают работать без необходимости.

Спасибо!

Ответы [ 3 ]

1 голос
/ 26 января 2011

Вы можете просмотреть все темы вашего приложения, используя IntelliTrace.Просто сделайте паузу, когда захотите, и вы увидите стек вызовов каждого запущенного потока.

1 голос
/ 26 января 2011

Я думаю, что наиболее вероятным является то, что вы создаете новые формы или обращаетесь к формам / элементам управления из фонового потока.

Для устранения проблемы подпишитесь на следующие события

AppDomain.UnhandledException и Application.ThreadException:

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

Установите точку останова в каждом обработчике событий и заблокируйте трассировку стека в исключении в аргументах события.

0 голосов
/ 26 января 2011

Если у вас есть доступ к источнику методов, которые выполняются в каждом потоке, вы можете вставить некоторые операторы трассировки, которые добавляются в список, который вы можете просмотреть в отладчике или дамп в файл получить представление о порядке выполнения потока. Зафиксируйте список так, чтобы сохранить порядок исполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...