www.mikrocontroller.net

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


Autor: 1.Semeterler (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Arc Net (arc)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: öhm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da bekommt der Begriff Endlossschleife endlich mal einen fassbaren 
Wert.

Autor: Arc Net (arc)
Datum:

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

Bottom wie in Haskell geht hier leider nicht ;->

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: tuppes (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Volker Zabe (vza)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: DINISO (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;-)

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: DINISO (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: David ... (volatile)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist keine "Windows-Zickerei", das ist ein Fehler im Programm.

Autor: zwieblum (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: faustian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Arc Net (arc)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Μαtthias W. (matthias) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: zwieblum (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Arc Net (arc)
Datum:

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

Nein.
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...

Autor: bluppdidupp (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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/d...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.