Как составить список потоков при отладке в Visual Studio Express 2010

Я пытаюсь отследить причину, по которой мое приложение WPF не завершается корректно во время отладки. Под «чисто» я подразумеваю, что все окна закрыты, я вижу различные сообщения в окне вывода, показывающие, что приложение завершено, но процесс все еще активен, а кнопка «Стоп» в отладчике все еще активна.

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

Мне было интересно, может ли VSE 2010 перечислить все активные потоки, поскольку это может дать представление о том, что еще «живо» после завершения основной программы. Или есть внешний инструмент, который может помочь здесь?




Ответы (2)


Вы должны иметь возможность использовать окно Visual Studio Threads, чтобы увидеть, какие потоки все еще активны. Я не совсем уверен, что это окно доступно в версии Express (в документации такое ограничение не упоминается), но если у вас его нет, то вы также можете используйте WinDbg для получения списка всех тем. WinDbg является частью инструментов отладки для Windows. Возможно, вам потребуется установить последнюю версию Windows SDK, чтобы получить его.

person jessehouwing    schedule 22.01.2013
comment
Не удалось открыть окно Threads — элемент отображается серым цветом. Думаю, это экспресс-ограничение - person paul; 22.01.2013
comment
Тогда вам подойдет WinDbg. - person jessehouwing; 22.01.2013

Сначала используйте отладчик. Отладка + Прервать все, Отладка + Windows + Потоки, чтобы увидеть, какие потоки все еще работают. Вы можете дважды щелкнуть один из них и использовать Debug + Windows + Call Stack, чтобы увидеть, что он делает. Типичным случаем является поток, который вы начали, но забыли завершить. Свойство Thread.IsBackground позволяет среде CLR автоматически прерывать поток.

Технически возможна проблема с устройством, которое препятствует завершению процесса. В этом случае в окне «Потоки» обычно отображается только один поток с непроницаемой в противном случае трассировкой стека. Если вы используете Диспетчер задач, вкладку «Процессы», «Просмотр + выбор столбцов», отметьте «Ручки», вы можете увидеть, что все еще используется только один дескриптор. Таким образом, диагностика заключается в том, что на вашем компьютере установлен паршивый драйвер устройства, который не поддерживает должным образом отмену ввода-вывода. Это может оставить работающий поток ядра, который не завершится, что предотвратит завершение процесса. Очень необычно, ищите сначала причины, указанные в первом абзаце.

person Hans Passant    schedule 22.01.2013