12 Stimmen

Techniken und Werkzeuge für die Fehlersuche bei Problemen auf entfernten Rechnern?

Benutzer haben über Probleme/Crashs/Fehler berichtet, die ich auf meinem Rechner nicht reproduzieren kann. Ich finde es schwierig, diese Probleme zu beheben.

Ich habe begonnen, EurekaLog (fantastisch!) und SmartInspect zu verwenden. Diese beiden Tools haben mir sehr geholfen, aber ich finde es immer noch schwierig, einige Probleme zu erkennen.

Ich habe gerade gekauft Fehlersuche von David Agans (und wartet darauf, dass sie ankommt).

Gibt es noch andere Delphi-spezifische Tools oder Techniken, die bei der Erkennung dieser schwer zu findenden Remote-Probleme helfen? Die Arten von Problemen, bei denen ich Schwierigkeiten habe, sie aufzuspüren, sind diejenigen, die keine Ausnahmen auslösen oder eine klare Ursache haben. EurekaLog fängt Ausnahmen ab und SmartInspect ist ziemlich gut, sobald ich eine Theorie zum Überprüfen habe. Aber in einigen Fällen handelt es sich um einen scheinbar zufälligen Absturz, und es gibt mehrere tausend Codezeilen, die möglicherweise die Ursache sind. Wie lässt sich die Ursache eingrenzen?

12voto

Warren P Punkte 61510

MadExcept verwende ich, und es ist fabelhaft. Ich habe auch EurekaLog verwendet und finde die Funktionalität fast genau identisch, außer dass ich mehr Erfahrung und Zeit mit MadExcept habe. Aktualisierung: MadExcept 4 ist jetzt verfügbar und unterstützt sogar 64-Bit-Delphi XE2-Anwendungen und verfügt über Memory-Leak-Checking.

Wenn nichts schiefgeht, verlasse ich mich auf eine intensive Nutzung der Trace-Protokollierung. Ich habe eine TraceMessage(integer,string)-Funktion, die ich in allen meinen Anwendungen aufrufe, und wenn jemand Probleme hat, bringe ich ihn dazu, auf einen Menüpunkt zu klicken, der die Debug-Trace-Stufe auf die ausführlichste Stufe hochschaltet; so erhalte ich eine vollständige Historie von allem, was meine Anwendung getan hat, und das hat mir noch mehr als madExcept geholfen, Probleme bei Kunden zu lösen. Kunden erhalten einen Absturz, und der von madexcept gesendete Absturzbericht enthält eine (von meiner Anwendung erstellte) Protokolldatei, die automatisch angehängt wird. Ich glaube, dass man das genauso gut mit madExcept und EurekaLog machen kann. Wenn Sie ein Logging-System benötigen, können Sie Log4D herunterladen, oder Sie können Ihr eigenes schreiben, es ist ziemlich einfach.

Für immer-frei, versuchen JclDebug, die mehr Arbeit erfordert, um einzurichten, aber das hat fabelhaft für mich gearbeitet, auch.

Für Hilfe bei Heap-Problemen, erfahren Sie mehr über die Debug-Optionen von fastMM (Vollversion).

Und Sie sollten nicht vergessen, dass Delphi selbst Remote-Debugging unterstützt. Wenn Sie einen Absturz auf Rechnern in Ihrem Büro reproduzieren können, auf denen Delphi nicht installiert ist, verwenden Sie Remote-Debugging über das Büronetzwerk, anstatt eine komplette RAD Studio-Installation auf dem anderen Rechner in Ihrem Büro zu installieren. Sie könnten auch Remote Debug verwenden, um sich über das Internet mit einem Client-PC zu verbinden, aber ich habe Remote Debug noch nicht über das Internet ausprobiert, daher kann ich nicht sagen, ob es über das Internet gut funktioniert oder nicht. Ich weiß, dass Remote-Debugging über das Internet auf einem Client-PC mehr Arbeit bedeutet, da es die automatische Bereitstellung der von Ihnen erstellten EXE-Datei nicht unterstützt (diesen Teil müssen Sie selbst erledigen).

Sie können auch viele Ihrer Probleme finden, indem Sie alle Hinweise und Warnungen korrigieren und dann mit CodeHealer oder Pascal Analyzer (PAL) von Peganza durchgehen. Diese statischen Analysewerkzeuge können Ihnen helfen, echte Codeprobleme zu finden.

Wenn Sie Probleme mit der Leistung und dem Speicherverbrauch haben, sollten Sie sich die Vollversion von AQTime besorgen und damit Ihr System profilieren und beobachten. Es wird Ihnen helfen, Ihre Speicherlecks zu beheben und das Laufzeitverhalten und die Speichernutzung Ihrer Anwendung zu verstehen, nicht nur Lecks, sondern auch Engpässe bei der Speicher- und CPU-Nutzung. Einige dieser Engpässe können auch die Ursache für einige seltsame Probleme sein. Ich habe AQTime sogar benutzt, um Deadlocks zu finden, da es Ausführungsspuren generieren kann, die mir helfen, herauszufinden, welcher Code läuft, und Deadlocks zu lokalisieren. Aktualisierung: AQTime kann nicht auf anderen Rechnern als Ihrem Hauptentwicklungsrechner installiert werden, ohne die neu geänderten Lizenzbedingungen für AQTime zu verletzen. In der guten alten Zeit waren diese Bedingungen nie so restriktiv.

Wenn Sie genauere Angaben zu Ihren Problemen machen würden, könnten Ihnen andere sicher noch weitere Ideen geben, die spezifisch sind, aber alle oben genannten Techniken haben sich bei mir bewährt.

7voto

Eine der besten Möglichkeiten ist die Verwendung des Remote-Debuggers, der mit Delphi geliefert wird, so dass Sie die Anwendung, die auf dem entfernten Rechner läuft, direkt debuggen können. Der Remote-Debugger ist in einigen Delphi-Versionen etwas fehlerhaft und man muss die Anweisungen sorgfältig befolgen, um ihn zum Laufen zu bringen, aber wenn man ihn braucht, ist er ein empfehlenswertes Werkzeug. Prüfen Sie auch, ob Updates für Ihre Version verfügbar sind, sie könnten in einem separaten Installationsprogramm für den Einsatz auf "entfernten" Systemen enthalten sein. Andernfalls installieren Sie zuerst den Remote-Debugger und prüfen Sie dann, ob die installierten Dateien in Ihrer lokalen Installation neuere Versionen haben, und kopieren Sie diese auf den Remote-Rechner.

6voto

Uwe Raabe Punkte 41879

CodeSite hat mir in diesen Situationen sehr geholfen. Seit XE ist es mit Delphi gebündelt.

4voto

Arnaud Bouchez Punkte 41521

Die Protokollierung ist in dieser Angelegenheit der Schlüssel.

Werfen Sie einen Blick auf unser TSynLog Klasse verfügbar in unserem Open-Source-Bibliothek SynCommons .

Es verfügt über die JCL-Debug-/MadExcept-Funktionen mit einigen zusätzlichen (wie kundenseitige Profilerstellung und Protokollierung):

  • Protokollierung mit einer Reihe von Ebenen;
  • schnell, geringer Ausführungsaufwand;
  • kann .map-Dateisymbole laden, die für die Protokollierung verwendet werden;
  • Komprimierung von .map in binäre .mab (900 KB -> 70 KB);
  • Einbindung der .map/.mab in die .exe;
  • Lesen einer externen .map, um die Namen der Einheiten und Zeilennummern zu einer Protokolldatei hinzuzufügen, ohne dass .map-Informationen bei der Ausführung verfügbar sind;
  • Ausnahmeprotokollierung (Delphi oder Low-Level-Ausnahmen) mit Namen der Einheiten und Zeilennummern ;
  • optional Stapelverfolgung mit Einheiten und Zeilennummern;
  • Methoden oder Verfahren rekursive Verfolgung mit Enter und auto-Leave über Schnittstellen;
  • hochauflösende Zeitstempel, für kundenseitiges Profiling der Ausführung der Anwendung;
  • set / enumerates / TList / TPersistent / TObjectList / TContainer / dynamic array JSON serialization;
  • Pro-Thread oder globale Protokollierung;
  • mehrere Protokolldateien für denselben Prozess;
  • integrierte Protokollarchivierung (im Zip- oder einem anderen Format);
  • Offene Quelle , arbeitet von Delphi 5 bis XE .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X