Emacs может показать мне, где определенная функция вызвана?

Существует ли путь в Emacs для обнаружения, который другие места в коде вызывают определенную функцию? С моей текущей установкой (GNU emacs 23.1.1, C кодовая база), я обычно должен искать целую кодовую базу имя функции для наблюдения, который другие функции называют им. Было бы хорошо, если я мог бы эффективно отобразить все названия функций, которые вызывают эту определенную функцию, на которую я смотрю.

13
задан Alberto Zaccagni 24 October 2017 в 13:30
поделиться

3 ответа

Я использую 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

2
ответ дан 2 December 2019 в 00:30
поделиться

Вы можете использовать функцию semantic-symref ( Cc, G ) из пакета CEDET. Он может использовать базы данных GNU Global или CTags для поиска вызывающих, если они существуют. Он также может анализировать источники, чтобы найти вхождения.

11
ответ дан 2 December 2019 в 00:30
поделиться

вот отрывок из моего старого файла .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 "' *"))))))
1
ответ дан 2 December 2019 в 00:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: