Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
| | |
+1 к Shaman'у и Tamas'у. Поставь сравнение интересующего значения перед вызовом Win32Check, и будет тебе щастье. 29.10.06 01:10 Число просмотров: 1094
Автор: Fighter <Vladimir> Статус: Elderman Отредактировано 29.10.06 01:20 Количество правок: 1
|
|
<programming>
|
Появление исключения до вызова процедуры генерации исключения — процессоры стали слишком быстрые? ;-) 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? Пошаговая отладка всегда была F7 30.10.06 19:41
Автор: Neznaika <Alex> Статус: Member
|
|
| |
А построчная — F8 :) 31.10.06 12:36
Автор: HandleX <Александр М.> Статус: The Elderman
|
|
|
Посмотри debug view > CPU 30.10.06 12:00
Автор: Cyril <sc> Статус: Member Отредактировано 30.10.06 12:02 Количество правок: 1
|
> Отлаживаю код на 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 куда надо? -)))
|
|
Может компилятор балует? Попробуй выключить оптимизацию, переписать соседние строчки, вставить какую-нибудь ненужную операцию. 28.10.06 10:55
Автор: ZloyShaman <ZloyShaman> Статус: Elderman
|
|
| |
мне кажится это глюк самого отладчика... 28.10.06 22:36
Автор: Tamas Статус: Member
|
|
| | |
+1 к Shaman'у и Tamas'у. Поставь сравнение интересующего значения перед вызовом Win32Check, и будет тебе щастье. 29.10.06 01:10
Автор: Fighter <Vladimir> Статус: Elderman Отредактировано 29.10.06 01:20 Количество правок: 1
|
|
| | | |
+1 к Shaman'у, Tamas'у и Fighter-у 30.10.06 13:43
Автор: amirul <Serge> Статус: The Elderman
|
Исторически сложилось так, что у борланда не получаются нормальные компиляторы. Как вариант я бы посоветовал тебе включить опцию листинга (генерация асма + соответствующие строки исходника) и полезть туда в поисках правды
|
|
|