| 

.NET C# Java Javascript Exception

2
Hallo, ich stoße immer wieder auf das Problem das hängende Threads die Applikation nicht ordnungsgemäß beenden lässt. Die Ursache zu finden ist recht aufwendig, da MSVS Threads immer nur anzeigt wenn ein Breakpoint erreicht wurde.

Wie löst ihr das Problem oder besser wie vermeidet ihr Solche?

Ich verwende viele thirdPlayer-Bibliotheken (Fremdbiblotheken) und Entwickle unter MSVS2008.

Grüße smartic
News:
10.03.2011
smartic 500 8
5 Antworten
1
Wenn ich das richtig verstanden habe: ich löse solche Probleme wie folgt:
- Applikation im Debugger starten
- Im VS die Toolbar Debug Location einschalten
- Applikation beenden
- Der Debugger müsste weiter laufen wenn ein Thread sich nicht beendet
- Mit Pause den Debugger unterbrechen
- Dann sieht man in der Debug Location den/die nicht beendeten Thread(s)
- Jetzt wie üblich Callstack bei jedem Thread kontrollieren.

Wenn man die Threads selbst startet, hilft es sehr wenn man beim starten eine Thread Namen angibt. Dieser wird dann in der Toolbar angezeigt

Vielleicht hilfts ;-)
10.03.2011
GerhardK 398 7
3
Hi,
wir nutzen leider auch Bibliotheken die einfach "hängen" bleiben können.
Um so etwas zu vermeiden starte ich einen Timer der mir das Objekt bzw. dessen Thread abfragt nach einer gewissen Zeit. Quasi eine Timeoutanfrage

Grüße
10.03.2011
Pawel Warmuth 195 5
1
Wenn ich mit Threads arbeite, denn benenn ich die und lass mir quasi fast alle aktivitäten der Threads im Direktfenster ausgeben, dass hilft ungemein beim debuggen.
Also quasi immer wenn einer was gemacht hat lass ich ihn sein Namen, seine ID und was er getan hat ins Direktfenster schmeißen, so seh ich dann automatisch, wo Abstürze entstehen.
vllt hilft dir das ja auch
10.03.2011
DerPunk 1,0k 7
0
Ich hab hier grad mal was gefunden.
Hier wird erklärt, wie man nem Thread nen Eventhandler und so verpassen kann...
Damit könnte man den Threads sagen, dass sie bescheid sagen sollen, wenn sie sich beenden...
Dementsprechend weiß man dann auch immer noch welcher Thread grade noch offen iss ;-)
10.03.2011
DerPunk 1,0k 7
0
@GerhardK; dass mit der Pausenfunktion ist mir nie aufgefallen, aber es klappt. :-) Habe es gerade ausprobiert und zeigt mir wie erhofft die hängenden Threads. Leider gibt mir der Stacktrace keine Sinnvollen Informationen, nur "Deaktiviert oder wartend" und "Externer Code". Ich vermute das dies an der externen Bibliothek liegt.

@Pawel; der Timeout ist eine Überlegung Wert. Ich frage mich aber nun wie man solch einen mit einer externen Quelle (Bibliothek) verbindet. Wenn ich davon ausgehe, dass mit folgender Zeile ein Thread gestartet wird:
ExtFct extFnc = new ExtFnc();

und ich mit Programmende:
extFnc.Dispose()

durch bestimmte Situation dieser sich nicht zum beenden bewegen lässt. Wo kann ich da den Timeout ansetzen? Oder gibt es eine andere Variante diesen zu beenden.
11.03.2011
smartic 500 8
Wenn du den MS Symbol Server verwendest, kann der Callstack eventuell lesbarer sein. Hilft bei Threads die vom System generiert werden (Asynch aufrufe und so Zeug)
GerhardK 11.03.2011

Stelle deine .net-Frage jetzt!