почему приложение будет работать по-другому после подключения отладчика VS? - PullRequest
2 голосов
/ 23 сентября 2008

Существует настольное приложение, написанное на c #, пытающееся управлять соединением через сокет и терпящее неудачу, но успешное после того, как то же приложение было присоединено к visual studio.

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

Ответы [ 7 ]

5 голосов
/ 23 сентября 2008

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

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

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

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

1 голос
/ 23 сентября 2008

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

0 голосов
/ 20 ноября 2008

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

0 голосов
/ 20 ноября 2008

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

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

0 голосов
/ 23 сентября 2008

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

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

0 голосов
/ 23 сентября 2008

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

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

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

0 голосов
/ 23 сентября 2008

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

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

...