Недавно я столкнулся с некоторым кодом в моем проекте, который работает с массивом env
в tcl.
По сути, есть функция инициализации, которая добавляет write trace
к одному из элементов, присутствующих в env
.Позже в потоке обработки того же самого варианта использования вызывается array get ::env
, который, кажется, удаляет добавленную трассировку.
Я попытался повторить тот же сценарий использования с обычным массивом tcl, и он работает нормально, а добавленный мной след остается даже после выполнения array get arrayName
на нем.Я подозреваю, что что-то вызывает unset
на соответствующем элементе.Поэтому я поместил на него еще одну трассировку unset
и попытался распечатать стэк вызовов в функции, связанной с этой трассировкой.К сожалению, он не печатает ничего полезного.
Мне не хватает чего-то, что я должен знать здесь?Если нет, не могли бы вы помочь мне предложить, что еще я могу сделать, чтобы отладить это?Чтобы подвести итог, я пишу шаги этого варианта использования.Я новичок в tcl и могу помочь с этим здесь
#add a trace on one of the elements present in env
trace variable ::env(myVar) w myFunction
#get the contents of env
array get ::env
#trace is lost after the second step,can check by below command
trace vinfo ::env(myVar)