2010-09-27 13 views
5

Ich bin für eine Befehlszeilenprogramm auf * nix suchen, die die Namen aller Funktionen, Klassen usw. definiert in einer Datei (C/C++/Java)Linux-Tool, um alle Funktionen in einer Quelldatei aufzulisten?

+0

Welche Art von Datei, welche Sprache, meinst du, complimentierte Elf-Datei? – Gadolin

+0

In welcher Sprache befindet sich die Quelldatei? –

+0

Für Java schreiben Sie einen reflektionsbasierten Code, um es zu tun. Bitte überprüfen Sie, ob C++ filt etwas für Sie Nützliches tut - http://sourceware.org/binutils/docs-2.16/binutils/c_002b_002bfilt.html – Jayan

Antwort

7

ctags können Sie geben, dass (und viel abladen kann Mehr). Es ist mit den meisten Linux-Distributionen enthalten ...
http://ctags.sourceforge.net/whatis.html

+0

Ich weiß über Ctags, aber es generiert seine Tags-Datei, die dann benötigt wird in einen Editor importiert werden, z Vim. Ich habe nach einem einfachen Dienstprogramm gefragt, das nur die Funktionsnamen auf der Konsole ausgibt. Wenn Ctags das tun, bin ich mir nicht sicher – Anonymous

+1

dann willst du 'ctags -x', das eine für Menschen lesbare Zusammenfassung von Sachen ausgibt. – SingleNegationElimination

+0

Auch 'ctags -f-'druckt die Ausgabe auf stdout und nicht eine Tag-Datei. Sie können dann 'awk' oder etwas Ähnliches verwenden ... –

0

Es ist nicht klar, welche Sprache Sie beziehen sich auf: wenn:

  • elf Datei erfüllt dann Sie readelf Dienstprogramm haben vorausgesetzt, Sie haben Datei mit debug Informationen „-g“
+0

Dies wird nicht funktionieren für C++, wegen name-mangling ... –

+1

@Gilad Naor - Aber Sie können dann C++ filt verwenden, um sie zu demandle –

0

Nicht sicher, ob es für Ihren genauen Zweck nützlich sein würde, aber einen Blick auf GCC-XML

0

Vielleicht möchten Sie auch einen Blick auf cscope ergreifen, die zu ctags in der akzeptierte Antwort vorgeschlagen ähnlich ist. Es erstellt eine eigene Symboldatenbank. Es bietet eine gute Schnittstelle für Sie, die Suche nach einem bestimmten Symbol/Einschluss/Datei/Deklaration in Ihrem Projekt ermöglicht.