Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: UDP не работает в релизе  (Прочитано 14819 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« : 12-04-2010 08:42 » 

очень странная проблема:

использую CAsyncSocket для приёма UDP данных. Всё работает в дебаге. Но в релизе функция ReceiveFrom всегда возвращает -1 с ошибкой 10035. Справедливости ради переделал на чистом АПИ (хотя, результат заранее был известен, так как код функций класса CAsyncSocket делает всё то же самое) - тоже в дебаге работает, в релизе нет.

Проявляется только на работе - дома всё отлично работает. Грешу на студию (VS2008), но переустанавливать её очень долго, может что-то надо конкретно исправить, кто сталкивался ?
Записан

baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #1 : 12-04-2010 08:48 » 

Возьми файл проекта и сравни значения настроек для Release и Debug - посмотри в чем разница.. Может, в компилятор передаеся какая-то доп. переменная или не с той библиотекой собирается..
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #2 : 12-04-2010 09:01 » 

вот так ничего подозрительного не увидел, на что конкретно внимание обратить ?
Записан

resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 12-04-2010 09:26 » 

  Я вот IDE потому и не люблю. У меня бывали всякие глюки на студии, от 6.0 и до 2005 включительно. Следующие студии уже так, юзал немного, но не всерьез.

 По теме.
 Был у меня буквально пару дней назад интересный такой пример. В одной софтине я активно пользовал Native API, и конкретно функцию NtAllocateVirtualMemory. Так вот ей передается (по мимо всего прочего) начальный адрес, с которого она должна разместить выделенные страницы памяти. Если адрес нулевой, то она сама выберет начальный адрес. Так вот я, уже в одной из своих функций, забыл изначально обнулить переменную с этим адресом. Пришлось поискать в чем дело, потому что эффект был, такой же, что и описан собственно в топике.
Получалась такая ситуация, что в дебажной сборке эта переменная обнулялась изначально, а вот в релизной нет. Отсюда происходила ошибка, так как даже богу не было известно о содержимом этой переменной в момент вызова функции.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #4 : 12-04-2010 09:35 » 

resource, про различное заполнение неинициализированных переменных в дебаге и релизе я знаю (обычно 0xcccccccc и 0x00000000 соотв)

но тут явно не в этом причина - я всё вывел на экрано тупо при помощи MessageBox - всё нормально. Только не читаются данные и всё тут

(замечу, что раньше с UDP в этой же программе работал без проблем. Только вот в отдельном процессе, что тут не могу сделать сейчас)
« Последнее редактирование: 12-04-2010 09:37 от Алексей1153++ » Записан

baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #5 : 12-04-2010 09:37 » 

Алексей1153++, при сборке проекта в окошке внизу должна выводиться длиинная командная строка вызова компилятора.. Сравни еще её..
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #6 : 12-04-2010 09:42 » 

debug
Код:
/Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_VC80_UPGRADE=0x0600" /D "_MBCS" /Gm /EHsc /RTC1 /MTd /Yu"stdafx.h" /Fp".\Debug/Guard2.pch" /Fo".\Debug/" /Fd".\Debug/" /FR".\Debug\\" /W3 /nologo /c /ZI /TP /errorReport:prompt

release
Код:
/O2 /Ob2 /Oi /Ot /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_VC80_UPGRADE=0x0600" /D "_MBCS" /GF /FD /EHsc /MT /Gy /Yu"stdafx.h" /Fp".\Release/Guard2.pch" /Fo".\Release/" /Fd".\Release/" /FR".\Release\\" /W3 /nologo /c /TP /errorReport:prompt

это ?
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #7 : 12-04-2010 11:03 » 

в совсем другом проекте класс применил (у меня этот UDP приёмник обёрнут в класс CFarPult)
Код:

::AfxSocketInit();

CFarPult FarPult;

if(FarPult.Run())
{
BYTE buf[100]={0};

int res;

for(;;)
{
res=FarPult.Read(buf,1);

CString txt;
txt.Format("res=%d, byte=%02x",res,*buf);
::MessageBox(0,txt,0,MB_SYSTEMMODAL);
}

}


всё аналогично. Либо студия сглючила, либо я стало блондинко (
Записан

RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 12-04-2010 11:34 » 

Леш, а на нижнем уровне ты как принимаешь данные? Пример, пожалуйста - с инициализацией переменных, используемых в функции приема.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 12-04-2010 11:36 » 

насчет ошибки 10035

Цитата
CASyncSockets: 10035: Operation would block
Цитата
Well, if you've never had the error before, it is a miracle. This is the assumed return code for an asynchronous socket that would block. You have to wait for the notification that the connection has completed (e.g., OnConnect). The assumption is always that every operation you try will return this code.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #10 : 12-04-2010 11:42 » 

RXL, Ром, дома прикрепю апишный вариант класса. Щас уже собираюсь скоро домой - там многое выяснится ))

resource, эта ошибка означает всего лишь неправильную последовательность вызовов или то, что в момент передачи данных в буфер кто-то полез ещё читать
Записан

resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #11 : 12-04-2010 11:47 » 

Ну я как-то немного подругому подумал (из вышенаписанного).

Лёш, ну "всего лишь" это довольно просто сказано, если учесть что это как раз та ошибка, которую тут и обсуждаем.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #12 : 12-04-2010 11:49 » 

приду домой, скомпилирую и всё выяснится Улыбаюсь
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #13 : 12-04-2010 13:37 » 

дома всё идеально и с первого раза. И в релизе и в дебаге  Внимание! Говорит и показывает...

вот вариант класса с АПИшным сокетом

Стало быть, переустанавливать ? Или, может, релизную DLL какую-нибудь из дома на работу притащить, но вот какую ?

* CFarPult.rar (1.61 Кб - загружено 842 раз.)
Записан

resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #14 : 12-04-2010 13:43 » 

А студия той же версии что и на работе?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #15 : 12-04-2010 13:52 » 

да, из одного образа ставил
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #16 : 13-04-2010 04:54 » 

блин, ну не знаю, заработало после такого бубноводства:

1) восстановил студию из деинсталятора (пункт "починить") Заработало во втором, тестовом проекте. В нужном не заработало
2) пере загрузился - всё также
3) крутин настройки оптимизации так и сяк - ноль эмоций
4) запустил на машине экзешник, собранный дома (там же всё работает) - экзешник пахает как надо.
5) хм, после этого (- ли ,  ааа? ) стал релиз работать в студии
6) всё ещё работает, даже после ребута

вот так  и живём )))
Записан

baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #17 : 13-04-2010 08:27 » 

Алексей1153++, принеси в жертву черного петуха перед монитором ровно в полночь... Должно помочь..
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #18 : 13-04-2010 08:29 » 

baldr, последствия будут ужасны ))

1) приедут дядьки с автоматами
2) а после травмопункта увезут прямиком в дурку

Отлично
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines