Ich habe mich gefragt, welche Techniken es gibt, um herauszufinden, welcher Code eine bestimmte Funktion in einer Desktop-Anwendung implementiert.
Ich bin ein Junior-Entwickler, der nur über professionelle Programmiererfahrung im Bereich Web-Programmierung verfügt. Im Web ist das einfacher. Sie "inspizieren" beispielsweise eine Schaltfläche mit den Browser-Tools und können sehen, was getan wird, wenn Sie darauf klicken. Vorausgesetzt, Sie haben den vollständigen Quellcode, können Sie die Hierarchie der Aufrufe aufschlüsseln.
Aber wie macht man das in Desktop-Anwendungen? Zumindest ohne in die volle Codebasis eintauchen zu müssen?
debugging
desktop-application
py_script
quelle
quelle
Antworten:
Rückverfolgung
Bei der Rückverfolgung wird ein Endpunkt zu einem Ereignis gesucht, das mit der Funktion verknüpft ist (siehe unten). Dort wird ein Haltepunkt in den Debugger eingefügt. Die Funktion wird ausgelöst und wenn der Debugger stoppt. Der Aufrufstapel wird überprüft, um den Aufrufpfad zurückzuverfolgen. Während Sie den Call-Stack hinaufgehen, können Sie sich Notizen zu variablen Zuständen machen oder neue Haltepunkte setzen, um das Ereignis erneut zu untersuchen.
Die Funktion wird erneut ausgelöst und der Debugger stoppt an den neuen Haltepunkten. Sie können dann die Rückverfolgung wiederholen oder die Vorwärtsverfolgung durchführen, bis das Ziel gefunden wurde.
Für und Wider
Endpunkterkennung
Um ein Feature zu debuggen, muss man wissen, wo im Quellcode das endgültige Ziel erreicht wird. Nur von diesem Punkt aus können Sie zurückverfolgen, um zu sehen, wie der Code dorthin gelangt ist . Ein Beispiel; Um zu verstehen, wie das Rückgängigmachen ausgeführt wird. Sie wissen, wo im Code Dinge rückgängig gemacht werden, aber Sie wissen nicht, wie die Dinge dahin kommen . Dies wäre ein Kandidat für das Zurückverfolgen, um herauszufinden, wie die Funktion funktioniert.
Vorwärtsverfolgung
Die Vorwärtsverfolgung lokalisiert einen Startpunkt für ein Ereignis, das mit einer Funktion verknüpft ist (siehe unten). Dort werden Protokollmeldungen in den Quellcode eingefügt oder Haltepunkte gesetzt. Dieser Vorgang wird wiederholt, wenn Sie sich weiter vom Startpunkt entfernen , bis Sie das Ziel für das Feature gefunden haben.
Für und Wider
Starten Sie die Punktermittlung
Sie können Schlüsselwörter, Benutzeroberflächen-IDs (Schaltflächen-IDs, Fensternamen) oder einfach zu findende Ereignis-Listener für die Funktion verwenden. Sie können beispielsweise mit der Schaltfläche beginnen, die zum Auslösen einer Rückgängig- Funktion verwendet wird.
Prozess der Eliminierung
Sie können sich dies als den Mittelpunkt im Vergleich zu den Start- und Endpunktpositionen vorstellen. Sie führen einen Prozess der Beseitigung , wenn Sie bereits ein Stück Code wissen , verwendet in einem Feature, aber es ist weder der Anfang oder das Ende des Features.
Die Richtung, die Sie vom Mittelpunkt aus einschlagen, hängt von der Anzahl der Ein- und Ausgänge ab. Wenn der Codeabschnitt an vielen Stellen verwendet wird, kann das Zurückverfolgen von dieser Position aus sehr zeitaufwändig sein, da alle überprüft werden müssen. Anschließend verwenden Sie einen Eliminierungsprozess, um diese Liste zu reduzieren. Alternativ können Sie von diesem Punkt aus eine Vorwärtsverfolgung durchführen. Wenn sich der Codeabschnitt jedoch an vielen Stellen verzweigt, kann dies ebenfalls ein Problem sein.
Sie müssen die Positionsrichtungen reduzieren, indem Sie Pfaden nicht folgen, die für das Feature eindeutig nicht ausgeführt würden. Bewegen Sie sich über diesen Code hinaus und platzieren Sie Haltepunkte nur dort, wo es wahrscheinlich mit der Funktion zusammenhängt.
Das Debuggen in der Mitte erfordert häufig erweiterte IDE-Funktionen. Die Fähigkeit, Codehierarchie und Abhängigkeiten zu sehen. Ohne diese Werkzeuge ist es schwierig zu tun.
Für und Wider
quelle
Angenommen, die Funktion ist an ein UI-Ding gebunden, wie z. B. einen Button oder ein Menü, und das, was ich normalerweise mache, folgt (sehr mühsam, aber es funktioniert). Hierbei wird der Quellcode durchsucht und kein Debugger verwendet .
SUPER_BUTTON_3 = "Super Feature X3"
. Denken Sie zum späteren Nachschlagen an diesen Dateinamen.Wie @amon bemerkte, ist manchmal ein Debugger einfacher ...
quelle
Wenn Sie einen verwandten Code finden, können Sie mit Ihrer Versionsverwaltungssoftware das gesamte Commit oder die Commits in der Nähe anzeigen, die es hinzugefügt haben. Das sollte Ihnen alles zeigen, was zur Implementierung dieser Funktion erforderlich war.
Eine einfache Möglichkeit, einen Ausgangspunkt zu finden, besteht darin, in Ihrer Codebasis nach dem Text auf der Schaltfläche zu suchen.
Häufig fügen die Benutzer in ihren Commit-Nachrichten eine Issue-ID aus ihrem Issue-Tracker ein. Wenn Sie ein Problem finden, das die Funktionsanforderung beschreibt, können Sie nach Commits mit dieser Problem-ID suchen.
quelle