Ich hab ein kleines CLI tool in Swift geschrieben, das ich heute mit einem aktuellen Swift-Build unter Linux zum Laufen gebracht habe. Nichts großes. Ein paar Textdateien werden eingelesen, verarbeitet, verquirrlt und dann wird abschließend auf stdout, also
Das ganze läuft unter OS X bestens, unter Linux eigentlich auch (sogar leicht performanter...**), allerdings schließt das unter Linux _nach_ dem kompletten Durchlauf mit einem segfault ab.
Die Fehlermeldung(en), die ich bekomme:
- Im Terminal:
- In syslog:
Ich gehe von folgenden Annahmen aus:
- Das segfault unter Linux liegt nicht an meinem Code. Sonst sollte das auch unter OS X passieren.
- Das ist kein Fehler der stdlib, sondern von corelibs-foundation.
- Da wird ein
- Das geschieht in der NSXML*-Implementierung von corelibs-foundation.
- Voodoo.
In Xcode geht's in solche Fällen einfach in den Debugger, und man kann sich den Zustand und den Callstack anschauen. Was nur macht man in so einem Fall dann unter Linux? Welche tools gibt's da?
Hat da jemand Erfahrung und kann weiterhelfen?
* Kann man irgendwie unter Linux (Ubuntu) dem Terminal beibringen Englisch zu sprechen?
** Irgendwann, wenn die Swift-Implementierung von Foundation mal weiter ist, wäre es bestimmt interessant da zu testen, wieviel die Objective-C-Runtime kostet...
print()
Text ausgespuckt. Abgesehen von der stdlib, nur ein paar Foundation-Methoden in NSString und NSXML*, die offensichtlich schon implementiert sind. Nur eine kleine Anpassung war nötig: NSJapaneseEUCStringEncoding ist in corelibs-foundation anscheinend noch nicht implementiert.Das ganze läuft unter OS X bestens, unter Linux eigentlich auch (sogar leicht performanter...**), allerdings schließt das unter Linux _nach_ dem kompletten Durchlauf mit einem segfault ab.
Die Fehlermeldung(en), die ich bekomme:
- Im Terminal:
Speicherzugriffsfehler (Speicherabzug geschrieben)
*- In syslog:
xxx[2529]: segfault at 0 ip 00007f54d943e892 sp 00007fff3a855d60 error 4 in libc-2.21.so[7f54d93ba000+1c0000]
Ich gehe von folgenden Annahmen aus:
- Das segfault unter Linux liegt nicht an meinem Code. Sonst sollte das auch unter OS X passieren.
- Das ist kein Fehler der stdlib, sondern von corelibs-foundation.
- Da wird ein
free()
zuviel aufgerufen.- Das geschieht in der NSXML*-Implementierung von corelibs-foundation.
- Voodoo.
In Xcode geht's in solche Fällen einfach in den Debugger, und man kann sich den Zustand und den Callstack anschauen. Was nur macht man in so einem Fall dann unter Linux? Welche tools gibt's da?
Hat da jemand Erfahrung und kann weiterhelfen?
* Kann man irgendwie unter Linux (Ubuntu) dem Terminal beibringen Englisch zu sprechen?
** Irgendwann, wenn die Swift-Implementierung von Foundation mal weiter ist, wäre es bestimmt interessant da zu testen, wieviel die Objective-C-Runtime kostet...
Das iPhone sagt: "Zum Antworten streichen". Wie? Echt Jetzt? Muß ich erst die Wohnung streichen!?