Probleme mit Umlauten in Pfadnamen Linux_Lazarus_Debugger.

Für Fragen rund um die Ide und zum Debugger
Antworten
Frank Ranis
Beiträge: 201
Registriert: Do 24. Jan 2013, 21:22

Probleme mit Umlauten in Pfadnamen Linux_Lazarus_Debugger.

Beitrag von Frank Ranis »

Hallo,

gestern wollte ich einem Kollegen Lazarus vorführen , um ihn die Vorzüge von Lazarus/FreePascal schmackhaft zu machen.

Nun gut , habe ich auf dem verfügbaren Win7-Rechner eine neue Anwendung gestartet , ein paar Standard-Komponenten auf die Form geschmissen und mit etwas Leben gefüllt.
Halt um zu zeigen , wie schnell man eine erste kleine Anwendung erzeugen kann.
Das ganze Projekt dann in einem Ordner mit dem Namen 'Anfänger' abgelegt , so weit so gut, unter Windows.

Im nächsten Stepp wollte ich im zeigen , das man diese Anwendung auch ruckzuck unter Linux zum laufen bekommt.
Auf dem Rechner habe ich auch eine Virtuelle-Box mit Linux Mint drin.
Also Mint in der Box angeschmissen und den Ordner 'Anfänger' auf den Mint-Desktop gezogen , dann Lazarus mit dem Demoprojekt geöffnet.
F9 gedrückt und Laz fing an zu kompilieren , brach aber dann mit folgender Meldung ab :

Code: Alles auswählen

Hint: (11030) Start of reading config file /home/fr/Schreibtisch/LAZ_Stable/fpc/bin/x86_64-linux/fpc.cfg
Hint: (11031) End of reading config file /home/fr/Schreibtisch/LAZ_Stable/fpc/bin/x86_64-linux/fpc.cfg
Free Pascal Compiler version 3.0.4-r37149 [2019/05/15] for x86_64
Copyright (c) 1993-2017 by Florian Klaempfl and others
(1002) Target OS: Linux for x86-64
(3104) Compiling project1.lpr
(9022) Compiling resource /home/fr/Schreibtisch/Anfänger/lib/x86_64-linux/project1.or
(9015) Linking /home/fr/Schreibtisch/Anfänger/project1
/usr/bin/ld: warning: /home/fr/Schreibtisch/Anfänger/link.res contains output sections; did you forget -T?
/usr/bin/objcopy:/home/fr/Schreibtisch/Anfänger/stC1957d: cannot fill debug link section `"/home/fr/Schreibtisch/Anfänger/project1.dbg"': No such file or directory
/home/fr/Schreibtisch/Anfänger/project1.lpr(21,1) Error: (9013) Error while linking
/home/fr/Schreibtisch/Anfänger/project1.lpr(21,1) Fatal: (10026) There were 1 errors compiling module, stopping
Fatal: (1018) Compilation aborted
Error: /home/fr/Schreibtisch/LAZ_Stable/fpc/bin/x86_64-linux/ppcx64 returned an error exitcode

Na toll , diese Vorführung ging ja mal voll gegen den Baum , also irgendwas mit dem Debugger läuft schief.

Das Problem hat mit dann keine Ruhe gelassen und ich habe mit den Ordner 'Anfänger' auf nen Stick gezogen und zu Hause auf dem Lappi mit Unbutu noch mal probiert .
Gleicher Effekt , 'Error while linking' , Debuggerfehler.
Was mit total verunsichert hat , ich habe erheblich umfangreichere Projekte mit Lazarus unter Linux zum laufen gebracht und bei so einem Popel-Programm macht es nun Mucken.

Stichwort Debugger :
Also habe ich im nächsten Stepp unter Projekteinstellungen den Debugger ausgeschaltet:
Debugger-Informationen für GDB erzeugen auf (OFF).
Neu kompiliert und nun läuft das Progamm , debuggen geht jetzt aber nicht mehr.

Dann Debugger wieder (ON) und die Einstellung:
Externe Datei mit GDB-Debugsymbolen nutzen (-Xg) auf (OFF)

Jetzt kann ich zwar debuggen , aber meine Ausführbare Datei ist nun 21,4MB groß , was ein Schitt.

Danach habe ich noch ein paar Stunden mit diversen anderen Projekt-Einstellungen rumprobiert , aber ohne Erfolg.

Warum zum Teufel laufen meine Großprojekte und diese Simpelprogramm nicht ?
Wo ist der Unterschied ?
Hatte vor einigen Wochen mal enorme Problem mit Leerzeichen in Pfadangaben gehabt und die Leerzeichen ab dann immer vermieden und durchgehende Pfade mit Unterstrich als Trenner
verwendet .

Könnte das auch hier der Fall sein ?
Nö , der Projekt-Ordner heißt schlicht 'Anfänger' , ohne Leerzeichen drinn.

Und dann fiel es mir wie Schuppen von den Augen , ein 'ä' ist im Ordnernamen enthalten , bei meinen anderen Projektpfaden ist kein Umlaut drin.
Nun gut , ändere ich den Pfad mal in 'Anfaenger' um , ist ja schnell gemacht.

Das wars , alles wieder gut , alle Probleme weg , Debuggen geht , kleine Ausführbare Programme sind wieder möglich.
Der GDB-Debugger unter Linux kann keine Umlaute in Pfaden verkraften , unter Windows allerdings schon .


Fazit:
Benutzt unter Linux (in Verbindung mit Lazarus ) niemals Umlaute in Pfadnamen und auch keine Leerzeichen , ersetzt diese durch einen Tiefstrich '_' .
Und womit ich als Umsteiger von (20 Jahren) Windows auf Linux immer wieder Probleme habe , penibel auf die Groß-Klein-Schreibung achten.

Am besten unter Windows auch diese Punkte beachten (auch wenn es hier keine Auswirkungen hat) , dann kann man einfach die Ordner ohne Probleme , von einer Plattform auf die andere , hin und her kopieren .

Gruß

Frank
www.flz-vortex.de

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: Probleme mit Umlauten in Pfadnamen Linux_Lazarus_Debugge

Beitrag von MacWomble »

Beim mir geht das ohne Probleme (Linux Mint 19.2) :twisted:
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Probleme mit Umlauten in Pfadnamen Linux_Lazarus_Debugge

Beitrag von Warf »

Unter arch mit der neusten GDB version kein problem

Code: Alles auswählen

➜  /äöü fpc -g -Xg ./test.pas 
Free Pascal Compiler version 3.0.4 [2019/05/13] for x86_64
Copyright (c) 1993-2017 by Florian Klaempfl and others
Target OS: Linux for x86-64
Compiling ./test.pas
Linking test
/usr/sbin/ld: warning: link.res contains output sections; did you forget -T?
7 lines compiled, 0.1 sec
➜  /äöü gdb ./test
GNU gdb (GDB) 8.3.1
Copyright (C) 2019 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-pc-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.
 
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from ./test...
Reading symbols from /äöü/test.dbg...
(gdb)
 


Bei mir läufts auch in nem Mint 19 Docker container, versuch das ganze doch mal in nem Arch docker zu machen. Wenn das läuft liegts an der Distro, wenn nicht entweder am dateisystem, der Hardware oder dem Kernel:

Code: Alles auswählen

>docker run -it --name archtest archlinux:latest
[Wenn der Container gestartet hat:]
>pacman -Sy gdb fpc vim #oder nano, oder beliebigen anderen editor
>mkdir äöü
>cd äöü
>vim test.pas #datei erstellen, irgendwas, bei mir n simples Hello World
>fpc -g -Xg ./test.pas
>gdb ./test
>exit
>docker rm archtest #docker container wieder löschen, wobei der recht nützlich ist um sachen zu testen

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Probleme mit Umlauten in Pfadnamen Linux_Lazarus_Debugge

Beitrag von Warf »

Ok, ich konnte den Bug doch reproduzieren:

Code: Alles auswählen

➜  / fpc -g -Xg äöü/test.pas
Free Pascal Compiler version 3.0.4 [2019/05/13] for x86_64
Copyright (c) 1993-2017 by Florian Klaempfl and others
Target OS: Linux for x86-64
Compiling äöü/test.pas
Linking äöü/test
/usr/sbin/ld: warning: link.res contains output sections; did you forget -T?
/usr/sbin/objcopy:äöü/sthDeTfX: cannot fill debug link section `"äöü/test.dbg"': No such file or directory
test.pas(6,1) Error: Error while linking
test.pas(6,1) Fatal: There were 1 errors compiling module, stopping
Fatal: Compilation aborted
Error: /usr/bin/ppcx64 returned an error exitcode


Das ist übrigens kein bug in gdb. GDB ist an dieser stelle nicht mal beteiligt. Das ist ein bug mit objcopy. Aber anscheinend kann man den recht leicht fixen indem man den fpc direkt im richtigen verzeichnis als working dir ausführt (daher geht das im oberen post von mir).

PS:
Dann Debugger wieder (ON) und die Einstellung:
Externe Datei mit GDB-Debugsymbolen nutzen (-Xg) auf (OFF)

Jetzt kann ich zwar debuggen , aber meine Ausführbare Datei ist nun 21,4MB groß , was ein Schitt.


Und das problem ist was? Debugger builds willst du eh nicht weiterschicken und der Speicher wird so oder so belegt, obs jetzt 2 oder eine Datei ist, wen juckts? Es ist unter Linux sogar eigentlich extrem unüblich das man externe debugger symbole hat, daher ist die Toolchain um das zu machen ja auch: Compilieren mit debuggersymbolen -> Debuggersymbole in eigene datei kopieren -> debuggersymbole aus alter datei entfernen -> Debugger informationen link in exec hinzufügen.
Das ist so eine einführung von Windows, die nur über umwege bei Linux möglich ist (und diese umwege krachen bei dem beispiel)

PPS: hab mal die dbg datei per hand gebaut, das funktioniert problemlos:

Code: Alles auswählen

➜  / objcopy --only-keep-debug äöü/test äöü/test.dbg
➜  / strip --strip-debug --strip-unneeded äöü/test
➜  / objcopy --add-gnu-debuglink="äöü/test.dbg" äöü/test

Das ist also irgendein bug wie der FPC die Sachen aufruft.

Du kannst also bis das gefixt ist ein einfaches shellscript benutzen wenn du unbedingt eine externe debugger datei brauchst:

Code: Alles auswählen

#!/bin/bash
 
set -e
 
EXECNAME="$1"
DBGNAME="${EXECNAME%.*}.dbg"
 
objcopy --only-keep-debug "$EXECNAME" "$DBGNAME"
strip --strip-debug --strip-unneeded "$EXECNAME"
objcopy --add-gnu-debuglink="$EXECNAME" "$EXECNAME"

Benutzung:

Code: Alles auswählen

> vim /usr/local/bin/makedbg # die bash datei von oben erstellen (nur beim ersten mal)
> chmod +x /usr/local/bin/makedbg # ausführbar machen (nur beim ersten mal)
> fpc -g äöü/test.pas # exec kompilieren
> makedbg äöü/test # dbg datei erzeugen
Zuletzt geändert von Warf am Di 5. Nov 2019, 15:02, insgesamt 3-mal geändert.

martin_frb
Beiträge: 572
Registriert: Mi 25. Mär 2009, 21:12
OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
CPU-Target: mostly 32 bit

Re: Probleme mit Umlauten in Pfadnamen Linux_Lazarus_Debugge

Beitrag von martin_frb »

Das Problem ist nicht im Debugger.
Das Problem ist beim erzeugen der Infos, die der Debugger später braucht.

Nach dem compilieren wird gelinkt (ld), and irgendetwas ruft dabei "/usr/bin/objcopy" auf. Das ist Teil der linux distro. Und dein objcopy kommt mit Umlauten nicht klar.

---
Also was ist der Vorteil von -Xg?

Fürs Debuggen wird genau soviel Plattenplatz verbrauch. Nur halt in 2 (oder mehr) Dateien (also technisch brauch Xg mehr platz, weil es mehr Directory Entries schreibt).

Für Releases mach ich eh einen "clean build". Ohne debug info, und dann noch mal strip drüber laufen lassen.

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Probleme mit Umlauten in Pfadnamen Linux_Lazarus_Debugge

Beitrag von Warf »

martin_frb hat geschrieben:Nach dem compilieren wird gelinkt (ld), and irgendetwas ruft dabei "/usr/bin/objcopy" auf. Das ist Teil der linux distro. Und dein objcopy kommt mit Umlauten nicht klar.


Nö, siehe meinen post oben, objcopy kommt mit umlauten klar, das ist ein fpc bug

Aber ja, wenn man den kram verschicken will sollte man eh nen release build machen. Wers noch nicht kennt: Projekteinstellungen->Compilereinstellungen->Erstellmodi (Oben der [...] Button)->Create Debug And Release mode und tada, man hat nen modus für debug builds und einen für Release builds. Sauber vorkonfiguriert

Frank Ranis
Beiträge: 201
Registriert: Do 24. Jan 2013, 21:22

Re: Probleme mit Umlauten in Pfadnamen Linux_Lazarus_Debugge

Beitrag von Frank Ranis »

Hallo Warf,

ich danke dir , das Du dich mit dem Problem auseinandergesetzt hast .

Code: Alles auswählen

Das ist also irgendein bug wie der FPC die Sachen aufruft.
Du kannst also bis das gefixt ist ein einfaches shellscript benutzen wenn du unbedingt eine externe debugger datei brauchst:
 
Code: Alles auswählen
 
    #!/bin/bash
 
    set -e
 
    EXECNAME="$1"
    DBGNAME="${EXECNAME%.*}.dbg"
 
    objcopy --only-keep-debug "$EXECNAME" "$DBGNAME"
    strip --strip-debug --strip-unneeded "$EXECNAME"
    objcopy --add-gnu-debuglink="$EXECNAME" "$EXECNAME"
 
 
Benutzung:
 
Code: Alles auswählen
 
    > vim /usr/local/bin/makedbg # die bash datei von oben erstellen (nur beim ersten mal)
    > chmod +x /usr/local/bin/makedbg # ausführbar machen (nur beim ersten mal)
    > fpc -g äöü/test.pas # exec kompilieren
    > makedbg äöü/test # dbg datei erzeugen
 


Ok , keine Macke im Debugger , sondern beim FPC.
Ich probiere dein Script mal aus .

Code: Alles auswählen

, siehe meinen post oben, objcopy kommt mit umlauten klar, das ist ein fpc bug
 
Aber ja, wenn man den kram verschicken will sollte man eh nen release build machen. Wers noch nicht kennt: Projekteinstellungen->Compilereinstellungen->Erstellmodi (Oben der [...] Button)->Create Debug And Release mode und tada, man hat nen modus für debug builds und einen für Release builds. Sauber vorkonfiguriert


Die Erstellmodi habe ich schon öfter genutzt , ich muß das aber noch mehr zu Gewohnheit machen , noch mal danke für die Erinnerung.

Gruß

Frank
www.flz-vortex.de

Antworten