2015-08-11 3 views
2

Мне было интересно, были ли какие-то «текущие» инструменты, которые позволяют мне отлаживать или выполнять мой текущий код. Все программы, которые я нашел, сильно устарели и/или не работают с TCL 8.6.TCL Code Debugger/Stepper

EDIT: Чтобы быть более ясным, здесь именно то, что мне нужно:

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

+0

Лучшее, что я нашел до сих пор, это ramdebugger, но я думаю, что вы, возможно, попробовали это. Один трюк, который я иногда делаю, это присоединить tkcon к запущенной программе (если это программа Tk, это легко). Затем в tkcon я могу редактировать функции, вызывать функции редактировать глобальные переменные и т. Д. – slebetman

+0

Это просто консольное окно? – Sawyer

+1

Да. Но он реализует действительно полезную команду редактирования. Например, вы можете ввести 'edit variablename' и открыть значение этой переменной в окне редактора. Или «edit procname», и он откроет определение proc в окне редактора. В принципе, вы можете вставлять элементы внутри функций в запущенные программы. – slebetman

ответ

1

Вы можете попробовать выполнить выполнение команды трассировки, как описано в this Stack Overflow answer. Это скажется на производительности, но может генерировать подробный журнал о том, что происходит. Поскольку вы будете искать что-то, связанное с аппаратными проблемами, вы также можете использовать fconfigure для переключения буферизации вывода на line (или none; разница не имеет значения, если вы только пишете полные строки).

Другой способ поиска аппаратных проблем при запуске на Linux - попробовать работать с strace. Это регистрирует то, что происходит с системными вызовами, что может быть очень полезно. Если вы смотрите на журнал, имейте в виду, что реализация Tcl вызывает gettimeofday() при использовании цикла событий; это ожидается, правильное поведение.

0

Это не место для обучения, но я действительно рекомендую вам ознакомиться с инструментами самоанализа и экспертизы, которые предлагает tkcon. Простой и очень короткий пример: вы запустили некоторый код из tkcon, код, который включает в себя неясную и сложную команду foo. Вы подозреваете, что-то с ним, так что вы вводите команду edit -type proc foo и получить окно с текстом

proc foo {} { 
    for {set i 0} {$i < 10} {incr i} { 
     set a [expr {2*$i}] 
    } 
} 

Вы решили отслеживать изменения в a и введите observe variable a write в качестве новой первой команды в теле. Затем вы выбираете Send to slave в меню Send to..., а это значит, что foo теперь переопределено в главном окне tkcon. Когда вы снова запустите свой код, изменения в a будут занесены в окно консоли tkcon (в виде командных строк set a ...).

Возвращаясь к окну редактирования, вы можете добавить точку останова, вставив команду idebug break. Если вы введете команду idebug on в окно консоли и снова запустите свой код, выполнение остановится в этот момент, и вы получите интерактивное приглашение, в котором вы можете, например. подняться/спуститься из стека вызовов, перечислить переменные и получить трассировку стека, а также выполнить произвольные команды для изменения значений переменных и т. д.

Если вы внесли значительные изменения в команду в окне редактирования, вы можете сохранить ее к новому файлу или добавьте его в старый (исходный файл Tcl может иметь несколько определений одной и той же команды: используется только последний). Если вы его не сохраните, исходный источник не изменится. Вы можете даже открыть несколько окон редактирования с помощью одной и той же команды и отредактировать их отдельно, используя разные варианты.

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

Ввод команды edit -type file $argv0 в консоли должен позволить вам взглянуть на источник для tkcon, окончательной документации.

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