У меня есть функция в скрипте, но я не могу найти, кто ее вызывает - PullRequest
0 голосов
/ 18 марта 2020

У меня есть функция в скрипте, но я не могу найти, кто ее вызывает. Я пытался использовать grep, но я не могу его найти. Может быть, это на другом пути. Как я могу получить его из Tcl? Например, в csh есть опция для использования с "echo $ 0"

, которую я использую с linux.

Ответы [ 2 ]

1 голос
/ 18 марта 2020

Вы можете попробовать использовать info frame -1:

proc foo {} {
    bar
}

proc bar {} {
   puts [info frame -1]
}

foo
# => type proc line 1 cmd bar proc ::foo level 1

Таким образом, вы можете прочитать это, используя dict как dict get [foo] proc, и вы получите ::foo, что означает pro c, который вызвал bar, является foo (в глобальном пространстве имен).


EDIT: Что-то, что вы можете попытаться выполнить всеми командами по пути:

proc a {} {b}
proc b {} {c}
proc c {} {
    for {set i 1} {$i < [info level]} {incr i} {
        puts [info frame -$i]
    }
}

a
# => type proc line 1 cmd c proc ::b level 1
#    type proc line 1 cmd b proc ::a level 2
0 голосов
/ 18 марта 2020

Вы можете использовать grep, чтобы пройти по всем файлам:

grep -l -R name_of_the_finction /

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

Конечно, есть другой способ , вы активируете демон audit, устанавливаете отслеживаемые операции чтения для этого конкретного файла (где определена функция) и ждете. Время от времени проверяйте журналы аудита, и вы увидите процесс, пользователя, файл, который открывает файл для чтения.

Если вы хотите использовать аудит, вы можете проверить в этих статьях 1 2 в моем личном блоге.

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