2009-02-17 8 views
7

Oft, wenn ich anderen Code beobachte, möchte ich nur herausfinden, wo und wie eine Variable definiert ist. Normalerweise suche ich nach dem Typ der Variablen, bis ich die Definition gefunden habe, die sehr zeitaufwendig ist. Und ich denke, dass es einige Werkzeuge gibt, die mir in dieser ruinösen Situation helfen können. Irgendwelche Vorschläge in einigen Tools oder Befehlen, die mir bei dieser Aufgabe helfen?Irgendein Programm oder Trick, um die Definition einer Variablen zu finden?

Ich weiß, dass die Verwendung einer GUI und das Erstellen eines Projekts dies automatisch geschieht Ich spreche von einer Möglichkeit, dies ohne eine GUI zu tun. Ich arbeite mit nur Textmodus. Ich laufe unter Linux und ich benutze C/C++, aber Vorschläge für andere Sprachen sind willkommen.

Vielen Dank.

Eine mögliche Lösung

Michel in einem seiner Kommentare schlagen eine einfache eine effektive Lösung wieder die Variable definieren, in diesem Fall in der Kompilierung, informieren der Compiler, wo der vorherige definiton ist. Natürlich müssen wir, um diese Lösung anzuwenden, vorher im Ort der Variablen nachdenken.

+0

könnten Sie zumindest die Sprache angeben;) – devio

+0

Ich bin so in C++, dass mein Verstand denkt nur, dass nur eine Sprache existiert – Eduardo

+0

Die Methode der Neudefinition der Variablen ist keine Lösung. Sie haben unterschiedliche Namensräume. Wenn Sie beispielsweise nach einer Variablen mit dem Namen "average" suchen, können Sie sie in einer Methode oder Funktion oder in einem anderen Namensraum (mit demselben Namen) definieren. Dies ist kein Fehler. –

Antwort

8

Bearbeiten: OK, Sie sagen, dass Sie C++ verwenden. Ich bearbeite meine Antwort. Ich würde den C-Präprozessor verwenden und dann für die Variable grep. Es wird an erster Stelle erscheinen.

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

Der C-Präprozessor wird kommen all die beinhaltet, dass das Programm verwendet, und die Definition hat vor jeder Nutzung dieser Variablen in der Datei sein. Keine perfekte Sache, aber ohne eine IDE oder eine vollständige Sprachbeschreibung/Verwaltungswerkzeug haben Sie nur den Text.

Eine andere Option wäre ctags. Es versteht unter anderem die C- und C++ - Syntax und kann unter anderem mit den Befehlszeilentools emacs und vi nach Variablen und Funktionen durchsucht werden.

+0

denken muss. Zusätzlich zu Ctags ist Semantic ein weiteres Add-on, das Emacs-Benutzer vielleicht auschecken möchten: http: // cedet.sourceforge.net/semantic.shtml – codelogic

+0

Danke, Codelogik. Ja, ich habe es gerade entdeckt und es versucht :) Danke nochmal. –

11

Sie haben bereits das geeignetste Werkzeug angegeben: eine IDE. Dies ist genau die Art von was eine IDE übertrifft. Warum würden Sie nicht möchten eine IDE verwenden, wenn Sie Entwicklung ohne eine schmerzhaft finden?

Beachten Sie, dass Emacs, Vim etc können als IDEs arbeiten - ich spreche nicht über zwingt Sie die Welt der GUIs, wenn Sie in einer Nur-Text-Situation, z. weil du in bist SSHing.

(Ich bin wirklich nicht versuchen, unhöflich, hier zu sein. Ich denke nur, haben Sie die offensichtliche Lösung diskontiert, ohne zu erklären, warum.)

+0

Der Grund, warum ich das abwertete, ist, weil ich normalerweise GUIs benutze, aber jetzt arbeite ich in einem kleinen Projekt im SSHing-Modus und ich suche nur etwas Einfaches. Du hast nicht unhöflich ausgesehen. Thx – Eduardo

+0

In diesem Fall würde ich Emacs als IDE verwenden. Ich wäre überrascht, wenn es irgendwo kein "zur Definition gehen" gäbe. –

+0

AFAIK, Emacs hat keine solche Funktionalität out-of-the-box, obwohl ctags und Semantic, zwei Add-ons, bieten es. – codelogic

-1

Wenn Sie in Microsoft arbeiten Visuelle Studio (von dem Sie denken, dass Sie es auch für C++ verwenden könnten, aber auf einer Windows-Workstation arbeiten müssten), gibt es eine leicht zugängliche Rechtsklick-Menüoption für "Gehe zur Definition ...", die Sie zur Definition von jedem führt derzeit markierte Variable, Typ oder Methode.

+0

In der Frage gebe ich keine GUIs, weil ich im Textmodus arbeite – Eduardo

+0

Nicht zu erwähnen, dass Sie ein Wort weggelassen: vielleicht. Ich habe nicht gefunden, dass das ein bisschen zuverlässig ist. Manchmal funktioniert es und manchmal nicht. –

-1

Wenn Sie darauf bestehen, im Textmodus zu bleiben, können Sie dies entweder mit emacs oder vi mit den entsprechenden Plug-Ins tun.

Aber wirklich, in das 21. Jahrhundert bewegen.

EDIT: Sie kommentiert, dass Sie dies über SSH tun, weil Sie die Build-Geschwindigkeit des Remote-Server-Cluster benötigen.

In diesem Fall mounten Sie das Laufwerk auf Ihrem lokalen Rechner und verwenden Sie eine IDE, und nur SSH in, um einen Build zu starten.

+0

Das Laufwerk auf dem lokalen Rechner kann manchmal nicht installiert werden. Ich arbeite oft von zu Hause aus und muss SSH installieren, da unser Systemadministrator die Laufwerke nicht von außen einhängen lässt. Also benutze ich auch Emacs. – Frank

+0

Können Sie eine Remote-X-Verbindung einrichten, die über ssh getunnelt ist? –

+0

@Mr Fooz wenn Sie zu mir fragen, keine Ahnung, auch ich will nicht in Schwierigkeiten mit dem Admin Ich habe keine sehr gute Beziehung mit ihm – Eduardo

1

Grep für allgemeine Muster für Variablendeklarationen. Beispiel: *, &,> oder eine alphanumerische Zeichenfolge, gefolgt von einem oder mehreren Leerzeichen, dann der Name der Variablen. Oder ein Variablenname gefolgt von null oder mehr Leerzeichen, dann eine linke Klammer oder ein Semikolon. Es sei denn, es wurde unter wirklich seltsamen Umständen (wie mit irgendeiner Art von Makro) definiert, es funktioniert jedes Mal.

+0

Ja normalerweise mache ich das, aber ich suchte nach etwas mehr "professionellem" – Eduardo

+0

Sie könnten die Variable immer neu definieren und auf einen Kompilierungsfehler warten, um Ihnen zu sagen, wo die vorherige Deklaration war. Etwas professioneller wäre wahrscheinlich nur "eine IDE verwenden". – Michel

+0

Das ist ein guter Trick – Eduardo

5

Ich benutze cscope und ctags-überschwänglich religiös. Führen Sie es einmal auf meiner Codebasis und dann in Vim, kann ich verschiedene Befehle wie ^] oder [D oder [I oder ähnlich, um Definitionen oder Deklarationen für ein bestimmtes Wort zu finden.

Dies ist vergleichbar mit Einrichtungen von Mega-IDEs wie Visual Studio und Eclipse.

Cscope fungiert auch als eigenständiges Tool, das diese Suchen durchführt.

2

Ich benutze eine von drei Methoden:

  1. Ich werde CTags verwenden, um meinen Quellbaum (nächtlichen) zu verarbeiten und dann leicht Befehle in Vim (oder andere Editoren) kann direkt auf die Definition zu springen.
  2. Ich werde nur grep (linux) oder findstr (windows) verwenden, um nach allen Vorkommen des Variablennamens oder -typs zu suchen. Die Definition ist normalerweise ziemlich offensichtlich.
  3. In Vim können Sie nur rückwärts im Bereich suchen und oft finden, was Sie suchen.
1

In VIM können Sie gd verwenden lokale Variablendeklarationen oder gD zu sehen globale Variablendeklarationen zu sehen, wenn sie in der aktuellen Datei definiert sind. Referenz Go_to_definition_using_g

Sie auch [i verwenden können, um die Definition zu sehen, ohne es zu springen, oder [I alle Vorkommen der Variablen, um zu sehen in allen darin enthaltenen Dateien als auch, was natürlich auch die Definition zeigen.