Появление исключения до вызова процедуры генерации исключения — процессоры стали слишком быстрые? ;-)28.10.06 09:07 Автор: HandleX <Александр М.> Статус: The Elderman
Отлаживаю код на Delphi 7. Поставил точку останова до вызова функции API ReadFile, следующая процедура -- Win32Check, которая вызывает исключение, если булевое значение в её единственном входящем параметре неистинно, к примеру
Win32Check(hndl <> INVALID_HANDLE_VALUE).
Ну и ладно. Остановился в точке останова. Нажал F8 (построчная отладка), чтобы воткнуться в Win32Check, и посмотреть на параметр, который пойдёт в эту функцию... Фигассе, исключение вырабатывается ещё до захода в Win32Check!
Как такое может быть? Я в шоке. Причём исключение генерит именно Win32Check, с его глупым сообщением "Call to OS function failed".
А ты случайно не путаешь клавиши F7 и F8? Пошаговая отладка всегда была F730.10.06 19:41 Автор: Neznaika <Alex> Статус: Member
> Отлаживаю код на Delphi 7. Поставил точку останова до > вызова функции API ReadFile, следующая процедура -- > Win32Check, которая вызывает исключение, если булевое > значение в её единственном входящем параметре неистинно, к > примеру > Win32Check(hndl <> INVALID_HANDLE_VALUE). > Ну и ладно. Остановился в точке останова. Попробуй нажать ctrl+alt+c и в появившемся окне понажимать F8
>Нажал F8
> (построчная отладка), чтобы воткнуться в Win32Check, и > посмотреть на параметр, который пойдёт в эту функцию... > Фигассе, исключение вырабатывается ещё до захода в > Win32Check! может быть компилятор считает что выражение
hndl <> INVALID_HANDLE_VALUE всегда ложь и поэтому сразу генерит исключение
INVALID_HANDLE_VALUE = DWORD(-1) = LongWord(-1)
результат ReadFile это bool насколько я понимаю всегда >=0
(-1) < ReadFile поэтому компилятор решил оптимизировать этот участок
кода и сразу генерить исключение ;-) умный какой
Не факт что все именно так, это лишь одна из версий ;-)
Win32Check(hndl <> INVALID_HANDLE_VALUE).
> > Как такое может быть? Я в шоке. Причём исключение генерит > именно Win32Check, с его глупым сообщением "Call to OS > function failed".
Не, там был другой контекст... Уже пофиг что там было, всё равно отладил.30.10.06 15:26 Автор: HandleX <Александр М.> Статус: The Elderman Отредактировано 30.10.06 15:27 Количество правок: 1
Просто это я затеял к тому, что раньше трава была зеленее, деффки ну вы поняли какие были деффки -))
Вот я думаю -- последний раз плотно кодил на Delphi когда процы были 800 МГц PIII -- самое оно. Сейчас сижу на селероне 3,2 ГГЦ. Раньше таких глюков в отладчике вроде не было. Может отладчик «не догадывается», что будут такие скорости, и где-то косячит, не успевая воткнуть INT3 куда надо? -)))
+1 к Shaman'у и Tamas'у. Поставь сравнение интересующего значения перед вызовом Win32Check, и будет тебе щастье.29.10.06 01:10 Автор: Fighter <Vladimir> Статус: Elderman Отредактировано 29.10.06 01:20 Количество правок: 1
Исторически сложилось так, что у борланда не получаются нормальные компиляторы. Как вариант я бы посоветовал тебе включить опцию листинга (генерация асма + соответствующие строки исходника) и полезть туда в поисках правды