Suchen von unbenutzen Variablen im Source?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Suchen von unbenutzen Variablen im Source?

Beitrag von Kurzer »

Hallo zusammen,

kennt jemand ein tool, mit dem ich mir definierte, aber niemals benutzte Variablen, Arrays, Listen usw. in einem Sourcecode anzeigen lassen kann?
Oder kann das PB schon selbst?

__________________________________________________
Dieser Thread wurde in den Anfänger-Bereich verschoben
(RSBasic)
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.12 x64, OS: Win 11 24H2 x64, Desktopscaling: 150%, CPU: I7 12700 H, RAM: 32 GB, GPU: Intel(R) Iris(R) Xe Graphics | NVIDIA GeForce RTX 3070
Useralter in 2025: 57 Jahre.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag von RSBasic »

@Kurzer
PureBasic IDE - Menü > Werkzeuge > Variablenliste
Da kannst du alle Variablen, Arrays, LinkedLists etc. anzeigen lassen.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

@RSBasic

das meint Kurzer nicht.

Minicode:

Code: Alles auswählen

Define Var1.l
Define Var2.l

Var1 = 123
Debug Var1
nun soll das Tool ausgeben, dass Var2 zwar deklariert,
aber nicht benutzt wird.

@Kurzer: Solch ein Tool ist mir leider nicht bekannt.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Beitrag von Kurzer »

Ja, diese Liste kenne ich auch, aber Sie zeigt mir nicht an welche Variablen ich definiert bzw. globalisiert habe, aber letzendlich doch nicht im Source benutze.

Ich habe mich vermutlich mißverständlich ausgedrückt. :-)
Ich habe einen größren Source, an dem ich einige Dinge umbaue. Da ich mit EnableExplizit arbeite, habe ich jede Variable am Beginn des Main-files definiert bzw. globalisiert.
Nun kann es aber sein, daß einige der Variablen durch die Umbauarbeiten überflüssig geworden sind, weil sie nicht mehr benutzt werden.

Und dafür suche ich ein Tool. Eines, daß mir sagt: "Variable CountRow.l wurde definiert, aber nie benutzt."

[edit]: Jo, Kiffi kam mir zuvor... (blöd, wenn man während des Beitrag tippens mal wohin muß :) )
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.12 x64, OS: Win 11 24H2 x64, Desktopscaling: 150%, CPU: I7 12700 H, RAM: 32 GB, GPU: Intel(R) Iris(R) Xe Graphics | NVIDIA GeForce RTX 3070
Useralter in 2025: 57 Jahre.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag von RSBasic »

@Kiffi
Achso, sorry für die falsche Antwort^^, ich war mir sowieso nicht so ganz sicher, was Kurzer genau meint.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Beitrag von Scarabol »

Hi,

ich sach mal schreib dir selbst eins...

bzw. Ich versuch mal gerad sowas zu bauen...

Gruß
Scarabol
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Beitrag von Scarabol »

So hier das sollte erstmal alle definierten Variabeln auflisten:

Code: Alles auswählen

CodeFile$ = "C:\test.pb"

If ReadFile(1, CodeFile$)
  While Eof(1) = 0
    Code$+ReadString(1)+Chr(10)
  Wend
Else
  Debug "Error 1"
  End
EndIf

If Code$ = ""
  Debug "Error 2"
  End
EndIf

NewList Var.s()

Repeat
  f = FindString(LCase(Code$), "define", pos)
  If f
    e = FindString(Code$, Chr(10), pos)
    AddElement(Var())
      Var() = Mid(Code$, pos, e-f)
    pos+(e-f)+2
  EndIf
Until f = 0

ForEach Var()
  Debug Var()
Next
Gruß
Scarabol

PS:
Ich weiß das geht noch sicherer und besser, aber ich hoffe einfach mal auf Kurzer's guten Programmierstil ;-)
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Beitrag von Kurzer »

Hallo Scarabol,
danke für Deinen Codeschnipsel - aber ganz so einfach ist es natürlich nicht.
Zum einen nutze ich Includes, die auch untersucht werden müssen. Zum anderen gibt es außer "Define" auch andere Schlüsselwörter, die etwas "initialisieren", was später evtl. doch nicht genutzt wird (Global, Dim, NewList...).
Und dann gibt es noch die Spezialfälle: Z.B. "Global Test$" -> die Varaible Test$ ist globalisiert, wird aber angenommen nirgendwo benutzt. Wenn nun aber in einer Procedure mit "Protected Test$" dummerweise die gleiche Variable lokal deklariert (und auch benutzt) wird, dann muß man das beachten. Das bedeutet, daß die Globale Test$ trotzdem nicht genutzt wird.
Also nix für mal in 5 Minuten gemacht.
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.12 x64, OS: Win 11 24H2 x64, Desktopscaling: 150%, CPU: I7 12700 H, RAM: 32 GB, GPU: Intel(R) Iris(R) Xe Graphics | NVIDIA GeForce RTX 3070
Useralter in 2025: 57 Jahre.
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Beitrag von Scarabol »

Schon klar, hehe

Hier noch ein Code mit dem du OnTheFly den Text aus dem Editor von PB lesen kannst...

Code: Alles auswählen

buffer = AllocateMemory(1024)

parent = FindWindow_(0, "Purebasic")
Debug parent

child = FindWindowEx_(parent, 0, "Scintilla", 0)
Debug child

SendMessage_(child, #WM_GETTEXT, 4000, buffer)

Debug PeekS(buffer)
Gruß
Scarabol
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Sind es viele deklarierte Variablen?

Notfalls einfach eine Deklaration nach der anderen rauswerfen und schauen,
ob sich PureBasic mit EnableExplicit beim Kompilieren beschwert, dass
irgendwo etwas nicht deklariert wurde. :wink:

Zugegeben eine blöde Idee, aber du brauchst dafür auch nur eine Laufzeit
von O(n), wobei n die Anzahl deklarierter Variablen ist.
Antworten