Ich habe einen recht umfangreichen Dienst programmiert. Klein begonnen, hat ganz gut funktioniert, dann immer mehr eingebaut, jetzt macht er plötzlich Zicken. Leider ist nicht herauszubekommen war er so treibt. Wenn ich ihn interaktiv ausführe (-run),läuft er tadellos. Im Hintergrund (ausgeführt unter dem selben User, oder auch als root - das ändert gar nichts) ist er stumm wie ein Fisch. Er schreibt nicht auf die Konsole (writeln, debugln), er schreibt auch nicht in eine Datei, weder mit den üblichen Dateikommandos, noch mit set Lazarus_debuglog= und DebugLn. Parallel habe ich natürlich versucht, es ihm erst mal einfach zu machen, und ihm als Verzeichnis für Ausgaben ein extra Unterverzeichnis /var/log/test angelegt, mit chmod 777 /var/log/test, auch kontrolliert mir ls -l, passt, aber da erscheint trotzdem keine Datei.
Ich kann den Debugger anhängen, aber der landet irgendwo in einem Haufen nutzloser Adressen, auch der Call-Stack listet keine einzige bekannte Routine auf, obwohl ich natürlich mit Debug gebaut habe, und interaktiv von Lazarus aus tadellos debuggen kann. Ich habe in so ziemlich jeder Schleife, wo der Code eigentlich vorbei kommen müsste, Breakpoints gesetzt, interaktiv hält er an, nach "Attach to Process" triggert kein Einziger davon.
Vielleicht ist zu diesem Zeitpunkt ja schon so ziemlich alles abgestürzt? EIn paar Mal konnte ich sowas beobachten, der Daemon ging dann auf stop, und danach hat systemctl status mir immerhin einen Stacktrace und einen Fehlercode ausgeworfen. Jetzt steht da garnichts.
Und jetzt suche ich irgendeinen Ansatzpunkt, wie ich irgendwie Ausgaben irgendwo hin zaubern kann um zu sehen, wie weit der Code denn überhaupt kommt. Was habe ich überhaupt an Bewaffnung zur Verfügung? Geht etwa irgendwie das Schreiben auf die Konsole, immerhin führe ich den Daemon (nachkontrolliert mir ps) ja unter meinem User-Account aus, trotzdem schreibt er wohl nicht auf meine Konsole.
Schön wäre natürlich, ich könnte möglichst früh den Debugger "attachen". Unter Windows hat mir einer von euch die geniale Zeile
Code: Alles auswählen
While not IsDebuggerPresent do sleep(100);
Wer hat Ideen???
Thnx, Armin.