Почему отладчик Microsoft Visual C# 2008 Express Edition завершает работу случайным образом?

Я пишу многопоточное приложение Windows в Microsoft Visual C# 2008 Express Edition. В последнее время странно себя ведет отладчик.

Пока я перешагиваю строки кода с помощью клавиши F10, иногда она интерпретирует мою команду «Шаг над (F10)» точно так же, как команду «Продолжить» (F5), а затем программа возобновляет работу и завершается сеанс отладки.

Кто-нибудь знает, почему это происходит? При каких обстоятельствах команда Step Over может привести к остановке отладчика?

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

Это не проблема с моей клавиатурой: то же самое происходит, когда я просто нажимаю «Шаг вперед» на панели инструментов отладки.

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

Заранее спасибо!

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
0
4 237
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Я видел это несколько раз. Обычно это происходит при переключении контекста на другой поток. Таким образом, вы, возможно, проходите через поток с идентификатором 11, вы нажимаете F10, и есть упреждающий переключатель контекста, так что теперь вы работаете с потоком с идентификатором 12, и Visual Studio весело разрешает выполнение кода.

Есть несколько хороших советов по отладке здесь:

Tip: Break only when a specific thread calls a method: To set a per-thread breakpoint, you need to uniquely identify a particular thread that you have given a name with its Name property. You can set a conditional breakpoint for a thread by creating a conditional expression such as "ThreadToStopOn" == Thread.CurrentThread.Name .

You can manually change the name of a thread in the Watch window by watching variable "myThread" and entering a Name value for it in the value window. If you don't have a current thread variable to work with, you can use Thread.CurrentThread.Name to set the current thread's name. There is also a private integer variable in the Thread class, DONT_USE_InternalThread, this is unique to each thread. You can use the Threads window to get to the thread you want to stop on, and in the Watch window, enter Thread.CurrentThread.DONT_USE_InternalThread to see the value of it so you can create the right conditional breakpoint expression.

Обновлено: Есть также несколько хороших советов здесь. Я нашел это в Google по запросу «визуальная студия предотвращает переключение потоков во время отладки».

В экспресс-выпуске нет окна потоков. Тем не менее, условная точка останова в имени потока звучит интересно.

Don Kirkby 22.11.2008 09:12

Я считаю, что использование файла журнала очень удобно при работе с несколькими потоками.

Отладка потоков похожа на принцип Хюйзенберга - слишком внимательно наблюдайте, и результат изменится!

Ответ принят как подходящий

Вам следует взглянуть на этот Статья в базе знаний и подумать о соответствующем исправлении.

Обновлено: исправление решает подобные проблемы с отладкой. К сожалению, изменения исходного кода исправления не вернулись в основную ветку, и VS2010 поставляется с теми же проблемами. Это снова было исправлено с помощью пакета обновления 1.

Спасибо! У меня не было возможности подтвердить, что это исправление работает, но похоже, что должно, потому что они упоминают ту же проблему, что и у меня.

David Grayson 22.04.2009 23:22

Попробуйте этот http://support.microsoft.com/kb/957912. Работал у меня.

Другие вопросы по теме