Может ли Emacs показать мне, где вызывается определенная функция? - PullRequest
13 голосов
/ 02 июня 2010

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

Ответы [ 3 ]

11 голосов
/ 02 июня 2010

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

2 голосов
/ 02 июня 2010

Я использую xcscope для этого.Это библиотека, которая позволяет Emacs взаимодействовать с внешним инструментом cscope.

После установки вы можете использовать cscope-find-functions-calling-this-function, чтобы получить список мест назначения исходного кода, которые вызывают определенную функцию.

http://www -inst.eecs.berkeley.edu / ~ cs186 / fa05 / debugging / xcscope.el http://www.emacswiki.org/emacs/CScopeAndEmacs

1 голос
/ 02 июня 2010

вот фрагмент из моего старого файла .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 "' *"))))))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...