У меня есть настольное приложение, написанное на C#. Он пытается управлять подключением к сокету и терпит неудачу. Это же приложение является успешным, если оно подключено к отладчику Visual Studio.
Как это можно отладить?
Нет, это просто то, с чем я столкнулся сегодня с одним из наших приложений.





Обычно проблемы со сроками. Есть ли какие-то темы? Если C / C++, то может быть много причин из-за того, как могут вести себя ошибки управления памятью.
У вас могут быть переменные, значения по умолчанию которых отличаются при работе под компилятором, а не в автономном режиме. Условия гонки могут быть другой идеей, если задействованы потоки.
Если вы выделяете оперативную память через malloc или new, убедитесь, что память правильно инициализирована, прежде чем использовать ее.
Он сказал C#, что означает отсутствие malloc или new, а также переменных с предсказуемыми значениями по умолчанию.
Я бы сказал, что проблемы с синхронизацией тоже с подключенным отладчиком немного замедлят код, что может означать, что состояние гонки не возникает.
Чтобы отладить его, попробуйте добавить в свое приложение код регистрации, я лично использую 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
Это может быть связано с тем, что вы просматриваете в отладчике свойства с побочными эффектами. Хотя другие ответы здесь более вероятны ...
Это пример Heisenbug? en.wikipedia.org/wiki/Heisenbug#Heisenbugs