Tcl скрипты без инструментального отладчика с использованием библиотеки Tcl и / или внутренних компонентов Tcl?

Я хотел бы знать, возможно ли построить отладчик сценариев tcl с использованием Tcl Library API и / или внутренних интерфейсов Tcl (я имею в виду, если они содержат достаточно данных для этого). Я заметил, что существующие отладчики tcl используют инструменты tcl и работают с этим дополнительным слоем. Моя идея заключалась в использовании Tcl_CreateObjTrace отследить каждую оцененную команду и использовать ее как точку для извлечения стека вызовов, локальных пользователей и т. д. Проблема заключается в том, что кажется, что не вся информация доступна из API во время оценки. Например, я хотел бы знать, какая строка в настоящее время оценивается, но Interp имеет такую ​​информацию только для лучших оценок (iPtr->cmdFramePtr->line пуст для тел процедур). Кто-нибудь пробовал такой подход? Есть ли смысл? Может быть, я должен посмотреть на хэшированные записи в Interp? Любые подсказки и мнения будут оценены (лучшее для Tcl 8.5).

1

Решение

Лучшим вариантом для неинтрузивной системы отладки может быть попытка использовать трассировку шага выполнения (требуется каждый команда, вызываемая во время выполнения команды, к которой присоединена трассировка) с info frame на самом деле получить информацию. Вот простая версия, прикрепленная к source так что вы можете посмотреть весь сценарий:

proc traceinfo args {
puts [dict get [info frame -2] cmd]
}
trace add execution source enterstep traceinfo
source yourscript.tcl

Будьте готовы к большому количеству продукции. Словарь из info frame может иметь все виды соответствующих записей, таких как информация о том, что такое номер строки команды и каков исходный файл; cmd запись является незамещенного источник для вызываемой команды (если вы хотите заменить версию, смотрите соответствующие аргументы для обратного вызова трассировки, traceinfo выше).

0

Другие решения


По вопросам рекламы [email protected]