On-line: Pasha, гостей 1. Всего: 2 [подробнее..]
АвторСообщение





Пост N: 57
Зарегистрирован: 08.04.06
ссылка на сообщение  Отправлено: 25.01.07 00:20. Заголовок: Непонятная ошибка


Попробовал поюзать xHarbour релиз 0.99.70
Компиляция проходит успешно, линковка проходит успешно, запускаю образовавшийся выполнимый файл и получаю:

Unrecoverable error 9003: Too many recursive error handler calls

Called from DEFERROR(151)
Called from __EVAL(21)
Called from DEFERROR(151)
Called from __EVAL(21)
Called from DEFERROR(151)
Called from __EVAL(21)
Called from DEFERROR(151)
Called from __EVAL(21)
Called from DEFERROR(151)
Called from __EVAL(21)
Called from DEFERROR(151)
Called from __EVAL(21)
Called from DEFERROR(151)
Called from __EVAL(21)
Called from DEFERROR(151)
Called from __EVAL(21)
Called from READCFG(34)

К чему относятся номера строк в скобках - к исходному .PRG-файлу или к .C-файлу?
И как вообще это всё понимать, если в .PRG-файле на строке 34 банальное присвоение:

oldbasa = basa

а в .C-файле на строке 34 следующее:

HB_FUNC_EXTERN( MONOPOLE );


Monopole() у меня небольшая функция:

Function Monopole()
if sw_network
MYMSG("Выполнение данной операции", "в сетевом режиме невозможно.")
endif
return !sw_network

Что Харбору не нравится, понять не могу...

Спасибо: 0 
Профиль
Ответов - 15 [только новые]


Администратор




Пост N: 477
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 25.01.07 10:01. Заголовок: Re:


Ошибка связана с переопределением обрабочика ошибок
Т.е возникает ошибка, управление передается в ErrorBlock, в нем тоже
ошибка, и так далее

Спасибо: 0 
Профиль





Пост N: 58
Зарегистрирован: 08.04.06
ссылка на сообщение  Отправлено: 26.01.07 02:34. Заголовок: Re: Pasha


Да это-то в общем понятно, непонятно - какие именно ошибки? Что именно Harbourу не нравится? Что вообще сделать-то, чтобы эти ошибки как-то выявить? И вопрос, оставшийся без ответа - к чему всё-таки относятся числа в скобках - к PRG-файлу или к С-файлу?

Спасибо: 0 
Профиль
постоянный участник


Пост N: 97
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 26.01.07 09:59. Заголовок: Re:


Лукашевский пишет:

 цитата:
И вопрос, оставшийся без ответа - к чему всё-таки относятся числа в скобках - к PRG-файлу или к С-файлу?



К PRG-файлу

Лукашевский пишет:

 цитата:
И как вообще это всё понимать, если в .PRG-файле на строке 34 банальное присвоение:

oldbasa = basa



банальное присвоение:
oldbasa := basa




Спасибо: 0 
Профиль





Пост N: 59
Зарегистрирован: 08.04.06
ссылка на сообщение  Отправлено: 28.01.07 10:31. Заголовок: Re: Пётр


Присвоение через "=" у меня по всей программе и играет свою определённую роль - чтобы можно было легко взглядом выделить присвоения в выражении через ":=" в череде "чистых" присвоений через "=".
Пётр, так ты думаешь, дело в присвоении? Однако в xHarbour версии 0.99.60 никаких проблем с этим не было!
Опять-таки, в предыдущей 33-й строке идёт присвоение:
oldsel = SELECT()
и никаких ошибок на эту строку не выдаётся! К тому же в вызывающем модуле (READCFG.PRG - не главный модуль программы) присвоений через "=" к этому моменту уже сделано штук 50 как минимум!
И ещё - вроде бы считается, что всё, что работает в Clipper, должно по максимуму работать и в xHarbour, или нет?

Спасибо: 0 
Профиль
постоянный участник


Пост N: 102
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 28.01.07 13:33. Заголовок: Re:


Лукашевский пишет:

 цитата:
Пётр, так ты думаешь, дело в присвоении?



Вот такой вот код

function Main()
Local cStr1 := "aaa"
Local cStr2 := "bbb"

? cStr1 := cStr2
? cStr1 = cStr2

return nil

В результате получим

bbb
.T.



А теперь попробуем так

function Main()
Local cStr1 := 44
Local cStr2 := "bbb"

? cStr1 = cStr2
? cStr1 := cStr2


return nil


Результат : Error BASE/1071


Все правильно, в выражении = уже не присваивание, а сравнение на "равно".
А := - встроенное присваивание, или присваивание в линию, появилось в Clipper 5.0 и всегда означает присваивание,
поэтому именно := можно считать "банальным".

Когда-то, споткнувшись на подобном, я напрочь отказался от использования оператора = в качестве оператора присваивания.
Но это дело вкуса.


А ошибку надо конечно же искать. Не видя код, я ничего не берусь утверждать.
Но ошибка однозначно находится в обработчике ошибок.

И, я думаю, причина в том, что не обьявлена переменная basa

тогда oldbasa = basa

Error BASE/1003 variable does not exist
и т.д.



Спасибо: 0 
Профиль
постоянный участник


Пост N: 103
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 28.01.07 17:09. Заголовок: Re:


Да, наверное все так и есть. Не поленился и проверил

Тестовая программка

function Main()

cStr3 = cStr2

return nil

вылетает с Error BASE/1003 variable does not exist : cStr2

Лукашевский пишет:

 цитата:
И ещё - вроде бы считается, что всё, что работает в Clipper, должно по максимуму работать и в xHarbour, или нет?



Проверено xHarbour 0.99.61 + BCC 5.5, Clipper 5.3. + Blinker 6.0. Так, что никаких претензий к xHarbour быть не должно.

Если же обьявить cStr2

Local cStr2
cStr3 = cStr2

или просто написать

cStr2 = 1
cStr3 = cStr2

никакой ошибки не случится ( и в xHarbour, и в Clipper 5.3).



Спасибо: 0 
Профиль





Пост N: 60
Зарегистрирован: 08.04.06
ссылка на сообщение  Отправлено: 29.01.07 07:56. Заголовок: Re: Пётр


Переменная basa объявлена в головном модуле как PUBLIC, цепляется в READCFG.PRG через файл mypublic.ch (иначе бы ошибка-предупреждение выдавалась ещё на этапе компиляции), а компиляция и сборка проходят без вопросов, так что всё равно непонятно, что xHarbourу в результате не нравится-то...

Спасибо: 0 
Профиль





Пост N: 61
Зарегистрирован: 08.04.06
ссылка на сообщение  Отправлено: 30.01.07 00:39. Заголовок: Re: Пётр


Спасибо Петру за разбор ситуации.
Действительно, когда я убрал из линковки свой ERRORSYS стала возникать ошибка 1003 Variable does not exist: basa
И я кажется понял, что происходит: выполение программы начинается не с процедуры (и PRG-модуля) MAIN, а с процедуры (и PRG-модуля) READCFG!
Почему так происходит? MAIN.OBJ однозначно прилинкован, стоит в списке раньше чем READCFG.OBJ... Непонятно.

Спасибо: 0 
Профиль
постоянный участник


Пост N: 105
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 30.01.07 15:30. Заголовок: Re:


А процедура READCFG не обьявлена как INIT?

Спасибо: 0 
Профиль





Пост N: 62
Зарегистрирован: 08.04.06
ссылка на сообщение  Отправлено: 02.02.07 07:18. Заголовок: Re: Пётр


Нет.
Как INIT объявлена единственно
INIT Procedure RddInit
но она находится в отдельном PRG-модуле.


Спасибо: 0 
Профиль





Пост N: 63
Зарегистрирован: 08.04.06
ссылка на сообщение  Отправлено: 02.02.07 17:43. Заголовок: Re: Пётр


Я даже попробовал объявить процедуру MAIN как INIT - никакого эффекта! Программа упорно начинает выполняться с процедуры READCFG!

Спасибо: 0 
Профиль





Пост N: 88
Зарегистрирован: 28.06.05
ссылка на сообщение  Отправлено: 05.02.07 13:43. Заголовок: Re:


а поменяйте содержимое процедур MAIN и READCFG!

Спасибо: 0 
Профиль
постоянный участник


Пост N: 106
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 05.02.07 16:36. Заголовок: Re:


Это все гадания на кофейной гуще :)

Петр пишет:

 цитата:
А ошибку надо конечно же искать. Не видя код, я ничего не берусь утверждать.



Спасибо: 0 
Профиль





Пост N: 64
Зарегистрирован: 08.04.06
ссылка на сообщение  Отправлено: 06.02.07 07:50. Заголовок: Re: SergeJa


SergeJa пишет:

 цитата:
а поменяйте содержимое процедур MAIN и READCFG!


Интересная идея!
Сделал пока что попроще: поменял местами НАЗВАНИЯ процедур в модулях MAIN и READCFG соответственно.
Получил теперь при линковке:
Error: Unresolved external '_HB_FUN_READCFG' referenced from D:\XHARBOUR.......
Получается что, модуль MAIN в линковку вообще не включается?
И действительно, что оказалось: в BAT-файле перед MAIN.OBJ стояло ECHP, а не ECHO... Вот ведь ерунда какая! Но пока найдёшь эту ерунду, несколько недель потеряешь...

Спасибо: 0 
Профиль
постоянный участник




Пост N: 243
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.02.07 08:18. Заголовок: Re:


Лукашевский пишет:

 цитата:
Но пока найдёшь эту ерунду, несколько недель потеряешь...



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

Спасибо: 0 
Профиль
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 108
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет