Autor Beitrag
Knulli
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 116
Erhaltene Danke: 2

Win2k, Win7, Win10
D5, D2005, D2006, D2007, D10.4.2
BeitragVerfasst: Di 02.12.08 18:23 
Hi Leute,

beim Debuggen von Anwendungen, wo mehrere Threads gleichzeitig laufen, komme ich mit dem Debugger irgendwie nicht klar.
Ich mache z.B. einen Breakpoint und will ab da mit StepInto/StepOver ( F7/F8 ) weitermachen. Dabei lande ich aber nicht zwangsläufig auf der nächsten Anweisung, sonder oft auf irgendwelchen anderen Anweisungen in irgendwelchen anderen Modulen, die irgendein anderer Thread gerade abarbeiten will.
Kann ich Delphi nicht dazu bringen, nur innerhalb des aktuellen Threads zu "Steppen" solange bis ich auf F9 drücke??

Dieses hin und herspringen ist total nervig und es ist fast unmöglich vernünftig zu debuggen.

Knulli
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Di 02.12.08 20:55 
Das würde aber nicht dem echten Programmablauf entsprechen. Sperre die anderen Threads, wenn sie denn nichts sinnvolles machen.

_________________
Na denn, dann. Bis dann, denn.
Knulli Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 116
Erhaltene Danke: 2

Win2k, Win7, Win10
D5, D2005, D2006, D2007, D10.4.2
BeitragVerfasst: Mi 03.12.08 12:58 
Ist ja richtig, ich will die anderen Threads auch gar nicht an ihrer Abarbeitung hindern. Wenn ich F7 / F8 mache, können (und sollen) sie zwischendurch arbeiten dürfen, weil sonst im zu untersuchenden Thread bestimmte Bedingungen evtl. gar nicht vorhanden sind.

Ich will halt nur beim Deguggen im aktuellen Thread bleiben, denn idR. interessiert mich nur der Thread, wo der Breakpoint angehalten hat.

Manchmal ist dieses springende Verhalten ja auch vielleicht erwünscht (z.B. von zwei verschiedenen Threads wird der selbe Code ausgeführt). Das würde ich ja akzeptieren. Aber wenn zwei verschiedene Threads zwei verschiedene Funktionen ausführen, will ich nicht bei F7 / F8 wahllos hin- und herspringen.

Geht das irgendwo ein/auszuschalten?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 03.12.08 13:48 
Nun ja, F7/F8 springen nunmal zur nächsten Anweisung, die ausgeführt wird, und das ist eben die im anderen Thread. Ob man das Verhalten ändern kann weiß ich nicht (ich brauchte das auch nie bei der Arbeit mit Threads), aber du könntest einfach in jede Zeile deines Threads einen Haltepunkt setzen und dann F9 benutzen.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Fr 12.12.08 21:57 
Du kannst über Ansicht --> Debug-Fenster --> Threads die Liste der Threads deines Prozesses aufrufen. Wenn Du hier einen setzt, könnte das was helfen (ungetestet).

Von Eclipse bin ich das Verhalten beim Thread-Debugging aber auch eher so gewohnt, dass man mit StepInto\StepOver im gleichen Thread bleibt und entweder explizit den Thread wechseln muss oder mit Run die Programmausführung fortsetzen muss, um in einen anderen Thread zu gelangen ...

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.