Любая программа или трюк, чтобы найти определение переменной? - PullRequest
8 голосов
/ 18 февраля 2009

Много раз, когда я смотрю чужой код, я просто хочу найти, где и как определяется переменная. Обычно то, что я делаю сейчас, - это ищу тип переменной, пока не найду определение, которое занимает очень много времени. И я думаю, что есть некоторые инструменты, которые могут помочь мне в этой обычной ситуации. Какие-нибудь предложения в некоторых инструментах или командах, чтобы помочь мне в этой задаче?

Я знаю, что с помощью графического интерфейса и создания проекта это делается автоматически, я говорю о способе сделать это без графического интерфейса. Я работаю только в текстовом режиме. Я работаю под Linux и использую C / C ++, но предложения для других языков приветствуются.

Большое спасибо.

Возможное решение

Мишель в одном из своих комментариев предлагает простое эффективное решение снова определить переменную, в этом случае во время компиляции компилятор сообщит, где находится предыдущее определение. Конечно, чтобы применить это решение, нам нужно заранее подумать о местонахождении переменной.

Ответы [ 8 ]

11 голосов
/ 18 февраля 2009

Вы уже дали наиболее подходящий инструмент: IDE. Это точно тот тип, в котором IDE превосходит. Почему бы вам не захотеть использовать IDE, если вы находите развитие без него болезненным?

Обратите внимание, что Emacs, Vim и т. Д. Могут работать как IDE - я не говорю о том, чтобы принуждать вас к миру GUI, если вы хотите оставаться в текстовой ситуации, например потому что вы в SSHing.

(я действительно не пытаюсь быть здесь грубым. Я просто думаю, что вы обесценили очевидное решение, не объяснив почему.)

8 голосов
/ 18 февраля 2009

Редактировать : ОК, вы говорите, что используете C ++. Я редактирую свой ответ. Я бы использовал препроцессор C, а затем grep для переменной. Он появится в первую очередь.

cpp -I...(preprocessor options here) file.cpp | grep variable

Препроцессор C объединит все включения, которые использует программа, и определение должно быть перед любым использованием этой переменной в файле. Не идеальная вещь, но без IDE или полного описания языка / инструмента управления, у вас есть только текст.

Другой вариант будет использовать ctags . Он понимает синтаксисы C и C ++ (среди прочих) и может искать переменные и функции, используя инструменты командной строки, emacs и vi, среди прочего.

5 голосов
/ 18 февраля 2009

Я пользуюсь cscope и ctags-exuberant религиозно. Запустите его один раз на моей базе кода, а затем в Vim я могу использовать различные команды, такие как ^] или [D или [I или аналогичные, чтобы найти любые определения или объявления для данного слова.

Это похоже на возможности, предоставляемые мега-IDE, такими как Visual Studio и Eclipse.

Cscope также функционирует как автономный инструмент, который выполняет эти поиски.

2 голосов
/ 18 февраля 2009

Я использую один из трех методов:

  1. Я буду использовать CTags для обработки моего дерева исходных текстов (по ночам), а затем легко использовать команды в Vim (или других редакторах) для перехода прямо к определению.
  2. Я просто буду использовать grep (linux) или findstr (windows) для поиска всех вхождений имени или типа переменной. Определение обычно довольно очевидно.
  3. В Vim вы можете просто искать в области поиска назад и часто находить то, что ищете.
1 голос
/ 18 февраля 2009

В VIM вы можете использовать gd для просмотра объявлений локальных переменных или gD для просмотра объявлений глобальных переменных, если они определены в текущем файле. Ссылка Go_to_definition_using_g

Вы также можете использовать [i, чтобы увидеть определение, не переходя к нему, или [I, чтобы увидеть все вхождения переменной во всех включенных файлах, что также естественно покажет определение.

1 голос
/ 18 февраля 2009

Grep для общих шаблонов объявлений переменных. Пример: *, &,> или буквенно-цифровой символ, за которым следует один или несколько пробельных символов, а затем имя переменной. Или имя переменной, за которым следуют ноль или более пробельных символов, затем левая скобка или точка с запятой. Если он не был определен в действительно странных обстоятельствах (например, с каким-то макросом), он работает каждый раз.

0 голосов
/ 18 февраля 2009

если вы настаиваете на том, чтобы оставаться в текстовом режиме, вы можете сделать это либо с emacs, либо с vi с помощью соответствующих плагинов.

Но на самом деле, двигайтесь в 21 век.

РЕДАКТИРОВАТЬ: Вы прокомментировали, что вы делаете это через SSH, потому что вам нужна скорость сборки удаленного кластера серверов.

В этом случае смонтируйте диск на локальном компьютере и используйте IDE, и просто введите SSH, чтобы запустить сборку.

0 голосов
/ 18 февраля 2009

Если вы работаете в Microsoft Visual Studio (которую, я думаю, вы могли бы использовать и для C ++, но для этого потребовалась бы работа на рабочей станции Windows), есть легкодоступный пункт меню правой кнопкой мыши для «Перейти к определению ...», который приведет вас к определению любой отмеченной в данный момент переменной, типа или метода.

...