Solar Log Forum
21.05.2012 02:31 *
Willkommen Gast. Bitte einloggen oder registrieren.

Einloggen mit Benutzername, Passwort und Sitzungslänge
News: Forum auf Grund des Spamaufkommens auf manuelle Aktivierung neuer Benutzeraccounts umgestellt.
 
   Übersicht   Hilfe Suche Einloggen Registrieren  
Seiten: [1]   Nach unten
  Drucken  
Autor Thema: Absturz des Logger's  (Gelesen 356 mal)
Klaus D.
Globaler Moderator
Sr. Mitglied
*****
Offline Offline

Beiträge: 305

229942439
Profil anzeigen WWW
« am: 05.10.2010 20:19 »

Hallo Ingo,

welche Version von Yasdi nutzt du?




Zitat von Ingo:
---------------

Hallo Klaus

Ich hab seit neuestem einen recht seltsamen Effekt. Der Logger stürzt ab. Ich schick dir einfach mal meine Erkenntnisse, vielleicht kannst du ja relativ schnell was dazu sagen.
Ich hab ich schlau gemacht und bin mit gdb auf Debuginformationen gestoßen. Sie sagen:
Program terminated with signal 11, Segmentation fault.
#0  0x08055752 in NeuesKopplungSMAKanalObj (WR=0x98af9b0, Kanal=0xbfeaeb88)
    at codeSMA/KopplungSMAKanal.c:321
321   for (Temp = WR->Kanal; Temp->Naechste != NULL; Temp = Temp->Naechste);

Ich hab mir dann in der Schleife Ausgaben schreiben lassen:
// Das Ende der Liste Suchen
for (Temp = WR->Kanal; Temp->Naechste != NULL; Temp = Temp->Naechste)
  printf("OriginalName: %s Art: %s Name: %s, Beschreibung: %s\n", Temp->OriginalName, Temp->Art, Temp->Name, Temp->Beschreibung);

printf("\n\n"); // zeigt das Ende von for an

Dabei kommt eine ganze Reihe an sinnvollen Einträgen, am Ende dann sowas:

OriginalName: Inv.TmpLimStt Art: Realwert Name: Inv.TmpLimStt, Beschreibung: Automatisch konfigurierter Kanal Inv.TmpLimStt
OriginalName: Pkg.swRev Art: Realwert Name: Pkg.swRev, Beschreibung: Automatisch konfigurierter Kanal Pkg.swRev


OriginalName: SMA-SN Art: XçL Name: SMA-SN, Beschreibung: Automatisch konfigurierter Kanal SMA-SN
OriginalName:  Art: PçL Name: ¸çL, Beschreibung:
OriginalName:  Art: HçL Name: °çL, Beschreibung:
OriginalName:  Art: @çL Name: ¨çL, Beschreibung:
OriginalName:  Art: 8çL Name:  çL, Beschreibung:
OriginalName:  Art: 0çL Name: çL, Beschreibung:
OriginalName:  Art: (çL Name: çL, Beschreibung:
OriginalName:  Art:  çL Name: çL, Beschreibung: à:?


Dazwischen steht auch schon was ähnliches, das rutscht mir aber immer aus der Konsole raus :-)
Danach gehts wieder mit was sinnvollem weiter und das Ende ist dann wie beschrieben.
Dann kommt ein Segmentation fault.
Vielleicht kannst du dazu ja was sagen, wär cool. Ich steh nämlich schon mit dem was da passiert auf dem Schlauch.
Kann das was mit dem Einbinden von mysql zu tun haben?
vierle Grüße
Ingo
Gespeichert

Klaus D.
Globaler Moderator
Sr. Mitglied
*****
Offline Offline

Beiträge: 305

229942439
Profil anzeigen WWW
« Antworten #1 am: 05.10.2010 20:37 »

Was passiert, wenn du die Änderungen wieder rückgängig machst?
Gespeichert

Photon
Neuling
*
Offline Offline

Beiträge: 24


Profil anzeigen
« Antworten #2 am: 06.10.2010 09:19 »

Dann tritt es immer noch auf. Das seltsame ist, das auslesen funktioniert genau einmal für alle WR, dann fliegt das Programm raus.
Hast du irgendwo eine Zusammenfassung der grundsätzlichen Funktionsweise des Programms? Ich würd dann ein bisschen suchen, wo die Aufrufe der Reihe nach herkommen und was die bewirken sollen usw.
Gespeichert
Klaus D.
Globaler Moderator
Sr. Mitglied
*****
Offline Offline

Beiträge: 305

229942439
Profil anzeigen WWW
« Antworten #3 am: 06.10.2010 13:18 »

Kurz Nein... Nur die Kommentare in CODE...
Gespeichert

Photon
Neuling
*
Offline Offline

Beiträge: 24


Profil anzeigen
« Antworten #4 am: 16.10.2010 19:04 »

Also ich komm da leider nimmer weiter. Habs mit einigen Ausgaben an den verschiedensten Stellen im Programm versucht.
Das Problem scheint wohl zu sein dass Temp->Naechste irgendwann (nämlich immer beim zweiten Aufruf der genannten Funktion) irgendeinen Unsinn enthält und wild in die Gegend zeigt.
Aber woher das kommt und was ich dagegen tun kann weiß ich nicht, da hänge ich grad.

@Klaus hast du mir da noch einen Tip? Woher kommt diese verzeigerte Liste?
Gespeichert
Klaus D.
Globaler Moderator
Sr. Mitglied
*****
Offline Offline

Beiträge: 305

229942439
Profil anzeigen WWW
« Antworten #5 am: 17.10.2010 21:45 »

Ich hab die Stelle eigentlich mehrere male durchgedacht und kann keinen fehler erkennen.

Erklären kann ich dir des heute nimmer vieleicht die tage bin total ko heute.

Was mich nur wundert, ist, dass es schon mal funktioniert hat.
Eventuell mal wieder zurück auf die erste funktionierende Version und versuchen das Problem nach zu stellen.
Gespeichert

Photon
Neuling
*
Offline Offline

Beiträge: 24


Profil anzeigen
« Antworten #6 am: 26.10.2010 16:30 »

Ja mich wundert das genauso.
Ich hab schon die erste Version eingespielt, auch die komplette yasdilib nochmal von diesem Stand. Aber auch da tritt das Problem auf.

Aber ich bin jetzt evtl. doch einen Schritt weiter. Ich hab einige Debugausgaben gemacht und gemerkt dass diese Liste ab dem zweiten Einlesen der Kanäle wild in die Gegend zeigt. Das Ende der Liste wird nicht erkannt, weil da nicht NULL drin steht. Ich bin dann auf die Funktion KopplungSMAKanalAufraeumen gestoßen und hab in ihr vor dem return die Zeile
WR->Kanal = NULL;
eingebaut. Seit dem läufts wieder wie es soll. Warum das bisher funktioniert hat ist mir ein Rätsel.

Ausschlaggebend für meine Überlegung war, dass beim ersten Durchlauf die Kanalliste korrekt terminiert (mit NULL) wurde und beim zweiten mal nicht mehr. Das sah danach aus als würde sie nicht mehr richtig geleert, bevor sie zum zweiten mal gefüllt wird.
« Letzte Änderung: 26.10.2010 18:49 von Photon » Gespeichert
Klaus D.
Globaler Moderator
Sr. Mitglied
*****
Offline Offline

Beiträge: 305

229942439
Profil anzeigen WWW
« Antworten #7 am: 26.10.2010 19:01 »

Hallo Photon,

du hast recht, dass war noch ein Fehler.

Ich würde es so korregieren:

Code:
int KopplungSMAKanalAufraeumen (struct STRKopplungSMAWR *WR)
{
struct STRKopplungSMAKanal *Temp = NULL;
struct STRKopplungSMAKanal *TempALT = NULL;

DebugAusgabe (DebugPTKopplung, DebugLVRoutinen, "'KopplungSMAKanalAufraeumen' gestartet\n");

// Wenn ein Kanal Objekt vorhanden
if (WR->Kanal != NULL)
{
Temp = WR->Kanal;
TempALT = WR->Kanal;

while (Temp->Naechste != NULL)
{
Temp = Temp->Naechste;
free (TempALT);
TempALT = Temp;
}
free (TempALT);
WR->Kanal = NULL;
}

DebugAusgabe (DebugPTKopplung, DebugLVAlles, "'KopplungSMAKanalAufraeumen' erfolgreich beendet\n");
return 0;
}
Gespeichert

Seiten: [1]   Nach oben
  Drucken  
 
Gehe zu:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.11 | SMF © 2006-2009, Simple Machines LLC Prüfe XHTML 1.0 Prüfe CSS