• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Отличие компиляции Debug и Release

  • Автор темы ivs4
  • Дата начала
Статус
Закрыто для дальнейших ответов.
I

ivs4

Здравствуйте. Возник такой вопрос. Делаю проект. в котором работаю с Windows Socket. Для обработки подключений к серверу использую оконные сообщения при помощи функции

Код:
	ires=WSAAsyncSelect(sock,this->m_hWnd,WM_SOCK,FD_ACCEPT);

где WM_SOCK - мое сообщение для прослушивающего сокета

Код:
UINT WM_SOCK=RegisterWindowMessage("MYSOCKETMESSAGE");

В этом сообщении я вызываю функцию WSAAcept для создания дочернего сокета

Код:
s2=WSAAccept(s,(SOCKADDR*)(&addr),&size,ConditionFunc,DWORD(&m_explorer));

Теперь самое интересное. При компиляции Win32 Debug все хорошо, а при Win32 Release - первый раз подключение проходит нормально, а на второй вываливается ошибка доступа к памяти. Пока не установил причину сего. Подскажите, пожалуйста, в каком напрвлении искать. И какие различия бывают при компиляции Debug и Release.
 
G

grigsoft

Самая частая проблема - неинициализированные переменные и выделенная память. Поставь WarningLevel=4, может на что укажет. Ну и ручками проверь, что все переменные должны сразу устанавливаться, запись
Код:
int nLen, size;
неправильная. Всегда должно быть
Код:
int nLen=0, size=0;
 
I

ivs4

Все инициализирую, WarningLevel 4 ничего не дал. Даже не знаю. Сейчас ищу в направлении сообщений окна и использования прослушивающего сокета.
 
G

grigsoft

Тогда я бы плясал от ошибки. Какой код падает, к какой памяти, кто эту память выделяет и т.д. Ну и синхронизацию потоков проверить.
 

Kmet

Well-known member
25.05.2006
904
8
BIT
0
Как вариант такое поведение возможно при неверном использовании ASSERT, когда в нем происходит не только проверка, например ASSERT(*p=new char[10]). Надуманный конечно пример <_<
 
I

ivs4

Появилась зацепка. Ошибка уходит если в Project Settings в C/C++ -> Code generation -> Use run-time library вместо Multithreaded DLL выбрать Debug Multithreaded DLL. Хотелось бы узнать, чем отличаются проекты при данных установках.
 

Kmet

Well-known member
25.05.2006
904
8
BIT
0
MSDN:Fixing Release Build Problems
MSDN:Common Problems When Creating a Release Build
народный опыт по данной проблеме ))
 
I

ivs4

Сократил все телодвижения с памятью до минимума. Однозначно выходит, что проблема при повторном вызове WSAAccept. Очень странно, Америка здесь не открывется. Эта функция вызывается в обработчике моего сообщения на состояние слушающего сокета FD_ACCEPT. Есть похожие примеры. Может ли быть проблема в области вызова WSAAsyncSelect

Код:
ires=WSAAsyncSelect(sock,this->m_hWnd,WM_SOCK,FD_ACCEPT);

или привязки функции к сообщению

Код:
UINT WM_SOCK=RegisterWindowMessage("MYSOCKETMESSAGE");
...
ON_REGISTERED_MESSAGE( WM_SOCK, OnMyMessage )
...
void CWSServerDlg::OnMyMessage() 
{
...
const MSG *swl=GetCurrentMessage();
ev=LOWORD(swl->lParam);//идентификатор события на сокете
er=HIWORD(swl->lParam);//код ошибки
s=SOCKET(swl->wParam);//дескриптор прослушующего сокета

s2=WSAAccept(s,(SOCKADDR*)(&addr),&size,NULL,0);
...
}

И еще есть наблюдение. Если свернуть окно до начала подключения клиентов и так оставить, то вроде работает. Если же развернуть, щелкнуть мышью в окне, то вылезает ошибка памяти.
Большая просьба поделиться соображеними.
 
C

Cisco

Есть ли функция, позволяющая изменять текст в записи listbox, т.е. противоложность GetText() - что-то вроде "PutText()". InsertString - не хочется использовать, т.к. просто надо изменить текст.
 
A

artiom_kh

И еще есть наблюдение. Если свернуть окно до начала подключения клиентов и так оставить, то вроде работает. Если же развернуть, щелкнуть мышью в окне, то вылезает ошибка памяти.
Большая просьба поделиться соображеними.

Выложи проект, пипл посмотрит
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!