Skip navigation.

проФорт

Форт и всё такое

Распечатка стека возвратов

, ,

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

Т.к. у нас Форт - то нет ничего проще. Прямой доступ к стеку возвратов есть, итого :
: RSEE
CR ." R DUMP : "
RP@ 8 CELLS
OVER + SWAP DO CR I DUP . @ . CELL +LOOP ;

REQUIRE { lib/ext/locals.f
: b RSEE ; : a { | n } 123 -> n b ; a



Вывод :
R DUMP :
1240864 5678517
1240868 5678583
1240872 5583352
1240876 4
1240880 123
1240884 5659375
1240888 5659510
1240892 5661240


Не очень информативно, правда? Но ведь можно взять эти адреса и поискать рядом с ними словарную статью из которой взять имя слова телу которого принадлежит этот адрес! Эта функциональность уже присутствует в ядре SPF, вспомните дамп отчёта исключений. Слово которое нас интересует это WordByAddr ( addr -- a u ) и обёртка над ним для предотвращения исключений по Access Violation (т.к. на стеке возвратов могут лежать не только адреса, но и локальные переменные итп) :
: RSEE
CR ." R DUMP : "
CR
RP@ 8 CELLS
OVER + SWAP DO I STACK-ADDR. DROP CELL +LOOP ;

REQUIRE { lib/ext/locals.f
: b RSEE ; : a { | n } 123 -> n b ; a



Получаем :
R DUMP :
1240864 : 5678485 b
1240868 : 5678551 a
1240872 : 5583352 (LocalsExit)
1240876 : 4 <not found>
1240880 : 123 <not found>
1240884 : 5659375 INTERPRET_
1240888 : 5659510 INTERPRET
1240892 : 5661240 TranslateFlow


Это уже может пригодится на практике.

Python Challenge 6-10Конечные автоматы и таблицы решений на SPF

How to use Quote function:

  1. Select some text
  2. Click on the Quote link

Write a comment

Comment
(BBcode and HTML is turned off for anonymous user comments.)

If you can't read the words, press the small reload icon.


Smilies