none
Endlosschleifen finden RRS feed

  • Allgemeine Diskussion

  • Hallo Forum

    Ich habe ein System mit vielen parallelen Threads laufen und ich schaffe es, dass mir ein Thread manchmal in eine Endlosschleife gerät. Ich glaube zu wissen, welcher Thread das ist, aber natürlich nicht die Stelle an der dies passiert.

    Nun ist es aber leider so, dass dies im Debug-Mode nicht passiert (sonst könnte ich einfach das Debuggging abbrechen und nachsehen, wo er gerade war).

    Was kann ich tun, um diese Stelle doch einigermaßen zu lokalisieren (außer Code stückweise zu entfernen und prüfen ab wann es nicht mehr passiert) .. vor allem, weil es ja nur sporadisch auftritt.

    Grüße

    FireHeart

    Montag, 23. März 2015 08:09

Alle Antworten

  • Erste Maßnahme: Prüfen. ob alle Variablen initialisiert wurden.

    MfG

    KS


    Konrad Schiemert

    Montag, 23. März 2015 10:26

  • Hallo Fire-Heart,

    ist der Thread noch aktuell?

    Gruß

    Aleksander


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht,  kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Freitag, 3. April 2015 10:19
  • Programm laufen lassen ohne den Debugger bis der Zustand eintritt.

    Dann den Debugger attachen und Break All ausführen.

    Thread Window öffnen und die Call Stacks der Threads ansehen.


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de

    Freitag, 3. April 2015 10:49
    Moderator
  • Hallo Martin

    Das kannte ich nicht.

    Wie kann ich einen Debugger an eine hängende Release-Version "attachen"?

    Übrigens habe ich das eine Problem des Hängers durch die klassische Methode "Programmteile entfernen und warten was passiert" letztlich doch gelöst. Es hatte wohl jeder hier im Thread recht...es war eine uninitialisierte Variable schuld, allerdings nicht weil sie nicht initialisiert war, sondern weil sie in bestimmten Fällen gar nicht verwendet werden dürfen hätte. Ein einfaches "IF" hatte das Problem dann gelöst ... das Finden war zuvor freilich etwas schwieriger.

    Grüße

    FireHeart

    Mittwoch, 29. April 2015 09:22
  • Hallo FireHeart,

    durch Ausprobieren nach Martins Anleitung gelingt es, den Aufruf-Stack anzuschauen, hab's gerade selbst probiert ;). Menü DEBUGGEN/An den Prozess anhängen... und Doppelklick auf deinen Release-Prozess, dann auf Debug-Pause oder im Menü DEBUGGEN/Alle unterbrechen oder Strg+Alt+Break.

    Gruß
    Heiko

    Mittwoch, 29. April 2015 10:26
  • Hallo Fire-Heart,

    Hast Du das Anfügen des Debuggers an den Release-Prozess ausprobiert, wie von Martin und Heiko beschrieben?

    Gruß,
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Mittwoch, 6. Mai 2015 07:45
    Administrator