Vraag:
Functie-definities extraheren uit de broncode
Dominik H
2015-12-12 18:11:17 UTC
view on stackexchange narkive permalink

ik heb een grote werkruimte met veel bronbestanden (* .cpp, * .c, * .h, * .hpp enz.) en ik wil er wat geautomatiseerde analyses op uitvoeren.

Ik heb al een dekkingsanalyse met het cobertura-formaat die me de regels code vertelt die tijdens een test zijn uitgevoerd, maar nu wil ik een analyse op functieniveau doen, dus ik moet de uitgevoerde regels in kaart brengen code naar zijn functies.

Ik heb geprobeerd de lijst van functies zelf te implementeren, maar het is buitengewoon ingewikkeld om alle verschillende soorten functies te vinden (inlines, virtuals, de- / constructors, constructors van structs enz.)

Kent iemand een tool die kan worden gebruikt om een ​​lijst met functies in een bepaald bronbestand te maken, zodat ik de line-of-code-analyse eraan kan toewijzen?

Hartelijk dank

Als alternatief kunt u een dekkingstool krijgen die u die mapping rechtstreeks heeft verstrekt.
Twee antwoorden:
Ira Baxter
2016-01-09 17:32:54 UTC
view on stackexchange narkive permalink

Onze DMS Software Reengineering Toolkit met zijn C ++ 14 front-end kan hiervoor worden gebruikt.

DMS is een programma voor algemene doeleinden analyse- en transformatietool op basis van compilertechnologie. Het parseert de broncode op basis van de front-end die het gebruikt, om datastructuren zoals AST's te compileren die zijn voorzien van bronlocatie-informatie, symbooltabellen en controlestroomgrafieken. Het biedt een verscheidenheid aan bibliotheken en DSL's voor het specificeren van acties over die compilergegevensstructuren, inclusief lopende AST's, patroonvergelijking over AST's met behulp van oppervlakte-syntaxispatronen, het wijzigen van de AST's en tenslotte het mooi afdrukken van elke gewijzigde code naar een compileerbaar bronformulier met opmerkingen.

Om de taak van OP af te handelen, zou men DMS configureren om "slechts" de broncode te parseren (u kunt naamresolutie en stroomanalyse voor deze taak overslaan) om AST's te bouwen voor de bestanden van belang. Met behulp van de regelnummers zou men de AST kunnen doorlopen op zoek naar knooppunten die overeenkomen met de regelnummers, de functiesubboom kiezen die overeenkomt met het knooppunt, en alleen die substructuren mooi afdrukken om de volledige functiedefinitie te zien, of alleen de functiehandtekening mooi afdrukken. Voila.

Een alternatieve benadering zou de bestanden ontleden en vervolgens de naam omzetten. Het doorlopen van de symbooltabel is eenvoudig en geeft toegang tot de functiehandtekening en locatie dankzij verwijzingen naar de AST van de functie.

In beide gevallen zou men, in plaats van alleen functienamen / handtekeningen / lichamen af ​​te drukken, kunnen gebruiken DMS om de statische analyses van uw keuze te implementeren.

DMS wordt al meer dan een decennium gebruikt voor het analyseren en transformeren van grote C ++ - codebases.

Ik ben de auteur, dus niet doen beschouw dit als een aanbeveling. Ik documenteer het bestaan ​​ervan als een oplossing.

Steve Barnes
2016-02-08 23:55:24 UTC
view on stackexchange narkive permalink

De eerste optie zou kunnen zijn om een ​​hulpprogramma voor het genereren van codedocumentatie te gebruiken, zoals doxygen. Als je het vertelt om ongedocumenteerde functies op te nemen, dan kan het je edelstenen geven, zoals welke functies in welke bestanden zitten en ook oproep- en oproepkaarten.

Doxygen-functies:

  • Gratis
  • Cross-platform OS-X, Linux & Windows
  • Veel diagramopties
  • Kan C ++, C, Objective-C, C #, PHP, Java, Python, IDL (Corba, Microsoft en UNO / OpenOffice-smaken), Fortran, VHDL, Tcl en tot op zekere hoogte D
  • Kunnen ook uw code documenteren vanuit de opmerkingen die documentatie produceren in HTML, Latex, RTF, PostScrript, PDF, gecomprimeerde HTML of man.

Ik gebruik ook SourceMonitor die uw code kan controleren op complexiteit en een lijst geeft van welke functies in welke bestanden zitten.

SourceMonitor-functies:

  • Gratis
  • Alleen Windows - XP ..
  • Verzamelt statistieken in een snelle, enkele doorgang bronbestanden.
  • Meet statistieken voor broncode geschreven in C ++, C, C #, VB.NET, Java, Delphi, Visual Basic (VB6) of HTML.
  • Inclusief mij metrische gegevens over thod- en functieniveau voor C ++, C, C #, VB.NET, Java en Delphi.
  • Exporteren als XML of CSV.


Deze Q&A is automatisch vertaald vanuit de Engelse taal.De originele inhoud is beschikbaar op stackexchange, waarvoor we bedanken voor de cc by-sa 3.0-licentie waaronder het wordt gedistribueerd.
Loading...