Seite 1 von 2
Suchen von unbenutzen Variablen im Source?
Verfasst: 19.12.2007 14:02
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)
Verfasst: 19.12.2007 14:18
von RSBasic
@Kurzer
PureBasic IDE - Menü > Werkzeuge > Variablenliste
Da kannst du alle Variablen, Arrays, LinkedLists etc. anzeigen lassen.
Verfasst: 19.12.2007 14:54
von Kiffi
@RSBasic
das meint Kurzer nicht.
Minicode:
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
Verfasst: 19.12.2007 14:59
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ß

)
Verfasst: 19.12.2007 15:14
von RSBasic
@Kiffi
Achso, sorry für die falsche Antwort^^, ich war mir sowieso nicht so ganz sicher, was Kurzer genau meint.
Verfasst: 19.12.2007 15:22
von Scarabol
Hi,
ich sach mal schreib dir selbst eins...
bzw. Ich versuch mal gerad sowas zu bauen...
Gruß
Scarabol
Verfasst: 19.12.2007 15:31
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

Verfasst: 19.12.2007 15:39
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.
Verfasst: 19.12.2007 15:58
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
Verfasst: 19.12.2007 16:01
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.
Zugegeben eine blöde Idee, aber du brauchst dafür auch nur eine Laufzeit
von O(n), wobei n die Anzahl deklarierter Variablen ist.