Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
software:deep:dev:logging [2013-12-29 19:09] – Externe Bearbeitung 127.0.0.1software:deep:dev:logging [Unbekanntes Datum] (aktuell) – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1
Zeile 1: Zeile 1:
-====== Logging and Error Reporting ====== 
-===== Logging ===== 
-The class //StdStreams// in the package //ch.ntb.inf.deep.host// defines three output streams. 
- 
-  * log: is used for normal logging (e.g. successful compilation) 
-  * vrb: for debugging purposes 
-  * err: for errors 
- 
-==== Assertions ==== 
-For development assertions should be extensively used. Make sure that they are enabled in eclipse with //-ea// as argument for the VM.  
- 
-==== Debug Output ==== 
-Für ausführliche Debugausgaben während der Entwicklung und Fehlersuche wenden wir aus Effizienzgründen folgendes Verfahren an:  
-Pro Klasse kann eine Konstante vom Typ boolean //debug// definiert werden. Wenn //debug == true// wird eine gewünschte Ausgabe auf den //verbose-stream// (StdStreams.vrb) geschrieben. Um Debugausgaben zu erhalten, muss also die Quelle editiert werden. Dafür wird im produktiven Einsatz bei ausgeschaltetem //debug// kein Code erzeugt. 
- 
-===== Error Reporting ===== 
-Für die Fehler-Ausgabe sollte die Klasse ErrorReporter im Package //ch.ntb.inf.deep.host// verwendet werden. Bei jeder Ausgabe eines Fehlers wird die statische Variable //nofErrors// inkrementiert. Der Launcher überprüft vor jedem Schritt diese Variable und bricht nach einem Fehler ab. 
- 
-Der ErrorReporter benötigt die Datei ErrorMsg.txt im rsc Ordner. In dieser Datei werden die Fehler-Nummern mit ihren Beschreibungen und möglichen Lösungen eingetragen. 
- 
-Die Methoden error(int errNr) und error(int errNr, String additonalInfo) greifen auf ErrorMsg.txt zu. Die Methoden suchen in der Datei die übergebene Fehlernummer, und geben diese mit der Beschreibung und falls vorhanden mit den möglichen Lösungen aus. Die zusätzlichen Informationen, wie z.B. Datei- und Zeilennummerangaben, werden hinten angefügt. 
- 
-Im Weitern gibt es noch die Methode error(String errMsg), diese gibt die Fehlermeldung direkt aus, ohne dass eine Fehlernummer dafür definiert werden  
-muss. 
- 
-==== Stopping after Error ==== 
-Der Launcher prüft vor jedem weiteren Schritt, ob kein Fehler aufgetreten ist. Was aber passiert, wenn innerhalb eines Schrittes (z.B. der Berechnung der Codegenerierung) ein Fehler auftritt, und zwar so, dass dieser Teil nicht mehr abgeschlossen werden kann? Das ist z.B. der Fall, wenn kein Register mehr alloziert werden kann. Unter Umständen ist die Aufruferkette sehr gross und wir wollen nur im äussersten Rufer, dem Launcher jeweils //nofErrors// prüfen. \\ 
-Alle Methoden sollen so geschrieben werden, dass im Fehlerfall der ErrorReporter aufgerufen wird, aber die Methode trotzdem einen brauchbaren Rückgabewert liefert (also z.B. einfach das Register 0 oder den Node 0) und so die äusseren Methoden durchlaufen. U.U. können auch spezielle Objekte extra dafür geschaffen werden. \\ 
-Es macht trotzdem Sinn daneben auch Assertions einzubauen. Diese sind dann nützlich, wenn wir als Entwickler den Fehler genau zu lokalisieren versuchen. 
-\\  
-----  
-===== Error Numbers ===== 
- 
-=== General: 000 - 099 === 
-^ErrorNr  ^Description  ^Solution  ^ 
-|10|feature not yet implemented| | 
-|11|file not found| | 
- 
-=== Launcher: 100 - 199 === 
- 
-=== Configuration: 200 - 299 === 
-^ErrorNr  ^Description  ^Solution  ^ 
-|200|wrong number format|  | 
-|201|missing right parenthesis|  | 
-|202|missing right brace|  | 
-|203|missing right bracket|  | 
-|204|missing quotation mark|  | 
-|205|IO-Exception|  | 
-|206|Unexpected Symbol|  | 
-|207|missing left brace|  | 
-|208|missing left bracket|  | 
-|209|missing semicolon|  | 
-|210|missing assignment sign|  | 
-|220|no such device|  | 
-|221|no devices|create device before adding segments| 
-|222|syntax error|  | 
-|223|inconsistent attributes|  | 
-|224|invalid type|  | 
-|225|invalid parameter|  | 
-|226|overwrite protected|  | 
-|227|undefined constant|  | 
-|228|max number of reached|  | 
-|229|missing tag|  | 
-|230|no such register|  | 
-|231|no default segment defined|  | 
-|232|no system table segment defined|  | 
-|233|to set an init value is not supported|  | 
-|234|fix addresses for methods are only in exception methods supported|  | 
-|235|no such segment|  | 
- 
-=== Class File Reader++: 300 - 399 === 
-^ErrorNr  ^Description  ^Solution  ^ 
-|300|class file not found|  | 
-|301|systemmethod not found|  | 
-|302|id for Systemmethod out of range|  | 
-|303|changing parent dirs of class files|  | 
-|304|illegal parent dir of class files|  | 
- 
-=== CFG: 400 - 499 === 
-^ErrorNr  ^Description  ^Solution  ^ 
-|400|cfgNode not found|  | 
- 
-=== SSA: 500 - 599 === 
-^ErrorNr  ^Description  ^Solution  ^ 
-|500|generating of the linenumber tabel failed|  | 
- 
-=== Code Generator: 600 - 699 === 
-^ErrorNr  ^Description  ^Solution  ^ 
-|600|no code generated|  | 
-|601|method has too many parameters|  | 
-|602|fixup out of range|  | 
-|603|not enough GPR's for locals| | 
-|604|not enough FPR's for locals| | 
-|610|result of SSA instruction has wrong type|  | 
-|611|operand of SSA instruction has wrong type|  | 
-|612|operand of SSA new instruction has wrong type|  | 
-|620|SSA return instruction not implemented|  | 
-|621|SSA branch instruction not implemented|  | 
-|623|sCcompl or sCcompg is not followed by branch instruction|  | 
-|625|SSA instruction not implemented|  | 
- 
-=== Linker: 700 - 799 === 
-^ErrorNr  ^Description  ^Solution  ^ 
-|701|Class not loaded| | 
-|710|Segment not found| | 
-|711|Segment size error| | 
-|720|Address not set| | 
-|721|Offset not set| | 
-|722|Index not set| | 
-|723|ID not set| | 
-|724|Base address not set| | 
-|790|Runtime System error| | 
- 
-=== Downloader/Programmer: 800 - 899 === 
-^ErrorNr  ^Description  ^Solution  ^ 
-|800|target not found!(USB connection failed)|  | 
-|801|a error occurs while downloading!(Try to reopen)|  | 
-|802|no target image to load|  | 
-|803|connection to target lost|  | 
-|804|reopen failed|  | 
-|805|starting of Device failed|  | 
-|806|bdi is not in Debug mode|  | 
-|807|memmory writer is not implemented|  | 
-|808|bypass is not unlocked|  | 
-|809|programming failed|  | 
- 
-=== Debugger: 900 - 999 === 
-^ErrorNr  ^Description  ^Solution  ^ 
-|900|connection lost|  |