Forum: PC-Programmierung Win 7 meldet "<progname> funktioniert nicht mehr"


von 1.Semeterler (Gast)


Lesenswert?

Servus beisammen,

gleich zum thema:
ich hab mir ein Programm geschrieben (für die Kommandozeile und in 
C-Code), das ziemlich lange rechnen muss. Damit aber die berechnungen 
etwas schneller gehen habe ich alle ausgaben erstmal eliminiert und 
nurnoch das fertige Ergebnis (keine Zwischenergebnisse mehr) wird 
ausgespuckt. Doch leider bricht mir Win7 die berechnungen ab und meldet 
"<progname> funktioniert nicht mehr". Einen "Fortsetzen, das passt 
schon" butten gibts nicht. nun meine Frage: wie kann ich das 
unterbinden? es muss doch möglich sein auch mal 2-3 minuten ungestört 
von Windoof rechnen zu können oder?!
nur wie?

Ich danke auch schonmal für eure Antworten.

PS: der Algorithmus ist vorgegeben. Die Rechenzeit ist also quasi 
festgelegt.

von Ralf (Gast)


Lesenswert?

Gibts n Debugger? Keine Ahnung was Win7 da macht, ich hab mal irgendwo 
gelesen, dass Win7 Prozesse selbstständig killen kann, wenn keine 
Rückmeldung kommt. Vielleicht muss deine Berechnungsroutine zeitweilig 
mal pausieren?

Ralf

von Arc N. (arc)


Lesenswert?

Die Meldung erscheint normalerweise auch nur, wenn das Programm 
tatsächlich abgestürzt ist, nicht wenn es einfach nur rechnet oder in 
einer Endlosschleife hängt! Einfach mal ein int main() { while (true) { 
} return 0; } testen.

von öhm (Gast)


Lesenswert?

Da bekommt der Begriff Endlossschleife endlich mal einen fassbaren 
Wert.

von Arc N. (arc)


Lesenswert?

öhm schrieb:
> Da bekommt der Begriff Endlossschleife endlich mal einen fassbaren
> Wert.

Bottom wie in Haskell geht hier leider nicht ;->

von Ralf (Gast)


Lesenswert?

> Die Meldung erscheint normalerweise auch nur, wenn das Programm
> tatsächlich abgestürzt ist...
Ah, okay. Dann hat " 1.Semeterler" schon mal einen Ansatzpunkt, denn das 
heisst, dass seine Berechnung noch irgendwo n Bug hat. Ich weiss nicht, 
in wie weit man normales C ordentlich debuggen kann, aber im schlimmsten 
Fall soll er halt während der Berechnung Statusmeldungen in eine Datei 
schreiben.
Beispielsweise die Eingangs- und die aktuell berechneten Werte. Die 
jeweiligen Meldungen können ja auch Bezug auf die entsprechende Stelle 
im Sourcecode nehmen, sodass er sieht, wo abgeschmiert wurde. Und wenn 
er zwei oder drei dieser "Logs" hat, kann er vielleicht den Bug 
finden...

Ralf

von tuppes (Gast)


Lesenswert?

@1.Semeterler:

"<programmname> funktioniert nicht mehr" heißt: Es ist abgestürzt, es 
hat einen Bug. Den wirst du wohl suchen müssen.

Das ist DIE Gelegenheit, den Umgang mit dem Debugger zu lernen. Das ist 
übrigens sehr sinnvoll investierte Zeit, wenn du vorhast, noch weitere 
Programme zu schreiben. Welche Entwicklungsumgebung verwendest du?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> Damit aber die berechnungen etwas schneller gehen habe ich
> alle ausgaben erstmal eliminiert

Das ist natürlich ungeschickt. Wenn das Programm in der Konsole wirklich 
so viel ausgibt, daß das das Programm verlangsamt, dann kann man die 
Ausgabe in eine Datei umleiten, das Konsolenfenster während der Laufzeit 
minimiert lassen oder die Software um die Ausgabe reduzierende 
Kommandozeilenschalter erweitern. So aber ist das eine Änderung der 
Software, die natürlich auch Fehler mit sich gebracht haben kann (und 
es hier wohl auch getan haben wird).

> Ich weiss nicht, in wie weit man normales C ordentlich
> debuggen kann,

Einen Debugger vorausgesetzt: Exzellent.

von Michael U. (amiga)


Lesenswert?

Hallo,

keine Ahnung von den (Un)Tiefen des Windows, aber:

wir haben hier eine Anwendung laufen, die im Hintergrund mit einem 
Oracleserver diskutiert.

Im Taskmanager des Client steht unter W2000 und XP schon nach kurzer 
Zeit generell "keine Rückmeldung".

Das kann nun stimmen oder auch nicht. Man kann dann warten und 
irgendwann geht es weiter, weil die Daten doch kommen. Wenn nicht, hängt 
der Task eben ewig. Wenn Win 7 solche Zustände automatisch an den Nutzer 
meldet, weil es ihm zu lange dauert, wäre es auch eine Erklärung.

Ich kenne mich aber mit dem Mechanismus nicht aus, mit dem Windows ja 
offenbar überprüft, ob ein Prozess noch antwortet.

Gruß aus Berlin
Michael

von Volker Z. (vza)


Lesenswert?

Ein sleep(0); kann Wunder wirken.
Es kehrt sofort zurück wenn es nichts wichtigeres zu tun giebt.
An geigneter Stelle eingebaut, könnte es das Problem lösen.

von DINISO (Gast)


Lesenswert?

Ich hatte schon öfter das gleiche Problem ab WinVista grusel ...

Was immer hilft, ist das Ding als Admin zu starten, das ist zwar 
fumellig, aber unter Win7 kann man das automatisieren (Rechtsklick im 
Explorer auf die *.exe -> Eigenschaften -> Reiter "Kompatibilität" -> 
"Berechtigungsstufe" Haken bei "Programm als Admin ausführen). Damit 
kann man schon mal 50% der Problemfälle erschlagen.

Wenn das nicht hilft, müssen größere Geschütze aufgefahren werden: Nach 
stundenlangen Suchen bin ich über die Windows - 
Datenausführungsverhinderung (kein Scherz !) gestolpert. Rechtsklick auf 
dem "Computer" auf dem Desktop -> Eigenschaften -> links auf "Erweiterte 
Systmeinstellungen" -> Im  Bereich "Leistung" auf den Button 
"Einstellungen" -> Reiter "Datenausführungsverhinderung" ... Ufff ... 
Dort den Radio-Button "DatenauführungsDingBums für alle Programme und 
Dienste ..." aktivieren unten in die Liste deine *.exe eintragen. 
Normalerweise hat Vista/Win7 dannach nie mehr einen Dienst als nicht 
mehr funktionsfähig bemängelt.

Aber Debuggen kann auch nie schaden ;-)

von Christian R. (supachris)


Lesenswert?

DINISO schrieb:
> Ich hatte schon öfter das gleiche Problem ab WinVista grusel ...

Das ist alles nur herumdoktorn an Symptomen. Die Ursache ist deswegen 
immer noch nicht beseitigt.

von DINISO (Gast)


Lesenswert?

Christian R. schrieb:
> Das ist alles nur herumdoktorn an Symptomen. Die Ursache ist deswegen
> immer noch nicht beseitigt.

Das hilft aber nichts, solange ich auf ein Programm angewiesen bin, 
dessen Quellcode ich nicht vor der Nase habe und ich es nur so zum 
Laufen bringe.

von Christian R. (supachris)


Lesenswert?

DINISO schrieb:
> Christian R. schrieb:
>> Das ist alles nur herumdoktorn an Symptomen. Die Ursache ist deswegen
>> immer noch nicht beseitigt.
>
> Das hilft aber nichts, solange ich auf ein Programm angewiesen bin,
> dessen Quellcode ich nicht vor der Nase habe und ich es nur so zum
> Laufen bringe.

Das ist richtig. Aber der TE hat den Quellcode ja.

von David .. (volatile)


Lesenswert?

Das ganze ist eine typische Windows7-Zickerei. Ich hatte es schon 
oefter, dass ein Programm keine Rueckmeldung mehr gab, weil es so 
intensiv am machen war. Das ist aber okay, denn nach etwas Zeit meldet 
sich das Programm brav zurueck. Es sei denn Windows kriegt das mit, dann 
bietet es einem mindestens an, das Programm abzuschiessen, oder macht 
das selber mal...

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das ist keine "Windows-Zickerei", das ist ein Fehler im Programm.

von zwieblum (Gast)


Lesenswert?

wenn du kein yield() (win16 & win32) machst oder die Warteschlange nicht 
mit regelmäßig mit GetMessage() leerst, kriegst du einen "Keine 
Rückmeldung ..."-Eintrag im Taskmanager.

Grüße vom wirklich schlauen Windoof, das genau weiß, wenn dein Programm 
abgeschmiert ist, und nicht bloß rechnet.

von faustian (Gast)


Lesenswert?


von Arc N. (arc)


Lesenswert?

zwieblum schrieb:
> wenn du kein yield() (win16 & win32) machst oder die Warteschlange nicht
> mit regelmäßig mit GetMessage() leerst, kriegst du einen "Keine
> Rückmeldung ..."-Eintrag im Taskmanager.

1. Das Programm ist für die Kommandozeile
2. Geht es um die Meldung "xyz funktioniert nicht mehr"
3. Die Meldung "Keine Rückmeldung" kommt zwar, wenn man nicht auf 
Ereignisse reagiert, das Programm wird aber nicht von Windows 
abgeschossen
4. Schonmal nachgesehen was Yield() macht? Das war eine reine 
Win16-Geschichte.

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Rufus t. Firefly schrieb:
> Das ist keine "Windows-Zickerei", das ist ein Fehler im Programm.

Wir haben das unter Win7 mit RADStudio2010 (Borland, Embarcadero) 
beobachtet. Programm im Debugger gestartet, Programm läuft auf 
Brechpunkt, man schaut sich ein paar Variablen an usw. und lässt das 
Programm dann weiterlaufen. In genau diesem Augenblick meckert Win7 dann 
"...exe reagiert nicht mehr" und beendet den Prozess gnadenlos. Weder 
unter XP noch ohne Debugger gestartet tritt dieses Problem auf.

Matthias

von zwieblum (Gast)


Lesenswert?

> 1. Das Programm ist für die Kommandozeile

Ja und? Das ist unter Windoof aber so was von egal ...

> 4. Schonmal nachgesehen was Yield() macht? Das war eine reine
Win16-Geschichte.

Ja, aber das Prinzip ist gleich geblieben (s. Post von faustian, da 
steht's wie's heutzutage gemacht werden muss).

von Rolf Magnus (Gast)


Lesenswert?

>> 1. Das Programm ist für die Kommandozeile
>
> Ja und? Das ist unter Windoof aber so was von egal ...

Wann wurde dieser Schwachsinn eingeführt?

von Arc N. (arc)


Lesenswert?

zwieblum schrieb:
>> 1. Das Programm ist für die Kommandozeile
>
> Ja und? Das ist unter Windoof aber so was von egal ...

Nein.
1
int main() { while (true) { } return 0; }
kompilieren und auf der Kommandozeile starten...
Da gibt's keine Ansage ala "Keine Rückmeldung".

>> 4. Schonmal nachgesehen was Yield() macht? Das war eine reine
> Win16-Geschichte.
>
> Ja, aber das Prinzip ist gleich geblieben (s. Post von faustian, da
> steht's wie's heutzutage gemacht werden muss).

Threads gibt's auch schon sehr lange...

von bluppdidupp (Gast)


Lesenswert?

Wenn "bla bla bla funktioniert nicht mehr" kommt, wurde vom Programm 
eine Exception geworfen.
Normalerweise wird diese auch in der Ereignisanzeige (Systemsteuerung -> 
Verwaltung) als "Application Error" mit ein paar weitere Infos geloggt.

"reagiert nicht mehr" kommt bei Anwendungen, die ihre Message-Loop nicht 
abarbeiten. Entweder weil das System zufällig generell gerade ziemlich 
ausgelastet ist oder (wahrscheinlicher) weil der Programmierer ne faule 
Sau ist und keine Lust hatte sich um das Problem z.B. in Form von 
Threads zu kümmern...
...kommt bei Konsolenanwendungen eigentlich eher selten vor, da diese 
für gewöhnlich keine Message-Loop haben (bzw. diese von Windows 
verwaltet wird)

Wenn die Datenausführungsverhinderung (DEP) abschalten muss damit die 
Anwendung läuft kann man sich eigentlich sicher sein dass diese 
irgendwelche Ferkeleien macht.

Microsoft hat auch noch nen Debugger zum Download, welcher da evtl. 
nützlich sein könnte:
http://www.microsoft.com/whdc/DevTools/Debugging/default.mspx

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.