Почему приложение будет действовать по-другому после присоединения отладчика VS?

У меня есть настольное приложение, написанное на C#. Он пытается управлять подключением к сокету и терпит неудачу. Это же приложение является успешным, если оно подключено к отладчику Visual Studio.

Как это можно отладить?

Это пример Heisenbug? en.wikipedia.org/wiki/Heisenbug#Heisenbugs

Thomas Owens 23.09.2008 16:11

Нет, это просто то, с чем я столкнулся сегодня с одним из наших приложений.

Orkun Balkancı 23.09.2008 16:12
Стоит ли изучать 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 называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
2
460
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Обычно проблемы со сроками. Есть ли какие-то темы? Если C / C++, то может быть много причин из-за того, как могут вести себя ошибки управления памятью.

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

Если вы выделяете оперативную память через malloc или new, убедитесь, что память правильно инициализирована, прежде чем использовать ее.

Он сказал C#, что означает отсутствие malloc или new, а также переменных с предсказуемыми значениями по умолчанию.

Curt Hagenlocher 23.09.2008 16:27

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

Чтобы отладить его, попробуйте добавить в свое приложение код регистрации, я лично использую log4net

У вас не должно быть проблем с malloc и т.п., когда вы пишете на C#.

если вы запускаете веб-приложение, возможно, есть разница между веб-сервером cassini в VS и тем, на котором вы развертываете.

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

Это классический пример тайминга.

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

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

Мы действительно столкнулись с подобной проблемой. Время - важная часть этого. А также игнорирование кода (основное отличие от отлаженного кода).

При программировании сокетов кажется, что отладка с VisualStudio.Net похожа на выполнение дополнительных вызовов Application.DoEvents (). Мы обнаружили, что у нас есть вещи, которые не работают (без отладки), если мы не позволим компоненту «дышать» (например, обработать свои собственные события), вызвав Application.DoEvents ().

Когда Visual Studio подключается к вашему приложению, среда CLR и JIT имеют тонкие различия во время выполнения, чтобы включить отладку. Например, сборка мусора отличается.

http://stupiddumbguy.blogspot.com/2008/05/net-garbage-collection-behavior-for.html

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

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