Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[VS2005] Thread debuggen "crasht"

Pagina: 1
Acties:

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 27-11 10:50

_Thanatos_

Ja, en kaal

Topicstarter
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:
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 ]

日本!🎌


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 27-11 10:50

_Thanatos_

Ja, en kaal

Topicstarter
Oplossing gevonden :)

Deze MSDN blog verklaart wat er precies misgaat. Dus een simpele kwestie van "Call ToString() on objects in variables windows" uitzetten in de debugging properties helpt fantastisch.

Uiteraard is het een workaround, de oplossing is natuurlijk om m'n classes (kennelijk) netter te bouwen met oog op multithreading, maar vaar nu is m'n probleem iig weg.

Ik hoop dat jullie er ook wat mee kunnen ;)

日本!🎌


  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Sorry, maar jouw voorbeeld code bevat alleen statements, geen variabelen. Waar heb jij dan ToString() aan 'geplakt'?

If it isn't broken, fix it until it is..


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Niemand_Anders schreef op vrijdag 05 oktober 2007 @ 13:28:
Sorry, maar jouw voorbeeld code bevat alleen statements, geen variabelen. Waar heb jij dan ToString() aan 'geplakt'?
Dat doet de IDE voor zover ik de post begrijp ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 27-11 10:50

_Thanatos_

Ja, en kaal

Topicstarter
Neem maar es een kijkje bij de Autos als je een willekeurig stuk code debugt ;)

日本!🎌