xdebug, notepad++ und DBGp

Hallo,
nach einiger Zeit rumprobieren, habe ich es nun geschafft IP-Symcon dazu zu bringen mit xdebug zusammenzuarbeiten. Aus diesem Grund hier eine kurze Anleitung. Was ich leider (bisher?) nicht geschafft habe ist xdebug dazu zu bringen per PHP-Code die Verbindung zum Debug-Client aufzubauen.

Schritt 1: xdebug-DLL downloaden
Unter http://xdebug.org/download.php kann findet man die Windows-Releases von xdebug. Man braucht eine VC9 TS (32 bit)-Version. Zusätzlich muss die PHP-Version der DLL zu IP-Symcon passen. Die Version von PHP erhält man mit dem PHP-Befehl phpinfo(); Einfach in ein Script einfügen und dieses ausführen.

Ich habe für meine Installation die xdebug-Datei (Version Xdebug 2.2.3) „PHP 5.4 VC9 TS (32 bit)“ heruntergeladen.

Schritt 2: xdebug-DLL im IP-Symcon-Verzeichnis ablegen
Wichtig ist, dass Ihr die DLL nicht im Verzeichnis ext (z.B. C:\IP-Symcon\ext) ablegt. Wenn die DLL dort liegt, dann versucht IP-Symcon diese als PHP-Extension zu laden, was für xdebug nicht korrekt ist. Ich habe unter „ext“ das Verzeichnis Zend angelegt und die DLL dort abgelegt. Somit:

C:\IP-Symcon\ext\zend\php_xdebug-2.2.3-5.4-vc9.dll

Schritt 3: php.ini anpassen:
Die php.ini von IP-Symcon liegt im Root-Verzeichnis der Installation. Bei mir ist der Pfad „C:\IP-Symcon\php.ini“. Diese mit einem Editor (z.B. notepad++) öffnen, und folgendes in die Datei einfügen (bitte die Pfade gegebenfalls anpassen):

[xdebug]
zend_extension = "C:\IP-Symcon\ext\zend\php_xdebug-2.2.3-5.4-vc9.dll"
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_mode=jit
xdebug.remote_autostart=0
xdebug.idekey=default
xdebug.remote_log="c:	emp\xdebug\xdebug.log"
xdebug.show_exception_trace=0
xdebug.show_local_vars=9
xdebug.show_mem_delta=0
xdebug.trace_format=0
xdebug.profiler_enable=1
xdebug.profiler_output_dir ="c:	emp\xdebug"

Schritt 4: Ip-Symcon-Service neu starten
Hierzu in unter Systemsteuerung->Verwaltung auf Dienste doppelklicken und „IP-Symcon Environment“ suchen. Rechte Maustaste in im Kontext-Menu „Neu starten“ auswählen.

Schritt 5: Einen Debug-Client installieren
Ich verwende Notepad++ und das Plugin DBGp. Download-Pfade:
Notepad++: http://notepad-plus-plus.org/
DBGp-Plugin: http://sourceforge.net/projects/npp-plugins/files/

Zuerst Notepad++ installieren und dann das Plugin (dbgpPlugin.dll) in das Verzeichnis „plugins“ der Notepad+±Installation entpacken.

Schritt 6: DBGp-Plugin konfigurieren
Notepad++ starten und dann im Menu Erweiterungen->DBGp->Config… auswählen. Dort folgendes eintragen:

DBGp.png

Schritt 7: Debug-Plugin starten
Im Menu von Notepad++ auf Menu Erweiterungen->DBGp->Debugger klicken

Schritt 8: Debuggen!
Zu testen z.B. ein fehlerhaftes Script in IP-Symcon erstellen.

<?
$i = 100 / 0;
?>

Anschliessend auf „Ausführen“ klicken. Euer Script wird nun ausgeführt, läuft aber nicht zu Ende, da xdebug, die Verbindung Notepad++ aufgebaut hat:


Das Script läuft erst zu Ende, wenn Ihr im Notepad++ im Debuggerbereich auf „Run“ klickt.

Schritt 9: :slight_smile:
sich freuen!

Was mir jetzt noch fehlt ist eine Möglichkeit „fehlerfreie“ Scripts zu debuggen. Hierfür müsste es eine Möglichkeit geben per xdebug Funktion den Remote-Debugger zu starten. Ich habe aber keine entsprechende Funktion gefunden. „xdebug_break()“ funktioniert leider nicht!! Ich versuche eine Lösung zu finden.

Viel Spaß!!

Es funktioniert mit einem Trick auch mit VisualStudio 2012 und der „PHP Tools for Visual Studio“ Extension. Ich schreibe hierfür aber nur eine Anleitung, wenn sich jemand dafür interessiert.

Hallo,
sehr interessanter Beitrag.
@Eisi2003
An der Lösung für VisualStudio wäre ich aber auch sehr interessiert, das habe ich sowieso auf dem Rechner und muß öfters damit arbeiten.
Gruß
Jens

Als Alternative verwende ich eine lokale PHP-Installation mit ZendStudio/Eclipse und den IPS-Wrapper. Damit kann man fast alle IPS Befehle über die Json-API Remote ausführen und damit auch Scripte debuggen, die später direkt von IPS ausgeführt werden sollen.

BTW: Die IPSymcon php.ini wird mw. immer wieder überschrieben…

Tommi

Hier die Anleitung für VisualStudio:

Schritt 1: Installieren
Ihr braucht natürlich Visual Studio (Version 2010, 2012 oder 2013). Ich verwende die Version 2012. Es sollte aber mit allen drei Versionen funktionieren. Zusätzlich müsst Ihr die Extension „PHP Tools for Visual Studio“. Diese könnt ihr direkt in Visual Studio über das Menu (Tools->Extension and Updates…) laden, oder von der Herstellerseite: (http://www.devsense.com/products/php-tools). Remote Debugging wird nur von der kostenpflichtigen Professional-Version unterstützt, die man aber 30 Tage kostenlos testen kann.

Schritt 2: PHP
Die „php.ini“ könnt Ihr genauso anpassen wie in meiner Beschreibung für Notepad++
Zusätzlich braucht Ihr eine „php.exe“, da Ihr in Visual Studio nur dann debuggen könnt, wenn ein Prozess läuft an welchen Ihr Attached seid und „PHP Tools for Visual Studio“ eine „php.exe“ von Euch will. Ist leider so! Im Prinzip könnt Ihr jede „php.exe“ nehmen. Ich habe diese Archive http://windows.php.net/downloads/releases/php-5.4.22-Win32-VC9-x86.zipverwendet und die „php.exe“ in das IP-Symcon Installationsverzeichnis entpackt.

Schritt 3: „PHP Tools for Visual Studio“ konfigurieren
Im Menu von Visual Studio auf „Tools->Options…“ klicken. Im Options-Dialog „PHP-Tool->Interpreter“ auswählen. Dort auf „Register new PHP path“ klicken. Die „php.exe“ (aus Schritt 2) im IP-Symcon-Verzeichnis auswählen. Im Options-Dialog auf OK klicken.

Schritt 4: Visual Studio Projekt erstellen
Ich braucht ein Projekt im „scripts“-Verzeichnis der IP-Symcon-Installation, da dort Eure Scripte liegen. Ich empfehle Euch aber erstmal irgendwo anders auf der Festplatte ein Projekt zu erstellen und dieses dann nach „c:\IP-Symcon\scripts“ zu verschieben. Das neue Projekt könnt Ihr über das Menu „File->New->Project…“ erstellen. Im „New Project“-Dialog auf „Online->Templates->PHP“ gehen, „PHP Web Project“ auswählen unten im Dialog den Pfad und den Namen wählen und dann auf OK klicken. Im neu erstellten Projekt die „index.php“ löschen, das Projekt speichern und dann auf „File->Close Solution“ klicken.
Nun verschiebt Ihr die drei erstellten Dateien „<Projektname>.phpproj“, „<Projektname>.sln“ und „<Projektname>.suo“ nach c:\IP-Symcon\scripts (Pfad entsprechend Eurerer Installation anpassen).
Anschliesend über „File->Open->Project/Solution“ die Solution aus dem neuen Pfad öffnen.

Schritt 5: Scripte zum Debuggen zum Projekt hinzufügen
Im Solution Explorer von Visual Studio das Projekt anklicken und dann auf das Icon „Show all Files“ (Toolbar im Solution Explorer) klicken. Nun seht Ihr alle Verzeichnisse und Files aus Eurem Script-Verzeichnis. Die Datei(en), die Ihr debuggen wollt selektieren, Rechtsklick aus der Selektion und „Include in Project“ auswählen.

Schritt 6: Debugger in Visual Studio starten
Geht über das Menu („Debug->Start Debugging“) über F5 oder per Klick auf dem grünen Pfeil in der Toolbar von Visual Studio. Es öffnet sich Browser mit der Ausgabe der „php.exe“. Dieses Browser-Fenster k

Schritt 7: Debuggen!
Das fehlerhalte Script in IP-Symcon laden. In das Script müsst Ihr ganz oben xdebug_break(); reinschreiben (andernfalls funktioniert es bei Visual Studio nicht!!). Script in der IP-Symcon-Console ausführen.
Visual Studio geht automatisch in den Vordergrund und bleibt an der fehlerhaften Stelle (oder einen Befehl nach dem Fehler) im Script stehen.

Der IPS-Wrapper ist für die Entwicklung eines Scripts wahrscheinlich die bessere Wahl. Mit xdebug kann man aber besser fehlerhafte (fertige) Scripts die in IP-Symcon laufen finden und debuggen.

Ich denke, dass der IPS-Wrapper auch zusammen mit Visual Studio funktioniert. Dann sollten man die PHP-Installation aber irgendwo anders auf der Festplatte (nicht im IP-Symcon-Verzeichnis) ablegen.

Eisi

Du kannst über die JSON API direkt auf alle Funktionen von iP-Symcon von extern zugreifen. Wenn Dein Webserver PHP unterstützt, dann ist das ganz einfach. Siehe: http://www.tdressler.net/ipsymcon/jsonapi.html#wrapper

Eisi2003

Sorry ich wolle das in einen anderen Thread posten: http://www.ip-symcon.de/forum/threads/23376-IPS-Daten-auf-externer-Homepage-darstellen

Servus, danke für die Anleitung.

Bevor ich mich da dranmache aber ein paar Fragen:

  • kann man das Konstrukt auch zum normalen schreiben von IPS Scripts verwenden, oder ist das rein zum debuggen ?
  • welche Debug Funktionenen gibst denn da überthaupt?
    Breakpoint ? Variableinhalt anzeigen bei Mouseover ? auszuführende Zeile direkt wählen anspringen ?

Wäre es dann evtl. Visual Basic debug Umgebung vergleichbar ?

thx
bb

Grundsätzlich kann man die Scripte in VisualStudio oder in Notepad++ entwickeln und diese anschliessend in der IP-Symcon-Console laufen lassen. Bei einem Fehler informiert xdebug den Client (Notepad++ oder VisualStudio) und der Editor steht im Debug-Modus in der entsprechenden Zeile.

Zum Entwickeln von Scripten in VisualStudio ist jedoch die Lösung mit dem IPS Wrapper (siehe oben) besser. Ich schreibe mal eine Anleitung, wie man die Entwicklungsumgebung in VisualStudio am besten aufsetzt.

Debuggen:
Es geht eigentlich fast alles (Breakpoint, Werte von Variablen ändern, Step Over, CallStack, etc.)!

Danke, das ist ja sehr interessant.
Nervt schon sehr bei Problemen immer mit echo oder print rumzugurken.

gruß
bb

Die Möglichkeit zum Debuggen von IPS-Scripten war neben der Ausführbarkeit unter Linux auch ein primäre Ziel des IPS-Wrappers. Ich verwende dazu Komodo (www.activestate.com, gerade bis 2.12 100$ günstiger), weil man damit genauso auch Perlscripte debuggen kann und es auch unter Linux läuft. Der Wrapper funktioniert aber auch in jeder beliebigen IDE (Zendstudio usw.), weil er die IPS-Funktionen in einem include lokal definiert und sie beim Debuggen auch Remote über die JSON-Api ausführen kann.

Tommi