Arbeitsbereich Programmiersprachen Foren-Übersicht
Autor Nachricht

<  Archiv WS 2010/2011  ~  SPIM hängt?

Simson
Verfasst am: 11 Feb 2011 21:36 Antworten mit Zitat
Anmeldungsdatum: 23.10.2007 Beiträge: 55
Wenn ich LinkedList.kg nach MIPS übersetze und dann JUnit mit SPIM starte, passiert einfach gar nichts mehr. Alle anderen Testfälle laufen fehlerfrei durch. Für LinkedList gibt es auch keinen Fehler, er stoppt nur einfach nicht =/ Ne Idee?
Benutzer-Profile anzeigen Private Nachricht senden ICQ-Nummer
konrada
Verfasst am: 13 Feb 2011 20:15 Antworten mit Zitat
Anmeldungsdatum: 19.10.2009 Beiträge: 160 Wohnort: Freiburg
Starte mal den Testfall im Debugger und unterbrech ihn, wenn er hängt (über die View, die man in der Debug-Perspektive links oben hat)
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Simson
Verfasst am: 14 Feb 2011 19:00 Antworten mit Zitat
Anmeldungsdatum: 23.10.2007 Beiträge: 55
Hm, hab leider grad nur ein Win-System zu Hand und da bekomm ich das nicht zum Laufen.

Aber qtSpim sagt mir:
Code:
Exception occurred at PC=0x00400220
Bad address in data/stack read: 0x00000000

Das seh ich ein.

Anscheinend passiert das hierbei:
Code:
[80000180] 0001d821 addu $27,$0,$1
; 90: move $k1 $at # Save $at


Der Code steht unter "Kernel Text Segment [80000000]..[80010000]". Aber ehrlich gesagt, versteh ich eh nicht so ganz, was das guiDing mit meinem Code anstellt... Vermutlich nicht besonders hilfreich =)

Edit: Was mich auch verwundert ist, dass das Programm wohl nicht immer an der gleichen Stelle crasht. Jedenfalls kommt Spim bei verschiedenen Durchläufen mit der Ausgabe der LinkedList Ergebnisse unterschiedlich weit...
Benutzer-Profile anzeigen Private Nachricht senden ICQ-Nummer
konrada
Verfasst am: 15 Feb 2011 7:55 Antworten mit Zitat
Anmeldungsdatum: 19.10.2009 Beiträge: 160 Wohnort: Freiburg
Kannst Du mal ein crashendes MIPS-Programm posten?
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Simson
Verfasst am: 15 Feb 2011 10:38 Antworten mit Zitat
Anmeldungsdatum: 23.10.2007 Beiträge: 55
Sehr gern:
http://nopaste.info/4114c0e68a.html


Vielen Dank
Benutzer-Profile anzeigen Private Nachricht senden ICQ-Nummer
konrada
Verfasst am: 15 Feb 2011 10:52 Antworten mit Zitat
Anmeldungsdatum: 19.10.2009 Beiträge: 160 Wohnort: Freiburg
Au, lang. Hast Du ein kleineres Beispiel, das crasht?

Kurzdiagnose: nach etwa 4210 Instruktionen (Spim-Kommando "s 4210") wird in Zeile 1102 "lw $t1, 0($t0)" ausgefuehrt, waehrend $t0 eine 0 enthaelt. Die 0 ist irgendein Returnwert aus dem v0-Register der Proc, die in Zeile 519 returnt.
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
konrada
Verfasst am: 15 Feb 2011 10:57 Antworten mit Zitat
Anmeldungsdatum: 19.10.2009 Beiträge: 160 Wohnort: Freiburg
Und
Code:

sw $fp,  -8($sp)

im Proc-Prolog ist gefaehrlich: es kann jederzeit ein Interrupt kommen und ein paar Words auf den Stack pushen, dann ist in -8($sp) ploetzlich Dreck drin.
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Simson
Verfasst am: 15 Feb 2011 15:05 Antworten mit Zitat
Anmeldungsdatum: 23.10.2007 Beiträge: 55
Danke schonmal für die Hinweise. Leider habe ich kein kleineres Programm, das crasht - es ist überhaupt das einzige, das nicht funktioniert.
konrada hat folgendes geschrieben::
Starte mal den Testfall im Debugger und unterbrech ihn, wenn er hängt (über die View, die man in der Debug-Perspektive links oben hat)

Hm, was genau meinst Du? Ich habe den Test jetzt im Debugmode gestartet. Wenn er hängt steht in der View links oben:
Code:
 KangaToMips [JUnit]   
   org.eclipse.jdt.internal.junit.runner.RemoteTestRunner at localhost:49764   
      Thread [main] (Running)   
      Thread [ReaderThread] (Running)   
      Daemon Thread [process reaper] (Running)   
   /usr/local/soylatte16-i386-1.0.3/bin/java (15.02.2011 13:58:05)


Aber das ist ja nicht besonders hilfreich, oder?

Edit: Wenn ich 'suspend' mache sehe ich das hier:
Code:
KangaToMips [JUnit]   
   org.eclipse.jdt.internal.junit.runner.RemoteTestRunner at localhost:49820 (Suspended)   
      Daemon System Thread [Signal Dispatcher] (Suspended)   
      Daemon System Thread [Finalizer] (Suspended)   
      Daemon System Thread [Reference Handler] (Suspended)   
      Thread [main] (Suspended)   
      Thread [ReaderThread] (Suspended)   
      Daemon Thread [process reaper] (Suspended)   
   /usr/local/soylatte16-i386-1.0.3/bin/java (15.02.2011 14:06:34)   


Zuletzt bearbeitet von Simson am 15 Feb 2011 15:07, insgesamt ein Mal bearbeitet
Benutzer-Profile anzeigen Private Nachricht senden ICQ-Nummer
konrada
Verfasst am: 15 Feb 2011 15:07 Antworten mit Zitat
Anmeldungsdatum: 19.10.2009 Beiträge: 160 Wohnort: Freiburg
Die Geschichte mit dem Debugger hab ich unter der Annahme geschrieben, dass Spim bei Dir nicht korrekt gestartet wird (so hatte ich Deine Problembeschreibung aufgefasst). Das, was Du danach geschrieben hast, deutet darauf hin, dass Spim zwar korrekt gestartet wird, aber der Assemblercode irgendwo einen logischen Fehler enthaelt.
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Simson
Verfasst am: 15 Feb 2011 15:08 Antworten mit Zitat
Anmeldungsdatum: 23.10.2007 Beiträge: 55
Nachdem ich es jetzt mit spim unter linux, mac und windows getestet habe glaube ich das auch =)
Benutzer-Profile anzeigen Private Nachricht senden ICQ-Nummer
Simson
Verfasst am: 15 Feb 2011 15:24 Antworten mit Zitat
Anmeldungsdatum: 23.10.2007 Beiträge: 55
Dank Jans Testfällen habe ich doch noch ein kleineres Program gefunden, das sich aufhängt: http://nopaste.info/8bbea3fd8a.html
Benutzer-Profile anzeigen Private Nachricht senden ICQ-Nummer
konrada
Verfasst am: 15 Feb 2011 15:38 Antworten mit Zitat
Anmeldungsdatum: 19.10.2009 Beiträge: 160 Wohnort: Freiburg
Zeile 42 und 43: da werden Stack-frame-Daten mal mit $sp, mal mit $fp adressiert. Ob das Absicht ist, kann ich nicht erkennen. Ich empfehle dringend, Zugriffe auf Adressen im Stackframe alle mit $fp-relativen Adressangaben durchzufuehren. Sonst verwirrend und fehlertraechtig.
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Simson
Verfasst am: 15 Feb 2011 15:55 Antworten mit Zitat
Anmeldungsdatum: 23.10.2007 Beiträge: 55
Super, das wars. Danke! Ist natürlich keine Absicht... War ein klassischer c&p Fehler =/
Benutzer-Profile anzeigen Private Nachricht senden ICQ-Nummer
Simon2
Verfasst am: 15 Feb 2011 21:49 Antworten mit Zitat
Anmeldungsdatum: 07.01.2011 Beiträge: 11
konrada hat folgendes geschrieben::
Und
Code:

sw $fp,  -8($sp)

im Proc-Prolog ist gefaehrlich: es kann jederzeit ein Interrupt kommen und ein paar Words auf den Stack pushen, dann ist in -8($sp) ploetzlich Dreck drin.

Was heißt das jetzt genau? Ich hab das auch so gemacht, und in den Beispielen von UCLA finden sich auch negative Offsets vorm $sp... Simuliert spim solche Interrupts? Ich habe das nämlich auch so und hielt das bis eben für unproblematisch. Ich hatte nämlich total die tolle Idee für mein Stack Layout, welche etwas von der Norm abweicht.
Benutzer-Profile anzeigen Private Nachricht senden
konrada
Verfasst am: 16 Feb 2011 9:44 Antworten mit Zitat
Anmeldungsdatum: 19.10.2009 Beiträge: 160 Wohnort: Freiburg
Wenn kein Interrupt kommt, kann man auch nach -8($sp) speichern. Bei uns kommen keine Interrupts. So gesehen ist es ungefährlich.

Aber wenn Ihr mal nen richtigen Compiler schreibt, fangt Ihr Euch nichtdeterministisch kaputtgehende Spills ein, graesslich.
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen

Beiträge vom vorherigen Thema anzeigen:  

Alle Zeiten sind GMT + 2 Stunden
Seite 1 von 1
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.

Gehe zu:  

Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.