2017-01-19 6 views
0

Согласно Tcl руководства, некоторые из информации, полученной путем выполнения команды «Info кадра» является:Как получить точный номер строки и имя файла из команды 'info frame' в tcl, если тип является proc или eval?

линия :: Этой запись содержит номер строки команды находится на внутренней стороне скрипта является частью , Эта информация отсутствует для типа прекомпилированного. Для источника источника эта информация подсчитывается относительно начала файла, тогда как для двух последних строк линия подсчитывается относительно начала сценария. файл: Эта запись указана только для источника источника. Он обеспечивает нормализованный путь к файлу, в котором находится команда.

Это означает, что имя файла и точный номер строки не могут быть получены, если тип не является источником, но мне нужно получить доступ именно к этим двум. пожалуйста, здесь?

ответ

0

Если у Tcl есть информация о том, в каком файле находился скрипт (как сообщается в ключах file и line, возвращенных info frame), тогда вы знаете, откуда оно взялось. Если Tcl не хватает информации, что возможно по целому ряду причин, например, если код был автоматически сгенерирован или если вы делаете особенно «умное» генерирование кода, то это действительно не может вам рассказать. Механизм отслеживания происхождения скриптов, к сожалению, довольно хрупкий, поскольку он зависит от отслеживания точных ссылок на строковые литералы на уровне указателя для работы; когда он теряет трек, он просто не может это исправить. (Кроме того, он не использует информацию, содержащуюся в отчетах об ошибках. Это всегда так расстраивает меня, поскольку в противном случае это был бы самый важный случай использования!)

Поскольку вы не можете получить идеальное отслеживание во всех случаях , это будет больше похоже на то, можно ли сделать что-то в вашем действительном корпусе; это часто более возможно, чем кажется, что вы боитесь. Хитрость заключается в том, чтобы захватить информацию в тот момент, когда вы ее обычно получили, и использовать ее после этого. Это не невероятно сложно, но делать это хорошо - это более сложные части генерации кода в Tcl (если вы не напишете все в файл и, конечно, не беспокойтесь о том, чтобы отслеживать, кроме этого).

+0

Спасибо за ур ответ sir.but Я все еще пытаюсь найти решение. Я даю вам образец кода, над которым я работаю, и его o/p.Any ведет будет заметным –

+0

Код: proc stacktrace { } { Установленный уровень [информационная рамка]; внутренний уровень -2; if {$ level> 1} { echo Ошибка произошла; while {$ level} { set error_info [информационный фрейм $ level]; puts "$ error_info" incr level -1; } }} Результат: тип линии Proc 3 CMD {метод1} Proc :: Proca Уровень 1 типа Eval линия 1 CMD {0 {Proca. }} level 2 –

+0

Можно ли использовать любую команду, отличную от информационного фрейма или информационного уровня, для достижения этой цели? это выглядит очень простой функциональностью, которую я не могу поверить, не доступен в tcl. –

 Смежные вопросы

  • Нет связанных вопросов^_^