Debugging für Experten (Docker)

Hinweis: Diese Anleitung hilft nur bei Abstürzen oder hängenden PHP-Threads!
Wenn euer IP-Symcon also nicht ständig zufällig aus der Prozessliste verschwindet, ist diese Anleitung nicht für euch.

Erstellt bitte, sofern es nicht einen ähnlichen Backtrace gibt, ein neues Thema für den jeweiligen Fehler!

Es gibt zwei unter Docker zwei Arten von Debugger, die wir nutzen können
a) GDB: Ein simpler Debugger, der für die meisten Probleme reicht
b) Valgrind: Ein eher komplexer Debugger, der auch Speicherprobleme erkennt. (Leider wird die Performance dabei locker um Faktor 5 reduziert)

A) Debuggen mit GDB
Alle weiteren Schritte können am einfachsten über Portainer erledigt werden.
Es wird davon ausgegangen, dass IP-Symcon korrekt startet und nicht schon beim Start abstürzt

Zuerst den Container in Portainer öffnen und auf „Console“ klicken.
Dort dann auf „Connect“.

Im Terminal folgendes eingeben, um GDB zu installieren


apt update
apt install gdb

Dann GDB nutzen um sich zum IP-Symcon Prozess zu verbinden


gdb --pid $(pidof symcon)

Sobald alles geladen wurde einfach den Prozess weiter laufen lassen


c + ENTER

B) Debuggen mit Valgrind
Portainer öffnen und den IP-Symcon Container editieren
Dabei im unteren Bereich bei „Command & logging“ den Command von ‚/usr/bin/symcon‘ auf folgendes ändern:


'/bin/bash' '-c' 'apt update; apt install -y valgrind; USE_ZEND_ALLOC=0 valgrind --log-file=/var/log/symcon/valgrind.log --leak-check=full --show-leak-kinds=all --track-origins=yes /usr/bin/symcon'

Den Container neu erstellen lassen. Dabei wird Valgrind installiert und IP-Symcon damit gestartet. Dies kann ein wenig länger dauern und IP-Symcon läuft insgesamt beim Debuggen wesentlich langsamer.

Die wichtigen und spannenden Ausgaben landen in der valgrind.log, welche im selben Ordner wie die IP-Symcon Logs landen.

Solltet ihr bei Option B) Hilfe brauchen, meldet auch gerne. Ich weiß, dass dies alles andere als „einfach“ ist :slight_smile: