Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Пт апр 19, 2024 02:49

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 33 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Какие подходы к отладке кода.
СообщениеДобавлено: Чт янв 11, 2007 17:26 
Не в сети

Зарегистрирован: Вс окт 15, 2006 13:05
Сообщения: 149
Откуда: Украина, Киев
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Коллеги, поделитесь, плиз, кто какие подходы использует при отладке. Обидно, но на ошибку в конструкции цикла (см пред дискуссию) ушел целый раб день :(

Вычислить помогло, пробный запуск того же самого кода в предыдущей версии интерпретатора.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Какие подходы к отладке кода.
СообщениеДобавлено: Чт янв 11, 2007 17:43 
AlexF писал(а):
Коллеги, поделитесь, плиз, кто какие подходы использует при отладке. Обидно, но на ошибку в конструкции цикла (см пред дискуссию) ушел целый раб день :(

Вычислить помогло, пробный запуск того же самого кода в предыдущей версии интерпретатора.


Из личного опыта, самый результативный "ткнуть себя носом" в предполагаемое
нерабочее место с помощью примитивной промежуточной печати,
там где наиболее вероятна ошибка, но ты ее пропускаещь:)
Этот прием обычно быстро приводит в "чувства".

P.S. Есть, конечно, более сложные способы, но они плохо формализуются.
Интуицию нужно развивать!:)


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт янв 11, 2007 18:16 
Не в сети

Зарегистрирован: Вс окт 15, 2006 13:05
Сообщения: 149
Откуда: Украина, Киев
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Цитата:
Из личного опыта, самый результативный "ткнуть себя носом" в предполагаемое нерабочее место с помощью примитивной промежуточной печати

увы :-) уходит много времени. К тому же организация промежуточной печтати достаточно трудоемкая задача. Приходится делать много итераций. Наверняка уже есть отработнные решения.

Нашел, три библиотеки, но как их использовать реально?
- lib\ext\debug.f
- lib\ext\throw.f
- lib\ext\tracer.f


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт янв 11, 2007 18:17 
Не в сети

Зарегистрирован: Вс окт 15, 2006 13:05
Сообщения: 149
Откуда: Украина, Киев
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Насчет интуиции, не согласен, так как уже на этапе кодирования не допустил бы :)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт янв 11, 2007 18:56 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
AlexF писал(а):
увы уходит много времени. К тому же организация промежуточной печтати достаточно трудоемкая задача. Приходится делать много итераций. Наверняка уже есть отработнные решения.

Ошибки такого плана как ваша надо отлавливать на этапе редактирования. Для этого подойдут редакторы
с зависимой подсветкой слов, зависимые подсветки задаются в Color-File редактора. Если слово не может стоять в данном месте текста, то оно подсвечивается вместо обычного цвета ярко красным. Что-то такое можно сделать в старом редакторе Win32Forth - но надо разбираться.

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт янв 11, 2007 19:11 
Не в сети

Зарегистрирован: Вс окт 15, 2006 13:05
Сообщения: 149
Откуда: Украина, Киев
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
chess писал(а):
Ошибки такого плана как ваша надо отлавливать на этапе редактирования.
согласен. Сказалось не досточное знание матчасти :(
chess писал(а):
Для этого подойдут редакторы с зависимой подсветкой слов, зависимые подсветки задаются в Color-File редактора. Если слово не может стоять в данном месте текста, то оно подсвечивается вместо обычного цвета ярко красным. Что-то такое можно сделать в старом редакторе Win32Forth - но надо разбираться.

Пользуюсь редактором с подствекой синтаксиса -- BRED 3.0.3 U + плагин Colorer со схемой подстветки из комплекта SPF. Но это не выход. Много ошибок с неправильным размещением операнддов на стеке. Это уж точно редактором не отловишь. Большой процент ошибок работы с памятью, а тут как?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Какие подходы к отладке кода.
СообщениеДобавлено: Чт янв 11, 2007 19:13 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
AlexF писал(а):
Коллеги, поделитесь, плиз, кто какие подходы использует при отладке.


Я создал отладчик http://fpauk.narod.ru/dbgwc11.rar


Систему следует пересобрать CTT.BAT .
Демонстрация запускается DBG.BAT.
В запущенном редакторе, установив курсор на
интересующее форт-слово, нажми F11 затем F12 .

Смотри так-же горячие клавиши в подменю редактора Debug


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт янв 12, 2007 19:24 
Не в сети

Зарегистрирован: Чт май 04, 2006 18:18
Сообщения: 456
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
AlexF писал(а):
- lib\ext\debug.f
- lib\ext\throw.f
- lib\ext\tracer.f


имеются ввиду видимо
- lib/ext/debug/tracer.f
- lib/ext/debug/accert.f
- lib/ext/debug/throw.f
;)

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

Вторая - условная компиляция. Удобно для ручной вставки отладочных действий.
Отличие
Код:
?DEBUG IF PrintDebugInfo THEN

от
Код:
ACCERT3( ." qua qua" )

в том что в последнем случае решение о использовании отладочного кода принимается на этапе компиляции, а не выполнения.

См. также http://spf.sourceforge.net/docs/devel.ru.html (Средства отладки).

~day/lib/memreport.f - определение утечек памяти.

_________________
http://forth.org.ru/~ygrek


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт янв 12, 2007 21:40 
Не в сети

Зарегистрирован: Вс окт 15, 2006 13:05
Сообщения: 149
Откуда: Украина, Киев
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
yGREK писал(а):
AlexF писал(а):
имеются ввиду видимо
- lib/ext/debug/tracer.f
- lib/ext/debug/accert.f
- lib/ext/debug/throw.f
;)
да, конечно.
yGREK писал(а):
См. также http://spf.sourceforge.net/docs/devel.ru.html (Средства отладки).
Увы. Этот индекс, безусловно, большой шаг вперед. и Вам, как составителю, оного большой респект! Постоянно пользуюсь, доволен. Свое предназнчение он выполняет. Но мне (как и любому непостоянно использующему СПФ) нужно понимать особенность той или иной библиотеки, ее применимость: где, когда и при каких условиях.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт янв 12, 2007 22:41 
Не в сети

Зарегистрирован: Чт май 04, 2006 18:18
Сообщения: 456
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
AlexF писал(а):
Увы. Этот индекс, безусловно, большой шаг вперед. и Вам, как составителю, оного большой респект! Постоянно пользуюсь, доволен. Свое предназнчение он выполняет.

Наполнял его далеко не только я. И нужно ещё дополнять.

_________________
http://forth.org.ru/~ygrek


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб янв 13, 2007 22:44 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
В форте пока как-то прекратил кодировать, последняя отладка была для Пролог-программы
Если алгоритм простой, пользуюсь исключительно стандартными средствами, в продвинутых С-средах или том же Prolog'e их хватает.
Если алгоритм сложен, тут не обойтись без собственного отладочного кода, который пишется исходя их смысла алгоритма, таковой код должен соответствовать задачам отладки. В ещё более сложных случаях пишутся отдельные отладочные скрипты и даже отладочные модули (отладочно-исследовательские, если так можно назвать), но как я понял, тут речь не об этом.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс янв 14, 2007 14:11 
раставляю в ключивых на взгляд местах слово mt ( d -- )
снимает со стека номер и выдает номер служит меткой установки
<количество значений на стекае> <значения на стеке> <pres any key>
ну и ниспиша просматривая работу слова сразу виджно где в стеке пошла лажа или на каком этапе чтото просто вылетело папытавшись прочесть не прочитываемое или записать не записываемое


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс янв 14, 2007 16:59 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
mrack_ писал(а):
раставляю в ключивых на взгляд местах слово mt ( d -- )
снимает со стека номер и выдает номер служит меткой установки
<количество значений на стекае> <значения на стеке> <pres any key>
ну и ниспиша просматривая работу слова сразу виджно где в стеке пошла лажа или на каком этапе чтото просто вылетело папытавшись прочесть не прочитываемое или записать не записываемое

НЕ запутывает такой простой код?
ЕСЛИ меток много?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн янв 15, 2007 03:49 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
AlexF писал(а):
Коллеги, поделитесь, плиз, кто какие подходы использует при отладке. Обидно, но на ошибку в конструкции цикла (см пред дискуссию) ушел целый раб день :(


подходов несколько:

1) разбиваем слова на меньшие, но полезные слова же
2) не пользуем более 2-4 параметров на стеке данных внутри одного определения
3) циклы выносим в отдельные слова
4) каждое слово отдельно тестируем с разными параметрами
5) всегда пишем коментарии к словам и стековые диаграммы - иногда ошибки видны уже на них 8)

все это конечно занимает некоторое время, но потом, не приходится долго отлаживать код.

часто помогает создание тестовых слов и механизмов - помогает при переносе либ на, например, новую версию СПФа. Для этого я лично набросал либу http://spf.cvs.sourceforge.net/spf/deve ... b/testing/


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн янв 15, 2007 13:36 
Не в сети

Зарегистрирован: Вс окт 15, 2006 13:05
Сообщения: 149
Откуда: Украина, Киев
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
mOleg писал(а):
1) разбиваем слова на меньшие, но полезные слова же
2) не пользуем более 2-4 параметров на стеке данных внутри одного определения
3) циклы выносим в отдельные слова
4) каждое слово отдельно тестируем с разными параметрами
5) всегда пишем коментарии к словам и стековые диаграммы - иногда ошибки видны уже на них

1) Большое кол-во слов также вносит дополнительную сложность. Особенно если слово служебное, используемое только один раз. Увеличивается сложность восприятия. Но в то же время, согласен, смысл в том есть... Прбовал разбивать на алгоритм на совссем уж элементарное... Скажем, это больше похоже на рефакторинг кода.

2) не всегда получается. Как пример, оперироване строками: заменит в одной строке фагмент А на фрагмент Б. Учитывая, что строка кодируется двумя параметрами ( addr u ) уже получили 6-ть параметров. А если нужно добавит ограничение на диапазон обрабатываемой подстроки?

3) М... Это как? Можно пример. Боюсь, что это положения я трактую несколько иначе...

4) Да, уже делаю так. См пример ниже. Но требует больше времени, чем само кодирование раза в два.

5) Полностью согласен.

Код:
\ служебные слова, для организации тест-кейсов
USER Test_No USER Test_Grp USER Test_Bad USER Test_Ok
: Test.No  Test_No  ! ;
: Test.Ok   Test_Ok 1+! ;
: Test.Bad  Test_No @ . ." Test.No ..... Bad!" CR  Test_Bad 1+! ;
: MustTrue   IF Test.Ok ELSE Test.Bad THEN ;
: MustFalse  IF Test.Bad ELSE Test.Ok THEN ;
: MustArg;  = IF Test.Ok ELSE Test.Bad THEN ;
: Test.Summary 
  Test_Bad @ IF
    ."         Bad tests - " Test_Bad @ . CR
    ."     Sucsses tests - " Test_Ok @ . CR
    ."   All tests - " Test_Bad @ Test_Ok  @ + . CR
  ELSE
    ."   All " Test_Ok @ . ." completed SUCESSES." CR
  THEN
;

\ ---------- Тестирование слов для работы с элементами мн-ва -------------
0 T+3 AddES   8 T+3 AddES    25 T+3 AddES
1 Test.No
  0 T+3 ExistES? MustTrue

2 Test.No
  1 T+3 ExistES? MustFalse

3 Test.No
  7 T+3 ExistES? MustFalse

4 Test.No
  8 T+3 ExistES? MustTrue

Test.Summary


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 33 ]  На страницу 1, 2, 3  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB