Прога залетает на ошибку при выполнении через несколько часов работы - программа выполнила недопустимую операцию и будет завершена, Offset 000012F7. Открыл в OllyDbg, запустил, заход в WinMain -> .WHILE TRUE ; Enter message loop invoke GetMessage, ADDR msg,NULL,0,0 .BREAK .IF (!eax) invoke TranslateMessage, ADDR msg invoke DispatchMessage, ADDR msg .ENDW и грузит процессор на всю катушку. Судя по размеру проги в OllyDbg Offset 000012F7 лежит за пределами кода. Как отловить эту ошибку? Прогу выложить не могу.
Sun07 Тот код, что ты выложил здесь явно непричем )) Для начала поставь just-in-time debugger, чтобы при исключении вызывался отладчик, а не месс-бокс.(для Olly эта функа включается в опциях, можно сделать, чтобы запускался виндовый ватсон, но я не помню как это активировать, ща поищу). При исключении запустится отлачик и можно будет посмотреть более конкретно где и при каких условиях оно нарисовалось. Ловит отладчик не все исключения, поэтому, может и не сработать. Тогда, перепиши код с проверкой результата работы всех функций и выводом отладочных сообщений. Заюзай SEH там, где ты используешь буферы, для контроля их переполнения, вывода отладочного сообщения или их динамического увеличения. Хз что еще придумать...
1. Допустим, Олли меня выкинет на место ошибки. Как я смогу выполнить обратную пошаговую отладку, чтобы увидеть, откуда я попал на мусор? 2. Почему Олли грузит проц на главной процедуре обработки сообщений окну?
Aspire не содержащем команды типа sleep , а GetMessage это как раз sleep до прихода сообщения. Sun07 1. см. Trace into Ctrl+F11, Trace over Ctrl+F12 2. Посмотри что за сообщение "будит" прогу - обычно это перепосылается не корректно обработанный WM_PAINT, хотя бывают и другие приколы, но так чтобы под Олей 100% загрузка, а без неё нет я не встречал.
не понял фразу , это нормально или нет - 99% загрузка проца на цикле сообщений под Олей, т.е. цикл обработки сообщений, приведённый выше, у меня правильный?
Sun07 А действительно есть такая бага в Оле v1.1, в версии 2 нету. Цикл то правильный, но загрузка процессора в этом цикле может быть из-за неправильной обработки сообщений (только тогда она должна быть независимо от отладчика).