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
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.
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
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 :-)
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
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.
Wie wärs mit einer IDE? Das von dir gesuchte Feature sollte so ziemlich jede IDE seit 1995 unterstützen...
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.
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.
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.
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 | }
|
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
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.
Mate Rigo schrieb: > https://www.sourcetrail.com/ > Das ist genau was du brauchst. Danke dir. Das sieht ja gut aus.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.