Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« : 12-04-2010 08:42 » |
|
очень странная проблема:
использую CAsyncSocket для приёма UDP данных. Всё работает в дебаге. Но в релизе функция ReceiveFrom всегда возвращает -1 с ошибкой 10035. Справедливости ради переделал на чистом АПИ (хотя, результат заранее был известен, так как код функций класса CAsyncSocket делает всё то же самое) - тоже в дебаге работает, в релизе нет.
Проявляется только на работе - дома всё отлично работает. Грешу на студию (VS2008), но переустанавливать её очень долго, может что-то надо конкретно исправить, кто сталкивался ?
|
|
|
Записан
|
|
|
|
baldr
|
|
« Ответ #1 : 12-04-2010 08:48 » |
|
Возьми файл проекта и сравни значения настроек для Release и Debug - посмотри в чем разница.. Может, в компилятор передаеся какая-то доп. переменная или не с той библиотекой собирается..
|
|
|
Записан
|
Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #2 : 12-04-2010 09:01 » |
|
вот так ничего подозрительного не увидел, на что конкретно внимание обратить ?
|
|
|
Записан
|
|
|
|
resource
Молодой специалист
Offline
Пол:
|
|
« Ответ #3 : 12-04-2010 09:26 » |
|
Я вот IDE потому и не люблю. У меня бывали всякие глюки на студии, от 6.0 и до 2005 включительно. Следующие студии уже так, юзал немного, но не всерьез.
По теме. Был у меня буквально пару дней назад интересный такой пример. В одной софтине я активно пользовал Native API, и конкретно функцию NtAllocateVirtualMemory. Так вот ей передается (по мимо всего прочего) начальный адрес, с которого она должна разместить выделенные страницы памяти. Если адрес нулевой, то она сама выберет начальный адрес. Так вот я, уже в одной из своих функций, забыл изначально обнулить переменную с этим адресом. Пришлось поискать в чем дело, потому что эффект был, такой же, что и описан собственно в топике. Получалась такая ситуация, что в дебажной сборке эта переменная обнулялась изначально, а вот в релизной нет. Отсюда происходила ошибка, так как даже богу не было известно о содержимом этой переменной в момент вызова функции.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #4 : 12-04-2010 09:35 » |
|
resource, про различное заполнение неинициализированных переменных в дебаге и релизе я знаю (обычно 0xcccccccc и 0x00000000 соотв)
но тут явно не в этом причина - я всё вывел на экрано тупо при помощи MessageBox - всё нормально. Только не читаются данные и всё тут
(замечу, что раньше с UDP в этой же программе работал без проблем. Только вот в отдельном процессе, что тут не могу сделать сейчас)
|
|
« Последнее редактирование: 12-04-2010 09:37 от Алексей1153++ »
|
Записан
|
|
|
|
baldr
|
|
« Ответ #5 : 12-04-2010 09:37 » |
|
Алексей1153++, при сборке проекта в окошке внизу должна выводиться длиинная командная строка вызова компилятора.. Сравни еще её..
|
|
|
Записан
|
Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
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
это ?
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
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
Технический
Администратор
Offline
Пол:
|
|
« Ответ #8 : 12-04-2010 11:34 » |
|
Леш, а на нижнем уровне ты как принимаешь данные? Пример, пожалуйста - с инициализацией переменных, используемых в функции приема.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
resource
Молодой специалист
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.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #10 : 12-04-2010 11:42 » |
|
RXL, Ром, дома прикрепю апишный вариант класса. Щас уже собираюсь скоро домой - там многое выяснится ))
resource, эта ошибка означает всего лишь неправильную последовательность вызовов или то, что в момент передачи данных в буфер кто-то полез ещё читать
|
|
|
Записан
|
|
|
|
resource
Молодой специалист
Offline
Пол:
|
|
« Ответ #11 : 12-04-2010 11:47 » |
|
Ну я как-то немного подругому подумал (из вышенаписанного).
Лёш, ну "всего лишь" это довольно просто сказано, если учесть что это как раз та ошибка, которую тут и обсуждаем.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #12 : 12-04-2010 11:49 » |
|
приду домой, скомпилирую и всё выяснится
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #13 : 12-04-2010 13:37 » |
|
дома всё идеально и с первого раза. И в релизе и в дебаге вот вариант класса с АПИшным сокетом Стало быть, переустанавливать ? Или, может, релизную DLL какую-нибудь из дома на работу притащить, но вот какую ?
|
|
|
Записан
|
|
|
|
resource
Молодой специалист
Offline
Пол:
|
|
« Ответ #14 : 12-04-2010 13:43 » |
|
А студия той же версии что и на работе?
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #15 : 12-04-2010 13:52 » |
|
да, из одного образа ставил
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #16 : 13-04-2010 04:54 » |
|
блин, ну не знаю, заработало после такого бубноводства:
1) восстановил студию из деинсталятора (пункт "починить") Заработало во втором, тестовом проекте. В нужном не заработало 2) пере загрузился - всё также 3) крутин настройки оптимизации так и сяк - ноль эмоций 4) запустил на машине экзешник, собранный дома (там же всё работает) - экзешник пахает как надо. 5) хм, после этого (- ли , ааа? ) стал релиз работать в студии 6) всё ещё работает, даже после ребута
вот так и живём )))
|
|
|
Записан
|
|
|
|
baldr
|
|
« Ответ #17 : 13-04-2010 08:27 » |
|
Алексей1153++, принеси в жертву черного петуха перед монитором ровно в полночь... Должно помочь..
|
|
|
Записан
|
Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #18 : 13-04-2010 08:29 » |
|
baldr, последствия будут ужасны )) 1) приедут дядьки с автоматами 2) а после травмопункта увезут прямиком в дурку
|
|
|
Записан
|
|
|
|
|