Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

MFC - проблемы с отладкой приложения

42K
09 ноября 2008 года
blackswan
8 / / 09.11.2008
Простой вопрос. Наказали писать код для простенького приложения на VC. У меня VS 2005. Написал код на MFC (визардом сделал CDialog), где по нажатию на кнопку происходит вычисление и выдача результатов в CEdit. При запуске приложения оно работает нормально и по кнопке выдает значения, но не те, что надо. я бы хотел узнать, в чем ошибка вычисления или может отображение результата не работает.
Но я не знаю, как его отладить, как зайти в код, обрабатывающий событие нажатия кнопки. Искал в нескольких книгах и в свойствах VC касательно дебага, но пока ничего. При дебаге окно проги блокируется и нет возможности сделать какие-либо действия, выдается сообщение "There is no source code available for the current location.", т.е. брейкпоинты в коде обработчика нажатия кнопки не видны.
Как решить проблему? Почему окно проги заблокировалось? Можно ли сгенерировать сообщения или вызвать принудительно обработчик события во время дебага?
288
10 ноября 2008 года
nikitozz
1.2K / / 09.03.2007
Цитата: blackswan
Простой вопрос. Наказали писать код для простенького приложения на VC. У меня VS 2005. Написал код на MFC (визардом сделал CDialog), где по нажатию на кнопку происходит вычисление и выдача результатов в CEdit. При запуске приложения оно работает нормально и по кнопке выдает значения, но не те, что надо. я бы хотел узнать, в чем ошибка вычисления или может отображение результата не работает.
Но я не знаю, как его отладить, как зайти в код, обрабатывающий событие нажатия кнопки. Искал в нескольких книгах и в свойствах VC касательно дебага, но пока ничего. При дебаге окно проги блокируется и нет возможности сделать какие-либо действия, выдается сообщение "There is no source code available for the current location.", т.е. брейкпоинты в коде обработчика нажатия кнопки не видны.
Как решить проблему? Почему окно проги заблокировалось? Можно ли сгенерировать сообщения или вызвать принудительно обработчик события во время дебага?



Ставите один breakpoint в обработчике кнопки. Жмете F5, дальше жмете на кнопку и F10, F11

412
10 ноября 2008 года
grgdvo
323 / / 04.07.2007
конечно же не забыть скомпилироваться в режиме Debug и нажимать вышеуказанную кнопку F5 для режима Debug, а не Release
42K
10 ноября 2008 года
blackswan
8 / / 09.11.2008
я так и делаю, и прекрасно отличаю кнопку F5 от других кнопок и знаю, что каждая обозначает, было бы так просто, я б не писал тут. Был бы рад, если б вы ответили на мои вопросы насчет блокировки окна проги в режиме F5, если б я мог нажимать на кнопки в моей проге, то естественно попал бы внутрь кода обработчика. И можно ли как-то сгенерировать сообщение по событию нажатия на кнопку искусственно во время дебага?
288
11 ноября 2008 года
nikitozz
1.2K / / 09.03.2007
Цитата: blackswan
я так и делаю, и прекрасно отличаю кнопку F5 от других кнопок и знаю, что каждая обозначает, было бы так просто, я б не писал тут. Был бы рад, если б вы ответили на мои вопросы насчет блокировки окна проги в режиме F5, если б я мог нажимать на кнопки в моей проге, то естественно попал бы внутрь кода обработчика. И можно ли как-то сгенерировать сообщение по событию нажатия на кнопку искусственно во время дебага?



Ну тогда выкладывайте проект. Пояснение "окно блокируется" как-то не очень информативно. Обычно оно блокируется когда во время дебага среда ждет от вас действий.

14
11 ноября 2008 года
Phodopus
3.3K / / 19.06.2008
Конечно окно блокируется в "режиме F5" - тоесть в режиме пошаговой отладки. Именно поэтому брекпоинт нужно поставить уже внутри обработчика нажатия кнопки, а не где-то еще. Например, на первом операторе вычислений.
39K
14 ноября 2008 года
YouROK
12 / / 27.10.2008
Есть такой хороший отладчик, называеться OllyDbg можешь им проверить где и что меняется.
42K
04 декабря 2008 года
blackswan
8 / / 09.11.2008
спасибо... собственно сейчас уже всё ок и дебаг нормально делаю, не знаю, что изменилось, ничего не делал вроде... теперь другой простой вопрос... есть у меня много Cedit, в которых я пишу числа... из одних я читаю значения используя _wtof и _wtoi , в другие должен записать результат после работы с числами, но не могу найти правильной функции превращения чисел в widechar, только в ASCII... в чем разница между multibytechar и widechar?... widechar - это Unicode ?...
при дебаге выдает каракули при преобразовании... подскажите, как записать результат- число float - в CEdit...

И вот еще вопрос, мне необходимо обработать событие изменения текста в одном CEdit.. я так понимаю, надо добавить макро в карту сообщений диалога и установить связь с обрабатывающим методом, в msdn нашел это :
ON_EN_CHANGE( <id>, <memberFxn> ) - макро в карту
и afx_msg void memberFxn( ) - описание метода в классе диалога
но как я понял <id> - это идентификатор, если я рисую CEdit статически через ресурсы, а я создаю (и пересоздаю) его динамически в коде программы, как мне получить <id> для такого объекта, или может его не существует и надо по-другому делать обработку?
288
05 декабря 2008 года
nikitozz
1.2K / / 09.03.2007
Цитата: blackswan
спасибо... собственно сейчас уже всё ок и дебаг нормально делаю, не знаю, что изменилось, ничего не делал вроде... теперь другой простой вопрос... есть у меня много Cedit, в которых я пишу числа... из одних я читаю значения используя _wtof и _wtoi , в другие должен записать результат после работы с числами, но не могу найти правильной функции превращения чисел в widechar, только в ASCII... в чем разница между multibytechar и widechar?... widechar - это Unicode ?...
при дебаге выдает каракули при преобразовании... подскажите, как записать результат- число float - в CEdit...



Используйте sprintf и swprintf, или CString::Format

Цитата: blackswan

И вот еще вопрос, мне необходимо обработать событие изменения текста в одном CEdit.. я так понимаю, надо добавить макро в карту сообщений диалога и установить связь с обрабатывающим методом, в msdn нашел это :
ON_EN_CHANGE( <id>, <memberFxn> ) - макро в карту
и afx_msg void memberFxn( ) - описание метода в классе диалога
но как я понял <id> - это идентификатор, если я рисую CEdit статически через ресурсы, а я создаю (и пересоздаю) его динамически в коде программы, как мне получить <id> для такого объекта, или может его не существует и надо по-другому делать обработку?



При создании динамически ID вы указваете в последнем параметре метода Create.

42K
11 декабря 2008 года
blackswan
8 / / 09.11.2008
спасибо, работает... а в VC есть какой-нибудь простой служебный messagebox?
288
11 декабря 2008 года
nikitozz
1.2K / / 09.03.2007
Цитата: blackswan
спасибо, работает... а в VC есть какой-нибудь простой служебный messagebox?



Ну обычный ::MessageBox. И еще, если не изменяет память, CWnd::MessageBox

14
11 декабря 2008 года
Phodopus
3.3K / / 19.06.2008
Цитата: blackswan
спасибо, работает... а в VC есть какой-нибудь простой служебный messagebox?


Ну если уж быть точным, не в VC (ибо это среда разработки), а в MFC. Я считаю таким "простым" месажбоксом AfxMessageBox()

240
11 декабря 2008 года
aks
2.5K / / 14.07.2006
Ну API функция MessageBox к MFC никоим боком не относиться. )
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог