External SIGHUP, warum?

Für Fragen rund um die Ide und zum Debugger
thosch
Beiträge: 324
Registriert: Mo 10. Jul 2017, 20:32

External SIGHUP, warum?

Beitrag von thosch »

Hallo,

ich bin dabei, ein Konsolenprogramm unter Linux (Knoppix 7.7) zu entwickeln und erhalte diese Exception, wenn ich mein Konsolenprogramm ausführen will.

Als Startparameter habe ich diese Zeile hier angegeben und das Häkchen in "Startprogramm verwenden" ist gesetzt.
/usr/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)

Auch diese Zeile:
/usr/bin/xterm -T -nohup 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)

schafft keine Abhilfe.

Warum kann ich mich nicht mit der Konsole verbinden, obwohl ich mit Lazarus auf der KDE entwickle. Ist XTerm da nicht standardmäßig installiert?

Jole
Beiträge: 114
Registriert: Fr 4. Jul 2014, 14:39
OS, Lazarus, FPC: Linux
CPU-Target: amd64

Re: External SIGHUP, warum?

Beitrag von Jole »

Warum kann ich mich nicht mit der Konsole verbinden, obwohl ich mit Lazarus auf der KDE entwickle. Ist XTerm da nicht standardmäßig installiert?

Bei meinem Linux Mint cinnamon ist es nicht standardmäßig installiert. Du kannst auch in der Anwendungsverwaltung nachschauen ob's installiert ist.
Normalerweise erkennt Lazarus aber welches Terminal installiert ist.

thosch
Beiträge: 324
Registriert: Mo 10. Jul 2017, 20:32

Re: External SIGHUP, warum?

Beitrag von thosch »

Danke erst mal so weit für die Hilfestellung @Jole.

Ich habe das xterm Kommando auf der Konsole aufgerufen "xtrem --help" und die Hilfe erhalten. So gehe ich davon aus, das xterm auch installiert ist. Auch das gnome terminal ist installiert und nur das zeigt sich auch.

Allerdings scrollt da eine Meldung EAccessViolation, an unhandled exception occured at: $08060037, $0805A354, $08048D65.

Trotzdem kriege ich das Terminal beim Start meines Programmes von der IDE aus nicht zu sehen. Was kann ich noch machen?



Eigenartigerweise funktioniert mein Programm in der Win10 Konsole so wie es soll.

Warum dann nicht in der Linux Konsole?

Ich verwende Lazarus 1.8.0~rc4+dfsg-1 i386-linux.gtk2 debian package vom 16.08.2017 mit Freepascal 3.0.2
.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: External SIGHUP, warum?

Beitrag von Mathias »

ich bin dabei, ein Konsolenprogramm unter Linux (Knoppix 7.7) zu entwickeln und erhalte diese Exception, wenn ich mein Konsolenprogramm ausführen will.

Hast du in deinem Programm-Pfad ein Leerzeichen, wen ja, kannst du die Konsole vergessen. Wegen diesem Problem habe ich mal eine ganzen Abend geübt.
Was kam für eine Exception ?


Bei meinem Linux Mint cinnamon ist es nicht standardmäßig installiert.

Wen du in deiner Standard-Konsole xterm eingibst, weist du sofort, ob es installiert ist.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

thosch
Beiträge: 324
Registriert: Mo 10. Jul 2017, 20:32

Re: External SIGHUP, warum?

Beitrag von thosch »

So sieht meine Programmzeile als Startparameter aus:
/usr/bin/gnome-terminal -t 'Lazarus Run Output' -e '$(LazarusDir)/tools/runwait.sh $(TargetCmdLine)'

Ich erhalte eine EAccessViolation mit den oben genannten Adressangaben. Nur diese 3 Adressen.

Im Pfad zu meiner Anwendung ist kein Leerzeichen. Aber leider in der oben aufgeführten Kommandozeile. Wie aber soll ich dann das Terminal aufrufen. Das gnome Terminal zeigt sich zumindest schon mal.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: External SIGHUP, warum?

Beitrag von Mathias »

Ich habe gerade deine Zeile probiert, hier kommt bei mir nur ein Debuggerfehler.

Code: Alles auswählen

/usr/bin/gnome-terminal -t 'Lazarus Run Output' -e '$(LazarusDir)/tools/runwait.sh $(TargetCmdLine)'


Bei mir steht normaler weids folgende Zeile, diese geht bei mir ohne Fehler:

Code: Alles auswählen

/usr/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: External SIGHUP, warum?

Beitrag von Mathias »

Wen einem die Konsole mit 80x25 zu klein ist, der kann folgender Parameter verwenden:

Code: Alles auswählen

/usr/bin/xterm  -geometry 160x50 -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

thosch
Beiträge: 324
Registriert: Mo 10. Jul 2017, 20:32

Re: External SIGHUP, warum?

Beitrag von thosch »

Mathias hat geschrieben:Wen einem die Konsole mit 80x25 zu klein ist, der kann folgender Parameter verwenden:

Code: Alles auswählen

/usr/bin/xterm  -geometry 160x50 -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)


Hilft leider auch nicht weiter. Ich erhalte dann noch immer eine schrollende Meldung :

an unhandled exception occured at $08048DF5 und 2 weitere Adressen: $080600C7,$0805A3E4.

Irgendwas klappt mit der Adressierung der Konsole nicht.

mit dem zusätzlichen geometry Parameter wird lediglich das Terminal größer.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: External SIGHUP, warum?

Beitrag von Mathias »

Hilft leider auch nicht weiter. Ich erhalte dann noch immer eine schrollende Meldung :

Versuche mal folgendes:

Code: Alles auswählen

/usr/bin/xterm $(TargetCmdLine)
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

thosch
Beiträge: 324
Registriert: Mo 10. Jul 2017, 20:32

Re: External SIGHUP, warum?

Beitrag von thosch »

Mathias hat geschrieben:
Hilft leider auch nicht weiter. Ich erhalte dann noch immer eine schrollende Meldung :

Versuche mal folgendes:

Code: Alles auswählen

/usr/bin/xterm $(TargetCmdLine)


Nein, leider auch nicht, da erscheint überhaupt kein Terminal mehr. Da kommt sofort das Messagefenster "Ausführung beendet". Was mag das bloß sein?

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: External SIGHUP, warum?

Beitrag von Mathias »

Versuche mal ein anderes Terminal.
Ich habe es mal mit aterm probiert, auf meinem Mint geht es auch mit diesem.
Ob es dies auch auf dem Raspi gibt, kann ich nicht sagen, aber es wäre noch ein Versuch.

Code: Alles auswählen

sudo apt-get install aterm


Natürlich müsste auch dies angepasst werde:

Code: Alles auswählen

/usr/bin/aterm $(TargetCmdLine)
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

thosch
Beiträge: 324
Registriert: Mo 10. Jul 2017, 20:32

Re: External SIGHUP, warum?

Beitrag von thosch »

Mathias hat geschrieben:Versuche mal ein anderes Terminal.
Ich habe es mal mit aterm probiert, auf meinem Mint geht es auch mit diesem.
Ob es dies auch auf dem Raspi gibt, kann ich nicht sagen, aber es wäre noch ein Versuch.

Code: Alles auswählen

sudo apt-get install aterm


Natürlich müsste auch dies angepasst werde:

Code: Alles auswählen

/usr/bin/aterm $(TargetCmdLine)


Bin gerade beim Installieren des Paketes "aterm". Dabei erschein ein Dialog mit folgender Meldung:
Eine neue Version (/tmp/yXcFvH3RdC) der Konfigurationsdatei │
│ /UNIONFS/etc/perl/XML/SAX/ParserDetails.ini ist verfügbar, aber die │
│ installierte Version wurde verändert. │
│ │
│ Wie wollen Sie mit der geänderten Konfigurationsdatei ParserDetails.ini │
│ verfahren? │
│ │
│ Version des Paketbetreuers installieren │
│ aktuell lokal installierte Version beibehalten │
│ Unterschiede zwischen den Versionen anzeigen │
│ Unterschiede zwischen den Versionen nebeneinander anzeigen │
│ die Angelegenheit in einer neu gestarteten Shell untersuchen │
│ │
│ │
│ <Ok> │
│ │


Wozu ist diese Ini Datei gut? Muss ich die neue Version installieren oder die alte beibehalten? Welchen Einfluss hat diese Entscheidung auf das Verhalten meines restlichen Systems?

Andererseits wurde ja laut Aussage dieses Dialoges diese Ini Datei schon verändert. Was aber heißt dann "aktuell lokal installierte Version beibehalten"?

Von welchen Prozessen wird diese Ini Datei überhaupt verwendet?

Ich hatte noch eine andere Idee. Kann es sein, dass ich eine Linux-spezifische Unit noch mit einbinden muss? Das habe ich bisher vermieden, weil mein Konsolenprogramm plattformunabhängig arbeiten soll. Aber mit bedingter Compilierung geht ja da auch was.

So hier sieht meine runwait.sh Datei jedenfalls aus. Ich hatte daran gedacht, hier etwas zu verändern. Aber wie?


#!/bin/sh

CommandLine=$@
#set -x

echo $CommandLine
ext=${CommandLine#*.}
if [ "$ext" = "exe" ]; then
echo "Windows Executable detected. Attempting to use WINE..."
if [ -x "`which wine`" ]; then
wine $CommandLine
else
echo "WINE not found in path"
fi
else
$CommandLine
fi

echo "--------------------------------------------------"
echo "Press enter"
read trash crash

# end.


Habe den Dialog erst mal abgebrochen, eher versehentlich. Aber nun erhalte ich die Meldung, dass einige perl Pakete beschädigt sind und damit die Installation eh fehlschlägt.

Habe jetzt

/usr/bin/xterm da stehen, da erscheint mein Xterm Terminal.

Wenn ich aber nun manuell meine Konsolenanwendung starten will kommt die Meldung Datei wurde nicht gefunden. Muss ich da noch irgendwas davor setzen. sh oder bash oder was anderes? Generell kann ich vom Terminal aus Kommandozeilenprogramme aufrufen, habe das soeben mit mc (Midnight Commander) getestet. Warum findet mein System die Anwendung im eigenen Verzeichnis nicht?

Als Workaround würde ich dann nämlich den Namen meiner konkreten App statt des Makros $(TargetCmdLine) eintragen. Ich befinde mich für den Aufruf meiner App im Verzeichnis meiner Anwendung.

Ich habe gerade noch ein anderes Forum hier:
http://www.delphipraxis.net/182569-wie- ... ieren.html

gefunden, wo gesagt wird dass unter Linux ein Programm unter /usr/local/bin zu installieren ist.

Wenn ich aber meine Lazarusanwendung vorher erst testen will????

Wie ist da die korrekte Vorgehensweise. Ich habe es geschafft, von der Konsole aus <Alt+Fx> meine Anwendung zu starten. Allerdings erhalte ich da auch die scrollende Exception Meldung.

Um dieses Testprogramm handelt es sich:

Code: Alles auswählen

 
begin
  InitKeyBoard;
  Writeln('Press keys, press "q" to end.');
  Repeat
    K:=GetKeyEvent;
    K:=TranslateKeyEvent(K);
    Write('Got key event with ');
    Case GetKeyEventFlags(K) of
      kbASCII    : Writeln('ASCII key');
      kbUniCode  : Writeln('Unicode key');
      kbFnKey    : Writeln('Function key');
      kbPhys     : Writeln('Physical key');
      kbReleased : Writeln('Released key event');
    end;
    Writeln('Got key : ',KeyEventToString(K));
  Until (GetKeyEventChar(K)='q');
  DoneKeyBoard;
  writeln('Zurück mit Enter ... ');
  Readln;
\0end;
 


Also nix Besonderes. Ist nur erst mal zum Einrichten der Kosole. Das Testprogramm ist per Copy & Paste aus der Freepascal Dokumentation zur Keyboard Unit entnommen.

Ich habe dazu ein einfaches Freepascalprogramm (ohne TCustomapplication) erzeugt, die Unit Keyboard in die Uses Klausel aufgenommen und den obigen Code aus der Freepascal Doku kopiert. Es muss also ein Problem mit der Konsolenanbindung vorliegen. Oder der Compiler erzeugt fehlerhaften Code für das Konsolenprogramm. Das ware dann doch ein Fall für den Bugreport.

Oder es findet sich doch noch die rettende Lösung.

.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: External SIGHUP, warum?

Beitrag von Mathias »

So hier sieht meine runwait.sh Datei jedenfalls aus. Ich hatte daran gedacht, hier etwas zu verändern. Aber wie?

An dieser liegt es kaum.


Wenn ich aber nun manuell meine Konsolenanwendung starten will kommt die Meldung Datei wurde nicht gefunden.

Hast du

Code: Alles auswählen

./meinApp
geschrieben ?

Noch etwas zu deinem Testprogramm, wieso verwendest du nicht die Unit CRT ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

thosch
Beiträge: 324
Registriert: Mo 10. Jul 2017, 20:32

Re: External SIGHUP, warum?

Beitrag von thosch »

Mathias hat geschrieben:
So hier sieht meine runwait.sh Datei jedenfalls aus. Ich hatte daran gedacht, hier etwas zu verändern. Aber wie?

An dieser liegt es kaum.


Ok, da wäre die also in Ordnung.

Mathias hat geschrieben:
Wenn ich aber nun manuell meine Konsolenanwendung starten will kommt die Meldung Datei wurde nicht gefunden.

Hast du

Code: Alles auswählen

./meinApp
geschrieben ?


Ja, jetzt habe ich statt $(TargetCmdLine) den Namen meiner App dort stehen.

Mathias hat geschrieben:Noch etwas zu deinem Testprogramm, wieso verwendest du nicht die Unit CRT ?


Doch, die ist in der Uses Klausel!

Ich lade hier mal meine testmsg Applikation hoch. Kannst Du die bitte mal auf Deinem System testen? Wenn sie bei Dir funktioniert, liegt es an meinen Systemeinstellungen. Wenn nicht, muss ein Fehler im Lazarus Compiler vorliegen. Wenn ich die APp nämlich hier auf der Konsole ausführe, erhalte ich auch die EAccessviolation und den scrollenden Bildschirm. Mir bleibt dann nur, die Konsole zu wechseln, um weiter arbeiten zu können.

Die App verhält sich dann korrekt, wenn sie diesen Anfangsbildschirm zeigt:

Leerer Bildschirm mit folgender Aufforderung zur Eingabe:

'Press keys, press "q" to end.'

Im Laufe der Eingaben wird die erhaltene Taste angezeigt:

'Got Key' + Tastencode. Bei den Ascii Tasten der entsprechende Buchstabe. Die Taste 'q' beendet die App.

Wenn sie sich so verhält, funktioniert sie korrekt, sonst nicht.

Quellcode wie 2 Beiträge davor.
Dateianhänge
testmsg.tar
Meine Testapplikation "testmsg"
(2.19 MiB) 89-mal heruntergeladen

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: External SIGHUP, warum?

Beitrag von Mathias »

Ist das Zufall, das hier über keyboard diskutiert wird, oder hast du hier geschrieben ?
http://lists.freepascal.org/pipermail/f ... 38278.html

Mal eine andere Frage, hast du etwas spezielles mit der Konsole vor ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten