Как исправить предупреждение «Обнаружен повторный вход», выданное отладчиком Visual Studio? - PullRequest
1 голос
/ 06 апреля 2010

При запуске наших модульных тестов в режиме отладки в определенный момент отладчик Visual Studio прерывается, показывая входной MDA . В связанной статье объясняется, что это происходит, когда Низкоуровневая точка расширения операционной системы, такая как векторный обработчик исключений , обращается в код управляемого приложения.

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

Я смотрю на трассировку стека в точке, где отображается это предупреждение, но у меня возникают проблемы с выяснением, какая здесь "точка расширения низкоуровневой операционной системы". Я не вижу каких-либо неуправляемых / управляемых переходов, кроме тех, которые были вызваны mstest и вызвали геттер System.Windows.Forms.Cursors.VSplit. Кроме того, простого вызова этого геттера из модульного теста недостаточно для того, чтобы вызвать предупреждение.

Что я здесь не так сделал и как это исправить?

1 Ответ

2 голосов
/ 09 июля 2010

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

В этом случае проблема заключается в System.Windows.Forms.Cursors.VSplit геттере. Я вижу два способа избежать этого:

  • строго следуйте шаблону MVVM и держите проблемный код отдельно в представлении, только тестируйте модель представления.
  • или скрыть код управления курсором за интерфейсом, который проверяется в модульном тесте
...