Source code analyze

alex_rs6

Mitglied
Hallo liebes Forum,

bitte um eure Unterstützung. Ich möchte ein Java Programm schreiben, das ein C Project einliest und statische Quellcode Analyse durchführt.

Meine Frage: gibt es schon fertige Werkzeuge bzw. Libraries, die mir Informationen über den gesamten C Project bzw. einzelne Module liefern können, wie z.B. globale Variablen und Funktionen, lokale Variablen und Funktionen im Modul usw.?

Ich freue mich für jede Hilfe und bedanke mich im Voraus.

Gruß
 

Marco13

Top Contributor
Eclipse CDT - damit kann man den Quellcode parsen und bekommt dann einen AST. Ist aber ... nun, nicht gerade trivial. WIE kompliziert C/C++ sind, merkt man erst, wenn man sich so einen AST von einer vermeintlich simplen Hader-Datei mal ansieht.... :eek:
 

alex_rs6

Mitglied
Danke für eure Antworten,

ich brauche für mein Programm nur die Infos, welche globale und lokale Variablen in jedem Modul und in jeder Funktion sind und ob diese richtig initialisiert sind. Sortieren und einordnen tue ich dann selbst. Danach müssen die eingesammelte Infos in eine Excel Tabelle rein.

Die Verwendung einesStatic Code Analyse Tools ist ausgeschloßen.

Eclipse-CDT lässt die Infos sehr gut anzeigen, wird bei uns leider nicht eingesetzt. Kann man auf diese features von einem java Programm zugreifen? Einfach H und C Files vom C-Project einlesen und analysieren?
 
G

Gast2

Gast
Lies mal "For Developers" unter dem Codan/CDT link den ich geposted habe:

http://wiki.eclipse.org/CDT/designs/StaticAnalysis hat gesagt.:
API
API would contain:

[...]
Programmatic access to a launch the analysis
[...]
 

Marco13

Top Contributor
Eclipse-CDT lässt die Infos sehr gut anzeigen, wird bei uns leider nicht eingesetzt. Kann man auf diese features von einem java Programm zugreifen? Einfach H und C Files vom C-Project einlesen und analysieren?

Wie man's nimmt. Ich mußte/wollte auch für ein Projekt C-Header analysieren. Da hab' ich einfach die entsprechenden CDT-JARs genommen und ganz normal eingebunden. Solange das Lizenztechnisch in Ordnung ist, spricht da nichts dagegen. Jedenfalls kann man damit dann den Code einlesen. Ich mußte da zwar Klassen verwenden, die eigentlich nicht zur öffentlichen API der JARs gehören, aber das war nur sehr lokal, nur zum Einlesen selbst. Je nach Komplexität könnte es mit
Code:
#ifdef WIN32
    #include "win32.h"
#else
    #include "chaOS.h"
#endif
& Co aber auch komplizierter werden.
 

alex_rs6

Mitglied
Da hab' ich einfach die entsprechenden CDT-JARs genommen und ganz normal eingebunden. Solange das Lizenztechnisch in Ordnung ist, spricht da nichts dagegen. Jedenfalls kann man damit dann den Code einlesen.

In Eclipse-CDT unter "Outline" sehe ich zu dem ausgewählten Modul alle zugehörigen Includes, Definitionen, Variablen und Funktionen. Kann ich auf diese "Outline" Funktion außerhalb Eclipse-CDT zugreifen?
Welche JARs von CDT muss ich dann in Eclipse-SDK einbinden? Wie soll dabei das C-Proect eingelesen werden? Einfach Pfad-Übergabe?

Danke

Gruß
 

Marco13

Top Contributor
Na, das klingt als meintest du eine hochkomplexe GUI-Component. Ich habe immernoch das Gefühl, dass du die Komplexität der Sprache bzw. eines geparsten ASTs unterschätzt. Ich weiß aber nicht, ob es im Dunstkreis des von fassy verlinkten noch Bibliotheken gibt, die näher an dem sind, was du eigentlich brauchst. Ich hatte jedenfalls
org.eclipse.cdt.core_...jar
org.eclipse.cdt.core.resources_...jar
org.eclipse.equinox.common_...jar
eingebunden, und dann mit so einem (kommentarfreien :oops: ) Ding hier eine IASTTranslationUnit aus dem Code einer einzelnen Header-Datei erstellt:
Java:
package de.javagl.code.translation;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;

import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
import org.eclipse.cdt.core.dom.ast.gnu.cpp.GPPLanguage;
import org.eclipse.cdt.core.index.IIndexFileLocation;
import org.eclipse.cdt.core.parser.DefaultLogService;
import org.eclipse.cdt.core.parser.FileContent;
import org.eclipse.cdt.core.parser.IParserLogService;
import org.eclipse.cdt.core.parser.IScannerInfo;
import org.eclipse.cdt.core.parser.IncludeFileContentProvider;
import org.eclipse.cdt.core.parser.ScannerInfo;
import org.eclipse.cdt.internal.core.parser.scanner.InternalFileContent;
import org.eclipse.cdt.internal.core.parser.scanner.InternalFileContentProvider;
import org.eclipse.core.runtime.CoreException;



class TranslationUnitCreator
{
    // TODO: Included files have to be "inlined" into the source
    // code, because otherwise the comment indexing produces
    // great mess. The combined source code has to be written
    // to a temp file, whose path is given instead of this: 
    private static final String COMBINED_FILE_PATH = "";
    
    private static class LocalIncludeFileContentProvider extends InternalFileContentProvider
    {
        @Override
        public InternalFileContent getContentForInclusion(String path)
        {
            if (!getInclusionExists(path))
            {
                return null;
            }
            String code = readFileAsString(path);
            FileContent fileContent = FileContent.create(path, code.toCharArray());
            return (InternalFileContent)fileContent;
        }

        @Override
        public InternalFileContent getContentForInclusion(IIndexFileLocation indexedFileLocation, String astPath)
        {
            // Seems to be not used anyhow...
            return (InternalFileContent)FileContent.create(indexedFileLocation);
        }
    }

    public static IASTTranslationUnit createTranslationUnit(String code, String... includePaths) throws CoreException 
    {
        Map<String, String> definedSymbols = new HashMap<String, String>();
        IScannerInfo scannerInfo = new ScannerInfo(definedSymbols, includePaths);

        IncludeFileContentProvider includeFileContentProvider = 
        	new LocalIncludeFileContentProvider();

        FileContent fileContent = FileContent.create(COMBINED_FILE_PATH, code.toCharArray());
        IParserLogService parserLogService = new DefaultLogService();
        
        IASTTranslationUnit translationUnit = 
            GPPLanguage.getDefault().getASTTranslationUnit(
                fileContent, scannerInfo, includeFileContentProvider, 
                null, 0, parserLogService);

        return translationUnit;
    }

    /**
     * Read the contents of the file with the given name, and return it as a
     * String
     * 
     * @param filename The name of the file
     * @return The contents of the file
     * @throws RuntimeException If the file could not be read
     */
    public static String readFileAsString(String filename)
    {
        BufferedReader br = null;
        try
        {
            br = new BufferedReader(new InputStreamReader(new FileInputStream(filename)));
            StringBuilder sb = new StringBuilder();
            String line = null;
            while (true)
            {
                line = br.readLine();
                if (line == null)
                {
                    break;
                }
                sb.append(line + "\n");
            }
            return sb.toString();
        }
        catch (FileNotFoundException e)
        {
            e.printStackTrace();
            throw new RuntimeException("File not found " + filename, e);
        }
        catch (IOException e)
        {
            e.printStackTrace();
            throw new RuntimeException("Error while reading file " + filename, e);
        }
        finally
        {
            if (br != null)
            {
                try
                {
                    br.close();
                }
                catch (IOException ex)
                {}
            }
        }
    }

}

Das ist sicher noch recht weit weg, von dem, was du brauchst, und nochmal: Es ist gut möglich, dass es irgendwo eine Lib gibt, mit der man sehr viel einfacher an die Informationen kommt, die man sich damit selbst aus der IASTTranslationUnit lutschen muss, aber ... falls du es drauf ankommen lassen willst, ist das vielleicht ein Ansatz... Ich hatte das wirklich nur als ganz isoliertes Utility gebraucht, das einen Header in eine IASTTranslationUnit übersetzt.
 

alex_rs6

Mitglied
Hallo Marco13,

danke für deine Antworten. Ich denke, ich werde mir die Classe für das Suchen und Sortieren der Variablen und Funktionen selbst schreiben. Das muss nicht zu komplex sein. Vielleicht nicht so zeitoptimiert, wir arbeiten aber mit kleinen Projekten.

Noch mal Danke.

Gruß
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Gibt es eigentlich Java Source Code Interpreter..? Allgemeine Java-Themen 13
S Programm das automatisch ungenutzten Source-Code entfernt..? Allgemeine Java-Themen 4
D Source Code anschauen Allgemeine Java-Themen 6
S java source code Allgemeine Java-Themen 5
hdi Source Code von Sun's Java Klassen Allgemeine Java-Themen 11
S einfachen editor für source code Allgemeine Java-Themen 13
S java source code Allgemeine Java-Themen 7
P Source code verloren habe nur noch kompilierte .jar. Allgemeine Java-Themen 12
? jar-Datei to Source-Code? Allgemeine Java-Themen 16
M Source Code schützen Allgemeine Java-Themen 5
S Änderungen im Source-Code direkt verwenden können? Allgemeine Java-Themen 3
E Source-Code aus einer Textdatei kompilieren und ausführen Allgemeine Java-Themen 4
I Source Code Auswertung - organize imports Allgemeine Java-Themen 2
D Open Source Library zum erstellen von PDFs Allgemeine Java-Themen 1
G Licence-Header für InHouse entwickelten Source Allgemeine Java-Themen 8
S Class File Editor -> Source not found Allgemeine Java-Themen 4
T Stacktrace zeigt ...(Unknown Source) Allgemeine Java-Themen 10
H Quelltext / Source aus jar Datei rekonstruieren Allgemeine Java-Themen 1
F Open source file übersetzen Phython -> Java Allgemeine Java-Themen 4
M Source / Binaries plus Bugtracking auf Klassenebene Allgemeine Java-Themen 1
M Open Source Projekte => wo herunterladen? Allgemeine Java-Themen 2
M Open Source Projekte / source - binaries Allgemeine Java-Themen 13
A Methoden Generische Methode mit Arrays - Source Compatibility 1.7 benötigt, wieso? Allgemeine Java-Themen 3
E NetBeans warning: [options] bootstrap class path not set in conjunction with -source 1.6 Allgemeine Java-Themen 4
B Eclipse Attache source to own jar-files Allgemeine Java-Themen 2
P Java Probleme - java.lang.Thread.run(Unkown Source) Allgemeine Java-Themen 10
J Compiler-Fehler Unknown Source? Allgemeine Java-Themen 4
M NOA an den Source Text des Dokumentes kommen Allgemeine Java-Themen 7
E eclipse debugger - Source not found? Allgemeine Java-Themen 1
J Open Source Projekt anbieten - Leitfaden gesucht Allgemeine Java-Themen 3
N jar 2 source converter Allgemeine Java-Themen 2
aze Source Folder bestimmen Allgemeine Java-Themen 2
N C source to Java Source -> compile java layer? Allgemeine Java-Themen 9
V Source zu Javamail? Allgemeine Java-Themen 2
T JAR mit embedded Source/JavaDoc? Allgemeine Java-Themen 8
E javax.comm: Suche eine open source Alternative zu rxtx Allgemeine Java-Themen 8
musiKk Source der Java API? Allgemeine Java-Themen 2
Y Open Source Plattformen Allgemeine Java-Themen 4
F "source not found" in eigenem Projekt mit eigenen Allgemeine Java-Themen 2
T User-Kennung im Source hinterlegen? Allgemeine Java-Themen 4
I Was ist ein binray / source Build ? Allgemeine Java-Themen 3
G Brauche hilfe bei JMF: Wie eigene Streaming Data Source! Allgemeine Java-Themen 4
A Source-Management bei Kunden-Anpassungen Allgemeine Java-Themen 5
L Open Source Projekt Allgemeine Java-Themen 7
L Alle Attribute eines Source-Files auslesen Allgemeine Java-Themen 2
M Source von Java Klassen Allgemeine Java-Themen 2
E Closed Source Programm schuetzen Allgemeine Java-Themen 11
G Exceptions ohne Zeilennummer (Unknown Source) Allgemeine Java-Themen 8
M Unsicher, ob das Code richtig ist Allgemeine Java-Themen 4
MarvinsDepression Unbekanntes Zeichen in fremden Code wirft Fragen auf Allgemeine Java-Themen 4
schemil053 Methoden Code-Verbesserung Allgemeine Java-Themen 2
D Webarchive (war): Code verschleiern Allgemeine Java-Themen 7
D Compiler-Fehler child process exited with code 1 Allgemeine Java-Themen 1
Queenman Interface Mein Microsoft Visual Studio Code zeigt komische Dinge & Menüs an Allgemeine Java-Themen 9
A Clean Code: Variable vs. Methode Allgemeine Java-Themen 8
berserkerdq2 Versteht jemand, was diese beiden Zahlen bei dem IJVM Code zu bedeuten haben? Allgemeine Java-Themen 10
OnDemand Releaseversion Tag in Code Allgemeine Java-Themen 5
ERlK JDA Code funktioniert nicht? Allgemeine Java-Themen 4
F Code auslagern Allgemeine Java-Themen 5
D VBA Code mit Java ausführen möglich? Allgemeine Java-Themen 10
N JAVA-Code mit Grafikfenster zeichnet in Windows, aber nicht Mac. Allgemeine Java-Themen 4
JordenJost Unverständlicher Java code? Allgemeine Java-Themen 21
V Hilfe mit Java Code Allgemeine Java-Themen 4
S Processing Java Code verstehen Allgemeine Java-Themen 4
A code wird nicht ausgeführt Allgemeine Java-Themen 3
B Bitte um Code Erklärung Allgemeine Java-Themen 5
N nicht einsehbarer Fehler im code, kann nicht mehr übersetzten Allgemeine Java-Themen 51
N Regulären Ausdruck in normalen Java-Code umwandeln Allgemeine Java-Themen 12
OnDemand Clean Code oder Allgemeine Java-Themen 5
Noahscript Aus einem byte Array Steuerungszeichen und Code bekommen und ersetzen Allgemeine Java-Themen 3
J Simple Date Format Alternativen bitte um Code Allgemeine Java-Themen 14
AGW in Java-Code plötzlich ein paar Wörter in Rot Allgemeine Java-Themen 2
L Best Practice Auslagerung von Code = Performance Optimierung? Allgemeine Java-Themen 4
H Precompilierten code ansehen Allgemeine Java-Themen 3
R Wo müsste ich im Code eine Änderung vornehmen? Allgemeine Java-Themen 6
L Ausgabe von in Echtzeit ausgeführten Code Allgemeine Java-Themen 9
Drachenbauer Wie kann ich die menge an code reduzieren? Allgemeine Java-Themen 28
Thallius Warum ist dieser Code OS abhängig? Allgemeine Java-Themen 10
S Code Erklärung Allgemeine Java-Themen 21
B Pausem im Code Allgemeine Java-Themen 2
T Java-Quiz Code Fehler Allgemeine Java-Themen 10
L Eclipse Java Code ausführen Allgemeine Java-Themen 18
F Java Code ausführen direkt nach Anmelden in Windows Allgemeine Java-Themen 2
F Code in Klassen bringen Allgemeine Java-Themen 4
J JUnit - Auslassen von Code Allgemeine Java-Themen 25
F Klassen Spaghetti Code Vermeidung Allgemeine Java-Themen 16
C code oder Bibliotheken für 2-Center Problem Allgemeine Java-Themen 4
J Code Page characters darstellen Allgemeine Java-Themen 12
J wie sollte man sinnvoll seinen Code aufteilen Allgemeine Java-Themen 6
I Python Code in Java Code Allgemeine Java-Themen 9
M Java (GUI) Code verdoppeln oder anzeige mehrmals anzeigen? Allgemeine Java-Themen 8
N Wie öffne ich einen runtergeladadenen Code in IntelliJ Allgemeine Java-Themen 3
R Fehler im Code Allgemeine Java-Themen 1
R Fehler im Code Allgemeine Java-Themen 3
O Standard library nativer C code Allgemeine Java-Themen 1
R Wo ist mein Fehler in diesem Code Allgemeine Java-Themen 7
S Java Editor Bekomme bei der Code-Vervollständigung die Zeichen &#8203; Allgemeine Java-Themen 3
N Morse Code decoder Allgemeine Java-Themen 9
O Erste Schritte Benzinverbrauch Code Hilfe Allgemeine Java-Themen 3
S Eclipse exit code 805306369 Allgemeine Java-Themen 1

Ähnliche Java Themen

Neue Themen


Oben