Hallo Forum, für dokumentarische Zwecke (arbeit) suche ich nach einer Möglichkeit, alle Funktionen einer C/C++ Datei (also die dort implementierten) automatisiert (Python) aufzulisten. Mit nm bekomme ich aus den Objektdateien fast alle Funktionen, aber static/inline Funktionen fehlen, logischer Weise. Diese sollen aber mit aufgelistet werden. Die Funktionen stehen im Map-File, aber das Map-File zu parsen ist nicht unerheblicher Aufwand. Habt ihr vielleicht eine Idee? Grüße
Doxygen oder clangd
Μαtthias W. schrieb: > Doxygen Hätte ich auch als erstes versucht. XML Output und dann sollte das relativ leicht parsbar sein in Python. Ansonsten scheint es auch Header Parser zu geben: https://cppheaderparser.readthedocs.io/en/stable/api.html
Gast
#7104525
Kaj G. schrieb: > für dokumentarische Zwecke (arbeit) suche ich nach einer Möglichkeit, > alle Funktionen einer C/C++ Datei (also die dort implementierten) > automatisiert (Python) aufzulisten. Mit nm bekomme ich aus den > Objektdateien fast alle Funktionen, aber static/inline Funktionen > fehlen, logischer Weise. static-Symbole sollte bei nm aber mit drin sein. Wenns inline unbedingt bedürfen soll (wofür auch immer), musste halt entweder den Code parsen (für C99 gibts nen pycparser oder so), oder eben über Mapfiles/Debug-Symboldaten gehen (pdb). > Diese sollen aber mit aufgelistet werden. Die > Funktionen stehen im Map-File, aber das Map-File zu parsen ist nicht > unerheblicher Aufwand. Ich würds erstmal per Shell versuchen zu parsen (grep/sed), wenn's zu kompliziert wird für Python, merkt mer das dann recht schnell. Persönlich würd ich empfehlen, die inlines zu knicken und darauf zu verzichten - lohnt imho den Aufwand nicht ggü. der nm-basierten Lösung.
Kaj G. schrieb: > für dokumentarische Zwecke (arbeit) suche ich nach einer Möglichkeit, > alle Funktionen einer C/C++ Datei (also die dort implementierten) > automatisiert (Python) aufzulisten. Dazu fallen mir die ctags von vim ein. Siehe z.B. https://kulkarniamit.github.io/whatwhyhow/howto/use-vim-ctags.html oder http://ctags.sourceforge.net/whatis.html oder https://linux.die.net/man/1/ctags Die tag Datei sollte die Infos enthalten, ich habe aber gerade kein Beispiel zur Hand.
Gast
#7104654
Beachte: durch Preprozessor Mechanismen können Funktionen aktiviert/deaktiviert werden. Daher statt grep Tools eher Tools nutzen die Preprozessor Befehle verstehen, z. B. Doxygen...
Gast
#7105113
Cproto funktioniert, ist aber c , kein Python
Alexander S. schrieb: > Dazu fallen mir die ctags von vim ein. Siehe z.B. > https://kulkarniamit.github.io/whatwhyhow/howto/use-vim-ctags.html > oder http://ctags.sourceforge.net/whatis.html oder > https://linux.die.net/man/1/ctags > Die tag Datei sollte die Infos enthalten, ich habe aber gerade kein > Beispiel zur Hand. Besser: Universal Ctags (https://github.com/universal-ctags/ctags) Das wird auch aktuell gehalten. Einfache Kommandzeile (ggf anpassen):
1 | |
Das Ergebnis steht in der Datei tags.
Gast
#7109296
Kaj G. schrieb: > alle Funktionen einer C/C++ Datei (also die dort implementierten) > automatisiert (Python) aufzulisten. in meiner ide habe ich das so gelöst:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 | |
68 | |
69 | |
70 | |
71 | |
72 | |
73 | |
74 | |
75 | |
Es werden jeweils die Ebenen geschweifter Klammern festgestellt. Auf der untersten Ebene stehen geschweifte Klammern vor Funktionen. Die werden dann festgestellt und aufgelistet. Kompliziert - aber funktioniert.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.