Koozali SME Server Debugging/fr
Débogage du serveur
Un problème souvent rencontré par les nouveaux développeurs est le débogage du code Perl sur votre serveur SME.
Il existe plusieurs façons de procéder, à la fois localement et à distance.
Activer le débogage du modèle
Je suis tombé sur cela dans le fichier templates.pm
config set processtemplate Debug yes
Cela ajoutera quelques lignes de débogage à /var/log/messages vous montrant la progression de l'extension du modèle.
Pour désactiver, définissez la clé sur « no » ou supprimez-la.
Routines de base de données intégrées
Vous pouvez également utiliser quelques routines de db.pm
=item B<db_print> db_print(\%config); db_print(\%config, $key);
Imprime les clés et leurs valeurs brutes dans la base de données %config. Si $key est fourni, il imprime la $key et sa valeur brute. Si aucune $key n'est fournie, il imprime toutes les clés et leurs valeurs brutes.
=item B<db_show> db_show(\%config); db_show(\%config, $key);
Imprime les clés et leurs valeurs dans un format lisible par l'homme. Si $key est fourni, il imprime la $key, le type et les propriétés de cette $key. Sinon, il imprime la clé, le type et les propriétés de toutes les clés.
=item B<db_print_type> db_print_type(\%config); db_print_type(\%config, $key);
Imprime les clés et leurs types dans la base de données %config. Si $key est fourni, il imprime uniquement cette $key et son type. Sinon, il imprime toutes les clés et leurs types.
=item B<db_print_prop> db_print_prop(\%config, $key); db_print_prop(\%config, $key, $property);
Imprime les propriétés (ou une seule $property) de la $key donnée dans le %config.
En local, en utilisant perl -d
Il existe un certain nombre de tutoriels en ligne.
Pour commencer, utilisez :
perl -d myFile.pl
Il existe ensuite un certain nombre d'options que vous pouvez utiliser pour contrôler le débogueur :
l 10 - list line 10 l get_pattern - find lines matching 'pattern' b 22 - set breakpoint at line 22 s - step forward a line including all subroutines n - step forward a line but jump through subroutines c - continue to next break point c 47 - continue to line 47 p $variable - print variable q - quit
Débogage à distance à l'aide d'un environnement de développement (IDE)
J'utilise Komodo IDE grâce à une licence pour développeurs « Open Source » de Activestate.
Vous pouvez désormais obtenir l'application gratuitement ici, mais vous avez besoin d'un compte gratuit pour l'utiliser :
https://www.activestate.com/products/komodo-ide/download-ide/
Le mode le plus simple à utiliser avec Komodo IDE consiste à utiliser simplement l'IDE comme débogueur pour parcourir le code. Le code sur le serveur distant peut être modifié si vous disposez des autorisations suffisantes.
https://docs.activestate.com/komodo/12/manual/debugger.html
Cela nous permet de travailler avec un bureau et un serveur. Consultez la section sur le proxy de débogage pour plusieurs connexions.
Configuration du serveur
À partir de votre répertoire Komodo installé, nous devons copier un ensemble de fichiers sur le serveur.
En fait, j'ai copié l'intégralité du répertoire dbgp car il contient d'autres fichiers utiles, notamment le proxy de débogage.
scp -r ~/komdoeditDirectory/lib/support/dbgp root@some.server://opt/
Nous devrions maintenant avoir /opt/dbgp sur le serveur
Nous devons maintenant définir des chemins sur le serveur :
export PERL5LIB=/opt/dbgp/perllib:$PERL5LIB export PERLDB_OPTS=RemotePort=your.desktop.i.p:9020 async=1
Si nécessaire, vous pouvez également ajouter un identifiant utilisateur :
export DBGP_IDEKEY=jdoe
Note : comme pour le débogage local, la fonction « Break Now » est désactivée par défaut. Le réglage de « async=1 » interrompt la lecture à la première ligne - consultez la documentation pour plus d'informations.
Configuration d'une seule machine
Sur votre bureau, nous devons configurer le « Listener » pour Komodo.
Edit/Preferences/Debugger/Connection Définissez un port spécifique sur 9020 (correspondant au port ci-dessus) Définissez un nom d'utilisateur comme ci-dessus
Nous devons maintenant démarrer un programme sur le serveur. Le code de débogage appellera alors Komodo.
Les formulaires suivants devraient fonctionner :
perl -d myFile.pl
Ajoutez -d à l'en-tête de votre fichier, par exemple :
#!/usr/bin/perl -w -d
Ensuite, faites :
perl myFile.pl
Ajoutez -d à /sbin/e-smith/signal-event
Ensuite, faites :
signal-event some-event
Vous devriez obtenir une fenêtre contextuelle de Komodo indiquant qu'une application distante a demandé une session de débogage. Lorsque vous cliquez sur « oui », vous obtenez une deuxième boîte indiquant qu'un mappage n'a pas pu être ouvert. Si nous allons simplement utiliser Komodo comme débogueur, nous pouvons répondre « non » et vous êtes alors en mode débogage vous permettant de parcourir le code et d'afficher les variables.
Mappage pour l'édition
Si vous souhaitez également éditer du code, vous devrez configurer une forme de mappage de fichiers entre l'URI envoyée par le débogueur et votre configuration « Serveur » dans Komodo.
Notez que sans certaines des bibliothèques e-smith installées localement, vous recevrez des avertissements indiquant que vous ne parviendrez pas à localiser certains fichiers, mais ceux-ci peuvent être ignorés en toute sécurité.
Dans les préférences de Komodo, vous devez configurer un compte serveur/distant pour le serveur distant, par exemple :
Compte distant : Test_v10 Type : SCP Port : 2222 Nom d'utilisateur : root Mot de passe : monmotdepasse (ou également utilisez des clés SSH)
Vous pouvez ensuite configurer un mappage similaire à celui-ci :
URI : file://v9-test/ Maps To : scp://Test_v9/
Ou :
URI : file://v9-test/etc/e-smith Maps To : scp://Test_v9/etc/e-smith
Vous pouvez être plus précis sur les répertoires si vous le souhaitez. N'oubliez pas que vous héritez des autorisations du serveur : vous ne pouvez pas enregistrer un fichier en lecture seule sur le serveur !
Mappage de fichiers locaux
J'ai réussi à le faire en utilisant sshfs :
sshfs -p 2222 root@192.168.10.199:/ ~/Mounts/unRepertoire
Vous pouvez ensuite accéder aux fichiers normalement et il est facile de mapper la télécommande aux fichiers « locaux ».
Rangement a posteriori
Redémarrez le serveur ou utilisez la méthode suivante :
export PERL5LIB=/usr/local/lib64/perl5:/usr/local/share/perl5:/usr/lib64/perl5/vendor_perl:/usr/share/perl5/vendor_perl export PERLDB_OPTS= export DBGP_IDEKEY=jdoe
Débogage CGI Perl
Veuillez consulter ici pour plus de détails :
Vous aurez besoin d'un fragment httpd.conf personnalisé. J'ai utilisé 46PerlDebug avec ces options (configurer en conséquence) :
SetEnv PERL5LIB "/opt/dbgp/perllib:$PERL5LIB" SetEnv PERLDB_OPTS "RemotePort=192.168.x.x async=1" SetEnv DBGP_IDEKEY "user"
Vous devriez maintenant pouvoir accéder à votre script cgi et déboguer en conséquence.
Cependant, après l'avoir essayé, vous ne pouvez pas l'utiliser sur les panneaux du gestionnaire de serveur car Perl est « setuid ».
Il pourrait être utilisé dans d'autres scénarios, mais pas dans le gestionnaire de serveur.
Proxy de debogage multi-machines
TBA
Les notes sont ici : http://docs.komodoide.com/Manual/debugger#debugging-programs-komodo-ide-only_remote-debugging_debugger-proxy
Perl avec Visual Studio
Nous travaillons toujours sur ce sujet, mais nous avons besoin du serveur de langage Perl.
Sur votre serveur :
yum --enablerepo=* install gcc gcc-c++ perl-App-cpanminus perl-AnyEvent-AIO perl-Coro
cpanm Class::Refresh cpanm ExtUtils::CBuilder cpanm Compiler::Lexer cpanm Hash::SafeKeys cpanm Perl::LanguageServer
Sur votre station de travail :
- configurez vos serveurs distants à l'aide des clés ssh dans .ssh/config ;
- installez Visual Studio Code Remote Explorer ;
- redémarrez ;
- accédez à Remote Explorer et vous devriez voir votre liste de serveurs ;
- ouvrez dans la fenêtre actuelle ou une nouvelle ;
- sélectionnez la plateforme et laissez VS Code s'installer ;
- accédez à l'explorateur de fichiers ;
- ouvrir le dossier ;
- il vous suggérera d'ouvrir dans /root/ mais je trouve plus facile d'ouvrir dans / ;
- cliquez sur OK et vos dossiers apparaîtront à gauche ;
- accédez à votre fichier et ouvrez-le ;
- définissez un point d'arrêt en haut ;
- accédez maintenant à Debug, Ajoutez une Configuration et acceptez les valeurs par défaut ;
- exécutez maintenant Debug et vous devriez voir le code s'arrêter à l'un de vos points d'arrêt.
Vous pouvez maintenant parcourir votre code.
Débogage PHP à distance
Vous pouvez déboger sur votre station de travail locale mais il est extrèmememnt utile de pouvoir déboger directement dans l'environnement du serveur. Vous pouvez avoir une version de PHP installée sur votre ordinateur mais en avoir une différente qui tourne sur le serveur et vous pouvez avoir une configuration différente sur le serveur.
D'abord, vous avez besoin d'installer les paquets xdebug, par exemple :
yum install php74-php-pecl-xdebug3 yum install php80-php-pecl-xdebug3
Oo :
yum install php*php-pecl-xdebug3
Ensuite, vous avez besoin d’un petit fragment de modèle pour permettre le débogage à distance.
Xdebug 2
mkdir -p /etc/e-smith/templates-custom/etc/php.ini nano /etc/e-smith/templates-custom/etc/php.ini/90XdebugSettings
Ajouter ceci :
[Debugger] ; /etc/e-smith/templates-custom/etc/php.ini xdebug.remote_enable = true xdebug.remote_host = 127.0.0.1 xdebug.remote_port = 9001 xdebug.remote_handler = dbgp xdebug.remote_log = /var/log/xdebug.log xdebug.remote_mode = req xdebug.max_nesting_level = 5000
Xdebug 3
Nouvelle syntaxe.
https://xdebug.org/docs/upgrade_guide https://xdebug.org/docs/all_settings
nano /etc/e-smith/templates-custom/etc/php.ini/90XdebugSettings
[Debugger] xdebug.start_with_request = yes xdebug.discover_client_host = true xdebug.client_host = localhost xdebug.client_port = 9003 xdebug.idekey = users xdebug.mode = debug xdebug.log = /var/log/xdebug.log
Expandre les modèles et redémarrer les services :
signal-event webapps-update
Nous devrions voir Xdebug ici :
php74 -v PHP 7.4.28 (cli) (built: Feb 15 2022 13:23:10) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Zend OPcache v7.4.28, Copyright (c), by Zend Technologies with Xdebug v2.9.8, Copyright (c) 2002-2020, by Derick Rethans
Ou comme cela :
php80 -v PHP 8.0.19 (cli) (built: May 10 2022 08:07:35) ( NTS gcc x86_64 ) Copyright (c) The PHP Group Zend Engine v4.0.19, Copyright (c) Zend Technologies with Zend OPcache v8.0.19, Copyright (c), by Zend Technologies with Xdebug v3.1.5, Copyright (c) 2002-2022, by Derick Rethans
Komodo IDE
We can obtain the debug proxy from the installation, and move it to the server and then execute from there:
python /root/dbgp/bin/pydbgpproxy -d 127.0.0.1:9001 -i 192.168.10.1:9003
Or alternatively grab the lastest xdebug client here:
mkdir /root/xdbg-proxy cd /root/xdbg-proxy curl https://xdebug.org/files/binaries/dbgpProxy -o dbgpProxy chmod 0700 dbgpProxy ./dbgpProxy -s 127.0.0.1:9001 -i 192.168.10.1:9003
In Komodo Go to Preferences, Debugger, Connections
Komodo should listen on: System provide port
Check 'I am running a debugger proxy' Listener address: IP.of.your.server:9003 Proxy key: individual key name for this desktop
Save and check that it connected to the debugger.
Now to debug a file:
https://your.server.ip/index.php?XDEBUG_SESSION_START=mydesktopkey
Or
https://your.server.ip/index.php?somevalue=3&XDEBUG_SESSION_START=mydesktopkey
Visual Studio/VS Codium
Sample launch.json
Note for newer versions of Xdebug the default port is now 9003 Pay careful attention to the path mapping,. This has to be absolutely correct or it will not work.
{ // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name" : "vscphpdebug", "type" : "php", "request" : "launch", "stopOnEntry" : false, "proxy": { "enable" : true, "host" : "my.server.ip", "key" : "users", // As set in the server above "port": 9003, "allowMultipleSessions" : true }, "pathMappings": { "/home/e-smith/files/ibays/testbay/html/phptestcode": "${workspaceFolder}" }, }, ] }
Now you can run start the PHP debugger in Codium so it connects the to the debug server, and then trigger it with a URL like this:
https://my.SME.Server/testbay/phptestcode/myTestPhpFile.php?XDEBUG_SESSION_START=mycodiumkey
Editors and IDEs
Some Open Source Editors/IDEs
These all allow remote debugging.
Komodo-IDE https://www.activestate.com/products/komodo-ide
Komodo Debug tools: https://code.activestate.com/komodo/remotedebugging/
Eclipse https://www.eclipse.org/
Netbeans https://netbeans.org/
Codium https://itsfoss.com/vscodium/ - Use PHP Debug - felixfbecker.php-debug
For Codium I can't see a remote Perl debugger as yet.