Endlosschleifen automatisiert erkennen (Code oder Laufzeit)?

Status
Nicht offen für weitere Antworten.

Novanic

Bekanntes Mitglied
Hallo Leute,

ich bin dabei etwas ähnliches wie CruiseControl zu entwickeln (es kann Code reingegeben werden, der kompiliert und ausgeführt wird). Jetzt könnte es vorkommen das ein Experte eine Endlosschleife eingebaut hat und von meinem Programm kompiliert und ausgeführt wird. Danach ist die Machine dann natürlich völlig ausgelastet und nichts geht mehr...

Mir würden dazu zwei Ansätze einfallen:
- entweder die Schleife wird vorher z.B. mit JDT analysiert, was allerdings zu hoher Auswand und zu unsicher wäre
- oder es wird eine Abbruchbedingung in die Schleifen generiert, was aber auch sehr schmutzig wäre...

Gibt es eine bessere Lösung um Endlosschleifen zu erkennen? Kann man zur Laufzeit auf einen Stack zugreifen indem die Durchläufe "registriert" sind oder kann man die Auslastung eines Threads überwachen oder so etwas?

Danke schonmal.

Gruß Nova
 
Naja, also der Code wird von dem Programm nur über Unit-Tests ausgeführt. Man könnte ja zum Beispiel definieren das Schleifen im Test-Kontext nicht mehr als 100.000 mal laufen dürfen. Bei Rekursion könnte man vielleicht den Stack abfragen, bei for- oder while-Schleifen wird das wohl nicht gehen. Man könnte auch die Ausführung der Tests zeitlich begrenzen, wobei die Maschine dann aber auch für die entsprechende Zeit völlig ausgelastet und unbrauchbar wäre. Auch nicht schön...
Mich würde ja mal interessieren wie sich CruiseControl verhält wenn eine Endlosschleife auftaucht. Fliegt der dann auch so gnadenlos ab und kann nur noch neugestartet werden? 🙂
 
Du kannst den Thread/Prozess nach eine Zeitspanne X abschießen. Nicht mehr und nicht weniger.
Irgendwelchen Code zur Compile/Runtime untersuchen zu wollen ist völlig illusorisch.
 
Ganz genau. Endlos Schleifen (immer und für beliebigen Code) zu erkennen ist unmöglich da es sich um ein NP-vollständiges Problem handelt.
 
Ok, dann bleibt mir wohl nur die Möglichkeit den Thread nach einer bestimmten Zeit abzubrechen.
Es hätte ja sein können, das man feststellen kann wie oft eine Zeile durchlaufen wurde. Bei Rekursion wäre das ja über den Stack möglich...
Danke für eure Hilfe und Infos. 🙂

Gruß Nova
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben