Thread Identifikation wenn App. "fast" beendet
-
Hallo,
bei einer useren Applikationen bleibt beim Beenden ein Thread übrig. Das führt dazu dass nicht einmal der Terminate ausgeführt werden kann da die Fehlernummer 5 ausgegeben wird. Mit der Fehlernummer kann ich jedoch nichts wirklich anfangen und weiss nicht um welchen Thread es sich handelt.
Da unsere Applikation ziemlich komplex ist und mehrere Threads anlegt ist den Thread zu finden der nicht beendet wird, fast unmöglich.
Die Erste Idee war anhand der Priorität es herauszufinden. Dummerweise ist die Normale Priorität. Die Applikation erstellt jedoch ebenfalls mehrere Thread mit dieser Priorität. Die ThreadID ist bei jedem Start der App. anders, also keine Info die weiterhilft.
Da der Fehler sehr selten auftritt ist es kaum reproduzierbar. Trotzdem ist es wichtig das die App. beendet wird.Gibt es eine Möglichkeit doch den nicht beendeten Thread auf irgendeineweise zu finden, ohne dass an der App. der Code geändert wird?
Gruss
Michael
-
Halten wir mal fest:
Eine CRT/MFC Anwendung wird beendet, wenn die "main" Methode verlassen wird; unabhängig davon, ob noch andere Threads laufen.Das was Du beschreibst, sieht eher danach aus, als ob ein Thread in irgendeinen Systemcall drin steckt, aus dem er nicht mehr rauskomt und welcher nicht unterbrechbar ist (das ist i.d.R. nur bei fehlerhaften Treibern so).
Was Du mit "Terminate" und "Fehlernummer 5" meinst, ist mir allerdings unklar...
5 heisst i.d.R. "Access Denied"... also Du hast nicht die Rechte den Prozess zu beenden (vielleicht bist Du kein Admin?).
-
Mit dem Debugger auf den Prozess attachen und sich den Status aller noch laufende Prozesse anschauen wäre das, was mir da als erstes einfällt. Michaels Meinung schließe ich mich an: Wahrscheinlich hängt irgendein Thread. Im Callstack erkennt man wahrscheinlich mehr. Einfach die jeweiligen Callstacks der Threads anschauen.
Allerdings muß man das zunächst einmal reproduzieren. Kennt ihr einige Randbedingungen, um das zu reproduzieren?Gruß Kimmi
-
1. WinCE Applikation -> Attach hätte ich mir gewünscht geht aber aus dem emmbedded Visual C nicht
2. Die Applikatin ist nicht beendet da mit ProcessViewer was ich geschrieben habe zu sehen ist. Nur ein Thread hängt.
3. Das ist auch meine Vermuttung dass es irgendwas mit Treiber zu tun hat aber ehe glaube ich an unseren Fehler das den Treiber oder was auch immer nicht richtig schliesst.
4. Mit Rechten hat es nichts zu tun.Was von meiner Seite machbar ist, den Code der App. nach Fehlern suchen (unwahrscheinlich dass der Fehler gefunden wird) oder eine weitere App. schreiben die auf irgendeineweise die nötige Info aus der App. holt (Dachte mit ProcessViewer = TaskMgr wäre die Arbeit getan).
Als letzte Möglichkeit ist natürlich in der App. beim Beenden gewisse Infos in ein File zu schreiben (möchte ich auch nicht unbedingt machen).
Wie gesagt eine weitere App. ist mir am liebsten. Die Frage ist nur ob ich an die Info drankomme.Gruss
Michael