Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Anwendung beendet sich nicht (seit XE2) (https://www.delphipraxis.net/163789-anwendung-beendet-sich-nicht-seit-xe2.html)

Poolspieler 16. Okt 2011 20:12

Anwendung beendet sich nicht (seit XE2)
 
Hallo,
seit ich XE2 benutze, beendet sich meine Anwendung (die aus mehreren Threads besteht) manchmal nicht.
Die CPU-Last geht nach klicken auf das "Beenden-Kreuz" auf 100% für den aktiven CPU-Kern.
Wenn ich in der Entwicklungsumgebung auf Pause drücke, dann erscheint folgender Assembler-Code:

Code:
ntdll.RtlUserThreadStart:
770701C4 89442404         mov [esp+$04],eax
770701C8 895C2408         mov [esp+$08],ebx
770701CC E9B99C0200       jmp $77099e8a
770701D1 8DA42400000000   lea esp,[esp+$0000]
770701D8 8DA42400000000   lea esp,[esp+$0000]
770701DF 90               nop
ntdll.KiFastSystemCall:
770701E0 8BD4             mov edx,esp
770701E2 0F34             sysenter
ntdll.KiFastSystemCallRet:
770701E4 C3               ret
770701E5 8DA42400000000   lea esp,[esp+$0000]
770701EC 8D642400         lea esp,[esp+$00]
ntdll.KiIntSystemCall:
770701F0 8D542408         lea edx,[esp+$08]
770701F4 CD2E            int $2e
770701F6 C3               ret
770701F7 90               nop
770701F8 0000             add [eax],al
770701FA 0000             add [eax],al
770701FC 1889E74C0000     sbb [ecx+$00004ce7],cl
77070202 0000             add [eax],al
77070204 50               push eax
77070205 51               push ecx
77070206 0100             add [eax],eax
77070208 0100             add [eax],eax
7707020A 0000             add [eax],al
7707020C F007             lock pop es
7707020E 0000             add [eax],al
77070210 E807000020       call $9707021c
77070215 0201             add al,[ecx]
77070217 00E0             add al,ah
77070219 2101             and [ecx],eax
7707021B 0080410100BC    add [eax-$43fffebf],al
77070221 BB0A0058BC      mov ebx,$bc58000a
77070226 0A00             or al,[eax]
77070228 81B70A0015B90A005DB7 xor [edi-$46eafff6],$b75d000a
77070232 0A00             or al,[eax]
77070234 51               push ecx
77070235 B50A            mov ch,$0a
77070237 008DBB0A00BE    add [ebp-$41fff545],cl
7707023D 7307             jnb $77070246
7707023F 00F1             add cl,dh
77070241 2102             and [edx],eax
77070243 005921           add [ecx+$21],bl
77070246 0200             add al,[eax]
77070248 F0260300         lock add eax,es:[eax]
7707024C E0D3             loopne $77070221
7707024E 07               pop es
7707024F 00F0             add al,dh
77070251 D307             rol [edi],cl
77070253 00D0             add al,dl
77070255 D307             rol [edi],cl
77070257 00B3260300B1     add [ebx-$4efffcda],dh
7707025D 260300           add eax,es:[eax]
77070260 7B26             jnp $77070288
77070262 0300             add eax,[eax]
77070264 D7               xlat
77070265 AC              lodsb
77070266 06               push es
77070267 00848D0600A7AD  add [ebp+ecx*4-$5258fffa],al
7707026E 06               push es
7707026F 0059D3           add [ecx-$2d],bl
77070272 0A00             or al,[eax]
77070274 D8CF            fmul st(7)
77070276 0A00             or al,[eax]
77070278 F4               hlt
77070279 D00A            ror [edx],1
7707027B 00C0             add al,al
7707027D D00A            ror [edx],1
7707027F 009AA007002F    add [edx+$2f0007a0],bl
77070285 A0070021CE      mov al,[$ce210007]
7707028A 0A00             or al,[eax]
7707028C 1BD1             sbb edx,ecx
7707028E 0A00             or al,[eax]
77070290 66A007007DD3     mov al,[$d37d0007]
77070296 0A00             or al,[eax]
77070298 D4D2             aam $d2
WARUM nur RtlUserThreadStart --> ich habe das Programm doch beendet...:?::?::?: :?

Leider bin ich kein Freak auf dieser Ebene und hoffe, Ihr könnt mir einen Hinweis geben, wie ich dieses Problem lokalisieren kann.
Das Problem tritt auch auf, wenn ich aus Delphi die Anwendung "ohne Debugger" starte. Dann bleibt nach Beenden des Programms der Prozess im Taskmanager stehen...
Allerdings immer nur sporadisch. Manchmal tritt das Problem 10 Start/Ende-Zyklen nicht auf. Manchmal ist es ständig vorhanden.

Ich würde mich freuen, wenn mir jemand einen Tip geben könnte.

Beste Grüße,

Poolspieler

hathor 16. Okt 2011 21:43

AW: Anwendung beendet sich nicht (seit XE2)
 
Solche Probleme treten auf, wenn eine Funktion verwendet wird, die einen Rückgabewert erwartet, wie z.B. SendMessage - in diesem Fall besser PostMessage verwenden.

Poolspieler 16. Okt 2011 22:13

AW: Anwendung beendet sich nicht (seit XE2)
 
Hallo hathor,
danke für Deine Antwort.
Ich habe nach den beiden Begriffen gesucht. PostMessage habe ich nicht gefunden
SendMessage gibt es schon. Es wird verwendet, um ein Richedit nach ganz unten zu scrollen:
Code:
SendMessage(protokoll_memo.Handle, WM_VSCROLL, SB_BOTTOM, 0); // nach ganz unten Scrollen
Allerdings bin ich mir relativ sicher, dass diese Funktionen nicht während des Beendens des Programms aufgerufen werden.

Ansonsten gibt es halt sehr viele Synchronize-Befehle, um die GUI mit den darunter liegenden Threads zu synchronisieren.

Mir fällt halt auf, dass ich mit Delphi2009 diese Probleme nicht hatte. Erst seit dem ich auf XE2 umgestiegen bin, treten diese Verhaltensweisen auf...???

Naive Frage: Gibt es eine Möglichkeit, wenn ich auf "Pause" drücke --> über die Programmadressen auf den Verursacher zu kommen?
Oder sollte ich vielleicht einen Profiler verwenden? Da ich hier eine Systemlast von 100% habe, müßte im Profiler ja die jeweilige Funktion/Prozedur stark vertreten sein - oder?

Könnte vielleicht Dateizugriff die Ursache sein? Es werden schon auch einige Logfiles mitgeschrieben. Auch das Beenden des Programms wird mitgeschrieben...

Gruß,

Poolspieler

jbg 17. Okt 2011 07:32

AW: Anwendung beendet sich nicht (seit XE2)
 
Zitat:

Zitat von Poolspieler (Beitrag 1130738)
WARUM nur RtlUserThreadStart --> ich habe das Programm doch beendet...:?::?::?: :?

Bist du dir sicher, dass du nach "Pause" auch im richtigen Thread stehst (Strg+Alt+T) und nicht im von Debugger erstellten "Break"-Thread.

Poolspieler 17. Okt 2011 12:52

AW: Anwendung beendet sich nicht (seit XE2)
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo jbg,
vielen Dank für Deine Antwort! Du hast Recht! Es werden noch 6 weitere Threads angezeigt, die aber alle den Status "Unbekannt" haben. Ich habe auch keine Möglichkeit gefunden, einen der Threads anzuhalten/zu pausieren oder ähnliches.
Kannst Du mir vielleicht noch einen Tip geben, wie man das Problem einkreisen kann? :roll: Ich habe mal zwei Screenshots der Delphiumgebung angehängt...
Parallel werde ich wohl eine (kostenpflichtige) Support-Anfrage bei embarcadero stellen... :cry:

Grüße,

Poolspieler

Poolspieler 17. Okt 2011 23:28

AW: Anwendung beendet sich nicht (seit XE2)
 
Hallo zusammen,
ich habe (nach Telefonant mit Support) Delphi XE heruntergeladen und installiert.
--> Ergebnis: Auch hier das selbe Verhalten. :evil:

Kann sich irgend jemand vorstellen, an was das liegen kann bzw. wie man die Ursache aufspüren kann? :roll:

Was ist an Delphi2009 anders? Warum tritt der Fehler da nicht auf????

Ich bin für jede Hilfe dankbar!

Gruß,

Poolpsieler :?

sebastianz1983 10. Mai 2013 13:36

AW: Anwendung beendet sich nicht (seit XE2)
 
Hab das gleiche Problem momentan auch. Ich programmiere ebenfalls an einer (Delphi XE) Anwendung, die mit mehreren Threads gleichzeitig arbeitet.
Der Fehler tritt leider nur sehr sporadisch auf, weswegen ich bisher keine reproduzierbaren Schritte finden konnte.

Poolspieler, konntest du dein Problem damals beheben? Und wenn ja, wie?

Sebastian

Poolspieler 11. Mai 2013 13:57

AW: Anwendung beendet sich nicht (seit XE2)
 
Hallo Sebastian,
es lag damals an einer nicht freigegebenen TThreadlist.
Ich habe dann ein Free- und Clear-Statement in den Destructor eingefügt.
Dann war das Problem behoben.
(klingt einfach, hat mich aber einige Wochen gekostet...)

Viele Grüße,

Poolspieler

sebastianz1983 13. Mai 2013 07:25

AW: Anwendung beendet sich nicht (seit XE2)
 
Hallo Poolspieler,

ich hab in meinem Fall zwar keine TThreadlist, werd aber nochmal drauf aufpassen, dass auch wirklich alle Threads freigegeben werden. Sitze auch schon seit geraumer Zeit an diesem Problem...
Danke für die schnelle Antwort!

Sebastian

Der schöne Günther 13. Mai 2013 08:37

AW: Anwendung beendet sich nicht (seit XE2)
 
Ja, so verhält sich fast jedes meiner XE2-Programme: Da ist noch ein Thread am Laufen, der VCL-Thread ist aber schon aus. Du kannst die Threads auch benennen (
Delphi-Quellcode:
NameThreadForDebugging
oder so) um die Übersicht zu behalten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:28 Uhr.
Seite 1 von 2  1 2   

Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf