Forum: Compiler & IDEs c++ Code-Analyse Programm


von Georg W. (georg1010)


Lesenswert?

Schönen Nachmittag,
kennt jemand ein Code Analyse Programm, das mir anzeigt (noch besser: 
übersichtlich darstellt - z. B. tabelarisch), in welchen Funktionen 
eines Programms eine globale Variable abgefragt oder geändert wird?

Grüße
georg1010

von Programmierer (Gast)


Lesenswert?

Lösche die Variable aus dem Code, und der Compiler wird es dir sagen.
Am besten wird sie nirgends genutzt, denn globale Variablen sind böse.

von if [ "$a" \< "$b" ] (Gast)


Lesenswert?

Fragment ohne grosses Nachdenken:


find . -name\*.c -exec grep -lo [name_derboesen_globalen_variable]

https://stackoverflow.com/questions/21763904/linux-find-and-grep-command-together

von Programmierer (Gast)


Lesenswert?

if [ "$a" \< "$b" ] schrieb:
> Fragment ohne grosses Nachdenken:

Das Problem dabei ist dass die Variable auch über ein Makro zugegriffen 
werden könnte, welches den Namen zusammensetzt. Dann findet man das so 
nicht. Außerdem könnte es sein dass die Variable eine Klasse mit 
Konstruktor ist, welcher die Instanz irgendwo registriert, sodass der 
Name der Variablen nirgends auftauchen muss, sie aber dennoch 
zugegriffen wird. Deswegen sollte man so etwas gar nicht erst schreiben 
:-)

von Georg W. (georg1010)


Lesenswert?

Programmierer schrieb:
> Lösche die Variable aus dem Code, und der Compiler wird es dir sagen.
> Am besten wird sie nirgends genutzt, denn globale Variablen sind böse.

Danke dir für diesen Input.
Er hilft mir nur 0 (in Worten: null) weiter.
Grüße

von Programmierer (Gast)


Lesenswert?

Georg W. schrieb:
> Er hilft mir nur 0 (in Worten: null) weiter.

Danke für die präzise Angabe. Die hilft uns super weiter! Gut dass es 
nicht 0.1 (Nullkommaeins) war!

Der Compiler ist das verlässlichste Tool für so etwas. Alle anderen 
Analyse-Tools könnten ggf. durch eventuelle Schweinereien wie Makros 
nicht durchblicken.

von Vincent H. (vinci)


Lesenswert?

Wie wärs mit einer IDE?
Das von dir gesuchte Feature sollte so ziemlich jede IDE seit 1995 
unterstützen...

von Blume (Gast)


Lesenswert?

con SciTools gibt es:

das Tool "Understand" : Visualize Your Code

hab zwar noch nie damit gerarbeitet aber wer weis. Villeicht hilft es 
dir um deinen Code zu verstehen.

Ich bin mit Clion und der Suche nach Refrenzen sehr zufrieden um die 
gewünnschte Aufgabe zu erledigen.

von Der Dünne (Gast)


Lesenswert?

Georg W. schrieb:
> Schönen Nachmittag,
> kennt jemand ein Code Analyse Programm, das mir anzeigt (noch besser:
> übersichtlich darstellt - z. B. tabelarisch), in welchen Funktionen
> eines Programms eine globale Variable abgefragt oder geändert wird?

Schau dir das .map file an um globale Variablen zu finden. Dann schaue 
in den einzelnen .o files, ob sie ein externes Symbol mit diesem Namen 
referenzieren. Dann grep'pe im Code der entsprechenden Quelldatei.

Alternativ kann man das sicherlich auch mit einem GCC/Clang Plugin 
loesen.

von Hans-Georg L. (h-g-l)


Lesenswert?

Ich mach das mit Notepad ++  suchen in Files

von Sven B. (scummos)


Lesenswert?

Georg W. schrieb:
> Programmierer schrieb:
>> Lösche die Variable aus dem Code, und der Compiler wird es dir sagen.
>> Am besten wird sie nirgends genutzt, denn globale Variablen sind böse.
>
> Danke dir für diesen Input.
> Er hilft mir nur 0 (in Worten: null) weiter.
> Grüße

Ist aber der einzig brauchbare Vorschlag, denn nur der liefert 
zuverlässige Ergebnisse. Das nächstbeste wäre irgendwelches 
clang-Tooling, was in diversen IDEs verbaut ist, mit "Find Uses" o.ä.

Ich weiß auch nicht, was du mit dem Vorschlag für ein Problem hast? Die 
Tatsache, dass du einen Forums-Thread erstellen musst, um zu fragen wie 
du überhaupt rausfinden könntest, wo dein Programm auf deine Daten 
zugreift, zeigt dass das mal refactort werden sollte. Also tu das und 
finde am Schluss die fehlenden Stellen durch Löschen der Variable.

von Rolf M. (rmagnus)


Angehängte Dateien:

Lesenswert?

Einfach Doygen drüberlaufen lassen. Mit den richtigen Einstellungen im 
Doxyfile gibt dir das für alle Elemente aus, von wo sie überall 
referenziert werden.

Für folgenden Code sieht das z.B. wie im Anhang aus:
1
#include <iostream>
2
3
int globalvar;
4
5
#define MYGLOBAL globalvar
6
7
void anderefunktion()
8
{
9
    std::cout << globalvar << '\n';
10
}
11
12
int main()
13
{
14
    MYGLOBAL = 5;
15
    anderefunktion();
16
}

von Irgend W. (Firma: egal) (irgendwer)


Lesenswert?

Sven B. schrieb:
> Georg W. schrieb:
>> Programmierer schrieb:
>>> Lösche die Variable aus dem Code, und der Compiler wird es dir sagen.
>>> Am besten wird sie nirgends genutzt, denn globale Variablen sind böse.
>>
>> Danke dir für diesen Input.
>> Er hilft mir nur 0 (in Worten: null) weiter.
>> Grüße
>
> Ist aber der einzig brauchbare Vorschlag, denn nur der liefert
> zuverlässige Ergebnisse...
> ...Also tu das und
> finde am Schluss die fehlenden Stellen durch Löschen der Variable.

Es gibt dazu auch noch den"mittelgroßen Holzhammer" in dem man die 
Variable nicht löscht sondern nur umbenennt. Der Effekt ist erstmal der 
selbe, nur das man am ende wenn alle Stellen umbenannt sind genau weiß 
wo diese waren und das Programm noch genauso funktioniert wie vorher.
Das ist halt die Strafe dafür wenn man Globale Variablen benutzt und 
diese auch noch mit Makros unkenntlich macht

von A. S. (Gast)


Lesenswert?

Irgend W. schrieb:
> Das ist halt die Strafe dafür wenn man Globale Variablen benutzt und
> diese auch noch mit Makros unkenntlich macht

Naja, global wäre sie auch, wenn ich das hinter getter und setter 
Verstecke.

Die Probleme sind eher, wenn die IDE die gleichen Namen alle nicht mehr 
unterscheiden kann, weil tausend namespaces explizit und implizit 
herangezogen werden oder alle Klassen ein doit und x,y und z haben. Eine 
globale Variable mit eindeutigen Namen ist dagegen oft ein Fels in der 
Brandung, wenn man nicht Sabotage (per define etc) betreibt.

Wenn man const sonst richtig und konsequent verwendet, kann man 
Schreibzugriffe auch durch hinzufügen von const finden.

von Mate Rigo (Gast)


Lesenswert?

https://www.sourcetrail.com/
Das ist genau was du brauchst.

von Max (Gast)


Lesenswert?

Linker map-Datei zeigt es.

von Georg W. (georg1010)


Lesenswert?

Mate Rigo schrieb:
> https://www.sourcetrail.com/
> Das ist genau was du brauchst.

Danke dir. Das sieht ja gut aus.

von Mark B. (markbrandis)


Lesenswert?

Irgend W. schrieb:
> Das ist halt die Strafe dafür wenn man Globale Variablen benutzt und
> diese auch noch mit Makros unkenntlich macht

Davon hat der Themenersteller freilich nichts geschrieben.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.