![]() |
Programm unter Debuggerkontrolle extrem langsam
Hallo zusammen.
Delphi 12 Version 29.0.53571.9782 Wenn ich ein Programm unter Debuggerkontrolle starte so ist es extrem langsam so dass ein Entwickeln damit nichtmehr sinnvoll ist. Es ist zum Beispiel ein Testprogramm mit UI. Ohne Debugger merke ich keine Verzögerung. Mit dauert das Starten extrem lang. Wenn ich z.B. in einem Baum einen Knoten aufklappte, dann kann man zusehen wie die Objekte der Reihe nach gemalt werden. Auch bei einem Unittest-Programm mit DUnit (nicht DUnitX). Eine Projektdatei und eine unit mit einem Dummy test. Am Ende ein "RegisterTest('Dummy', TTest_Dummy.Suite);". In der UI dauert diese eine Test mehrere Sekunden. Alle Programme die probiert habe sind betroffen. In der Firma mit gleichem Delphi habe ich dieses Problem nicht. Mit ProcMon habe ich nichts gefunden, bin mir aber auch nicht sicher ob ich den richtig eingestellt habe. Wo könnte ich weiter forschen, welche Infos fehlen? |
AW: Programm unter Debuggerkontrolle extrem langsam
Virenscanner? Sonstige vermeintliche Helferlein?
|
AW: Programm unter Debuggerkontrolle extrem langsam
Hm, ich habe keinen speziellen. Habe nun bei "Einstellungen für Viren- & Bedrohungsschutz" bei "Ausschlüsse" mal das komplette Enticklungslaufwerk eingetragen. Hat nichts gebracht.
Noch etwas ist mir aufgefallen. Die erwähnte Testanwendung hat eine Möglichkeit eine Datei auszuwählen. Dazu erscheint ein Dialogfenster bei dem ich mir sicher bin, dass es das stadardmässige Windowsfenster ist. Auch dort ist das Verhalten beim Navigieren durch die Ordner extrem zäh. |
AW: Programm unter Debuggerkontrolle extrem langsam
viele Logmessages im Delphi?
|
AW: Programm unter Debuggerkontrolle extrem langsam
Du meinst bei Events? Es hat welche beim Starten der Apps. Wenn ich den unit-test starte per Maus etliche (wm_SetCursor u.ä.). Wenn ich den Test mit der Tastatur starte dann keine Events (und ist trotzdem langsam)
|
AW: Programm unter Debuggerkontrolle extrem langsam
Was passiert denn mit einem neuen Projekt, wenn du dort z.B. einfach eine Schleife in einen Buttonklick packst, die z.B. in der Caption die Schleifenvariable ausgibt. Passiert es dann auch?
Wie hoch ist dabei die CPU-Auslastung, wenn es so langsam ist? Zitat:
|
AW: Programm unter Debuggerkontrolle extrem langsam
viele oder komplexe Watchausdrücke an?
|
AW: Programm unter Debuggerkontrolle extrem langsam
@mlc42: 0
@jaenicke: Habe ein neues Projekt erzeugt, VCL Anwendung:
Delphi-Quellcode:
Ohne Debugger ist der Vorgang in knapp einer Sekunde durch, die Zahl ist kaum zu sehen, erst dann am Schluss. Mit Debugger:
unit Unit3;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TForm3 = class(TForm) Button1: TButton; Label1: TLabel; procedure Button1Click(Sender: TObject); end; var Form3: TForm3; implementation {$R *.dfm} procedure TForm3.Button1Click(Sender: TObject); begin for var i := 1 to 10000 do begin Label1.Caption := IntTostr(i); Application.ProcessMessages; end; end; end. CPU-Auslastung laut Prozessexplorer (16Kerne) Project1.exe: knapp ein 1% bds.exe: ca. 5.58 procexp64: ca. 5% dwm.exe: 0,5% Rest darunter Weitere Beobachtung: die Zahl sieht man gemütlich nach oben zählen (gefühlt 10 Schritte/s). Wenn ich mir der Maus über das Fenster fahre, dann zählt es nur nur sehr sporadisch. Auch da gibt es keine Events, auch nichts im ProcMon. |
AW: Programm unter Debuggerkontrolle extrem langsam
Das geht um Delphi 11? Könntest du vielleicht Delphi 12 (ggf. Trial) auf dem Rechner ausprobieren?
Für die Eingrenzung des Problems wäre das sehr hilfreich. Und auch wenn die CPU-Auslastung nicht darauf hindeutet, solltest du es mal mit deaktiviertem Defender probieren. |
AW: Programm unter Debuggerkontrolle extrem langsam
Zitat:
Wie kann man den Defender deaktiveren? Und wie heißt der Prozess dazu eigentlich? |
AW: Programm unter Debuggerkontrolle extrem langsam
Zitat:
|
AW: Programm unter Debuggerkontrolle extrem langsam
Zitat:
Die Frage ist nur immer, welche Verzeichnisse sollte man für die IDE ausschliessen, da bin ich immer etwas unsicher. Ich meine die Zielverzeichnisse, wo DCU, EXE usw landen, reicht das schon, oder gibt es noch andere, temporäre Verzeichnisse? |
AW: Programm unter Debuggerkontrolle extrem langsam
Leider hilft der Ausschluss bestimmter Verzeichnisse bei solchen Problemen mit einem Virenscanner nicht unbedingt. Das hilft bei Fehlerkennungen. Wenn aber der Scanner trotzdem noch bei den Dateizugriffen aktiv wird und dann lediglich den Scan für bestimmte Dateien nicht durchführt, kann es Probleme mit Dateizugriffen oder der Performance dennoch weiter geben.
|
AW: Programm unter Debuggerkontrolle extrem langsam
Drum hat Microsoft ja das DevelopDrive erfunden.
Ein Laufwerk/Verzeichnis, welches in einer virtuellen Festplatte liegt, welche Standardmäßig vom eigenen VirenScanner im LiveScan ignoriert wird. (in Bezug auf Backup/Einzeldateiwiederherstellung/Schwachsinnigdoppeltedatensicherung muß man aber mit Abstrichen rechnen) |
AW: Programm unter Debuggerkontrolle extrem langsam
Zitat:
Ich habe gesehen, dass ich eine ältere Delphiversion habe. Ich versuche demnächst mal ein Update. |
AW: Programm unter Debuggerkontrolle extrem langsam
Zitat:
![]() |
AW: Programm unter Debuggerkontrolle extrem langsam
Habe nun Embarcadero® Delphi 12 Version 29.0.53982.0329
Geholfen hat es leider nicht. |
AW: Programm unter Debuggerkontrolle extrem langsam
Diese Version ist aber auch schon 3 Monate alt ... kein Wunder, wenn da von den Unmengen an Bugreports noch nichts behoben ist. :lol:
|
AW: Programm unter Debuggerkontrolle extrem langsam
Das Problem scheint mit 64 Bit nicht aufzutreten.
Ich werde mich wohl daran machen das umzustellen. Wird recht viel Aufwand, hat noch viel asm drin. |
AW: Programm unter Debuggerkontrolle extrem langsam
Ich kenne das Problem in der anderen Richtung durch timeBeginPeriod
Vielleicht führt das ja irgendwie zu einer Begründung... ![]() |
AW: Programm unter Debuggerkontrolle extrem langsam
Sehe da nichts was ich tun kann. Einen Verwendung von Sleep sehe ich nirgendwo.
Die Umstellung auf 64-Bit ist extrem viel Aufwand. Dazu müsste ich für Ersatz von Methoden erst mal Unit-Tests machen. Was kaum geht weil - siehe oben. Kann man Delphi beim Debuggen unter 32-Bit nicht veranlassen sich auch so zu verhalten wie unter 64-Bit, also mit dieser Bridge? |
AW: Programm unter Debuggerkontrolle extrem langsam
Du kannst den Remotedebugger lokal verwenden.
|
AW: Programm unter Debuggerkontrolle extrem langsam
Was meinst Du damit. Ich habe noch nie verstanden was mit dem "Remotedebugger" gemeint ist.
Ich habe nun das Programm gestartet ohne Debug-Kontrolle und dann danach "Attach to Process..." gemacht. Das? Und da funktioniert es nun - juhu. |
AW: Programm unter Debuggerkontrolle extrem langsam
Der Remotedebugger funktioniert so, dass du auf einem Rechner diesen als Prozess startest und dann mit Delphi von einem anderen Rechner aus damit verbindest und auf dem Remoterechner aus der Ferne debuggst. Das funktioniert auch per VPN beim Kunden, wenn auch sehr langsam.
In diesem Fall würdest du den dann lokal starten. Und du kannst auch den Prozess mit dem Remotedebugger starten. Wenn es aber mit dem Verbinden funktioniert, ist das ein einfacherer Workaround. Um direkt mit dem Debugger zu starten, kannst du sowas einbauen:
Delphi-Quellcode:
Dann wartet das Programm an der Stelle (z.B. in der Projektdatei nach dem begin), bis du mit dem Debugger verbunden hast. Du darfst das halt nur nicht versehentlich einchecken. Du kannst das zur Sicherheit natürlich z.B. nur machen, wenn eine Datei oder Umgebungsvariable da ist, die es nur auf dem Entwicklungs-PC gibt.
while not IsDebuggerPresent do
Sleep(100); |
AW: Programm unter Debuggerkontrolle extrem langsam
Danke für alles. Dann kann ich endlich mal weiter machen.
Wegen Remotedebugger, ah inzwischen weiss ich es das ist ein separates Tool, der PA_Server. |
AW: Programm unter Debuggerkontrolle extrem langsam
Es gibt den Remote-Debugger und den PAServer.
Der Debugger ist nur zum Debuggen da, also Verbindung zwischen einer irgendwo liegenden Anwenung und dem Debugger (Delphi-IDE) und der PAServer kann zusätzlich noch die Verteilung/Installation der kompilierten Anwendung übernehmen. C:\Program Files (x86)\Embarcadero\Studio\23.0\bin\rmtdbg290.exe C:\Program Files (x86)\Embarcadero\Studio\23.0\PAServer\setup_paserver.exe ![]() ![]() PS: Da die DelphiIDE/Debugger 32 Bit ist und er somit keine 64 Bit-Anwendung debuggen kann, wird dort automatisch der RemoteDebugger zwischengeschaltet. Ebenso, wie für fremde Plattformen (Android/iOS/OSX/Linux), beim Debuggen, immer ein PAServer dazwischen hängt. |
AW: Programm unter Debuggerkontrolle extrem langsam
Hallo,
Danke für Eure Informationen. Bin nun noch mehr verwirrt. Ich habe nun sehr viele Informatioen wie man remote debuggen kann, was ein "Remote-Debug-Server" ist und wie man ihn benutzt. Aber ich weiss immer noch nicht was das ist, was Ihr (und EMB) mit "Remote-Debugger" bezeichnet. Zumindest einer meiner Kollege versteht etwas anderes darunter. Ist es etwa die dbkw64_29_0.exe? Ist es eine Anwendung? Eine dll? Ein Teil der bds.exe? Nur ein Konzept? Zitat:
|
AW: Programm unter Debuggerkontrolle extrem langsam
Nja, der RemoteDebugger (aber auch der PAServer)
stellen eine Debugschnittstelle auf einem anderen PC bereit (oder auch auf dem Selben), damit dein lokaler Debugger (Delphi) ein "entferntes" Programm debuggen kann. Bei 32 <> 64 Bit muß das sein. ein 64-Bit-Debugger kann "auch" direkt 32-Bit-Programme debuggen ... nur andersrum geht es nicht. Drum werden Win64-Programme intern immer über einen lokalen Remotedebugger gehandhabt (ohne dass du es merkst). Und ja, man kann damit natürlich auch lokale 32-Bit-Programme debuggen. Die RemoteDebugger-EXE lokal starten und dann Run -> mit Prozess verbinden -> localhost. Die dbkw64_29_0.exe (Embarcadero Debugger Kernel) dürfte das sein, was Delphi intern als lokalen-RemoteDebugger für Win64 benutzt. (der versucht auch keinen Port nach außen zu öffnen, so wie die rmtdbg290.exe) [edit] Hmmm, die rmtdbg290.exe (auch ein Embarcadero Debugger Kernel) ist ja auch nur 32 Bit ... dann wir das wohl doch nur für Win32-Programme sein (war nie auf die Idee gekommen auch mal Win64 remote zu debuggen) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz