Подтвердить что ты не робот

Разрыв одной нити

Можно ли разбить один поток в Visual Studio, в то время как другие потоки продолжат выполнение?

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

4b9b3361

Ответ 1

откройте вид потока (Debug- > Windows- > Threads), щелкните правой кнопкой мыши поток, который вы хотите приостановить, выберите "Freeze". Выберите "Оттепель", чтобы вернуть его в рабочее состояние.

Ответ 2

Как правило, это невозможно, но есть некоторые вещи, которые могут работать для определенных сценариев.

Основное решение Как уже упоминалось в другом месте, повторение последовательности: "Замораживание", "Возобновить" ( "Ожидание" ), "Пауза", "Оттаивание", "Шаг" должны привести к описанию поведения, предоставляя другим потокам возможность работать в фоновом режиме, пока ваш целевой поток остановлен.

Этот подход имеет как минимум две проблемы:

  • Это довольно утомительно
  • Ваши фоновые потоки будут приостановлены в любое время, когда отладчик приостановлен.

<сильные > Улучшения

Первая проблема может быть решена с использованием другой процедуры: Задайте a Thread.Sleep(10000) в окне Immediate, эффективно сохраняя сосредоточенный поток занятым, пока другие потоки выполняются нормально. Вы можете даже привязать эту команду к макросу.

Вторая проблема может быть решена только подходом, который не требует приостановки отладки. Но как мы будем рассматривать состояние, когда сессия не будет приостановлена? Что там, где IntelliTrace входит, но вы можете обнаружить, что вам нужно создать пользовательский IntelliTrace события. Недостатком этого подхода является то, что вы не можете вручную изменить состояние среднего полета.

Ответ 3

Установите счетчик, который делает один для каждого созданного потока, а затем установите точку прерывания для прерывания состояния и выберите значение для этого счетчика. Я не думаю, что это будет работать во всех случаях, особенно в PLINQ, но должно выполняться во многих ситуациях.

Ответ 4

Все, что я могу найти, это то, что вы можете изменить поведение на уровне процесса с помощью параметра

  • Инструменты - Параметры - Отладка - Общие - Разрыв всех процессов при разрыве одного процесса

но не в базе Thread.

Ответ 5

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

Вы также можете найти это полезным: http://www.codeproject.com/Tips/396617/Conditional-Breakpoint-using-Make-Object-Id-featur

Это работало для меня в VS2008 и должно работать по-иному в 2010 году как минимум