Существует ли путь в Emacs для обнаружения, который другие места в коде вызывают определенную функцию? С моей текущей установкой (GNU emacs 23.1.1, C кодовая база), я обычно должен искать целую кодовую базу имя функции для наблюдения, который другие функции называют им. Было бы хорошо, если я мог бы эффективно отобразить все названия функций, которые вызывают эту определенную функцию, на которую я смотрю.
Я использую xcscope
для этого. Это библиотека, которая заставляет Emacs взаимодействовать с внешним инструментом cscope
.
После настройки вы можете использовать cscope-find-functions-calls-this-function
, чтобы получить список адресатов исходного кода, которые вызывают определенную функцию.
http://www-inst.eecs.berkeley.edu/~cs186/fa05/debugging/xcscope.el http://www.emacswiki.org/emacs/CScopeAndEmacs
Вы можете использовать функцию semantic-symref
( Cc, G
) из пакета CEDET. Он может использовать базы данных GNU Global или CTags для поиска вызывающих, если они существуют. Он также может анализировать источники, чтобы найти вхождения.
вот отрывок из моего старого файла .emacs
, который он выполняет: попросить что-то найти в etags-tagfile (find-tag-tag) grep для этого в соответствии с режимом
(defun find-caller (tagname)
"Find occurences of tagname in files in the current directory
matching extension of current file."
(interactive (list (find-tag-tag "Find caller: ")))
(let ((cmd "grep -n "))
(cond
((member major-mode '(lisp-mode cmulisp-mode))
(grep (concat cmd "-i '" tagname "' *.lisp")))
((eq major-mode 'c-mode)
(grep (concat cmd "'" tagname "' *.[ch]")))
((member major-mode '(latex-mode tex-mode))
(grep (concat cmd "-i '" tagname "' *.tex")))
((eq major-mode 'emacs-lisp-mode)
(grep (concat cmd "'" tagname "' *.el")))
(t (grep (concat cmd "'" tagname "' *"))))))