Ik heb een winforms applicatie waarin ik een aantal threads opstart. Als ik zo'n thread wil debuggen, dan breeekt VS netjes op de plek van het breakpoint. Hier gaat gelijk al iets fout: VS zit dan ongeveer 10 seconden vast, pas daarna kan ik door de code heen stappen.
Volgende wat mis gaat, en dat is voor mij het belangrijkste probleem: als ik door de code wil stappen, dan heel vaak (en reproduceerbaar) komt het voor dat bijv "step over" de execution gewoon resumet, maar de thread nooit sluit. De applicatie reageert alsof er een exception opgegooit is die nooit afgevangen wordt, maar hij komt ook niet in een finally terecht. De applicatie gaat gewoon door alsof de thread nooit gestart is geweest, zegmaar.
Beetje code als voorbeeld:
Een breakpoint zetten op DoeIets() werkt, een breakpoint zetten op DoeNogIets() werkt ook. In beide gevallen breekt de debugger op de verwachtte plek. Echter, een "step over" doet niets, de app runt gewoon weer, en hij komt nooit bij Done(). BeetjeSynchronizen() heb ik erbij gezet, omdat sommige usenet-posts suggereren dat het daarmee te maken heeft. Het lijkt mij persoonlijk sterk, omdat ie daar nog niet is wanneer het fout gaat...
Ik hoop dat het een beetje duidelijk is, want het is wel een erg wazig probleem
Volgende wat mis gaat, en dat is voor mij het belangrijkste probleem: als ik door de code wil stappen, dan heel vaak (en reproduceerbaar) komt het voor dat bijv "step over" de execution gewoon resumet, maar de thread nooit sluit. De applicatie reageert alsof er een exception opgegooit is die nooit afgevangen wordt, maar hij komt ook niet in een finally terecht. De applicatie gaat gewoon door alsof de thread nooit gestart is geweest, zegmaar.
Beetje code als voorbeeld:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
| Thread t = new Thread(delegate() { try { DoeIets(); DoeNogIets(); this.Invoke((MethodInvoker) delegate() { BeetjeSynchronizen(); }); } finally { Done(); } }); t.Start(); |
Een breakpoint zetten op DoeIets() werkt, een breakpoint zetten op DoeNogIets() werkt ook. In beide gevallen breekt de debugger op de verwachtte plek. Echter, een "step over" doet niets, de app runt gewoon weer, en hij komt nooit bij Done(). BeetjeSynchronizen() heb ik erbij gezet, omdat sommige usenet-posts suggereren dat het daarmee te maken heeft. Het lijkt mij persoonlijk sterk, omdat ie daar nog niet is wanneer het fout gaat...
Ik hoop dat het een beetje duidelijk is, want het is wel een erg wazig probleem
[ Voor 10% gewijzigd door _Thanatos_ op 06-09-2007 11:30 ]
日本!🎌