Trouver le numero de ligne en erreur dans un bloc code

Tags: #<Tag:0x00007f3f32b6e2c0>

Bonjour,

j’ai une erreur dans un gros bloc code après avoir fait un peu de nettoyage… . Est il possible de connaitre le numéro de la ligne en erreur et pas uniquement le type d’erreur.

[2022-06-17 16:26:03][SCENARIO] Exécution d'un bloc code 
[2022-06-17 16:26:03][SCENARIO] syntax error, unexpected '','' (T_CONSTANT_ENCAPSED_STRING)
2 J'aime

Je suis aussi preneur de la réponse.
Pour l’instant, la seule solution que j’ai trouvé consiste à aller sur des sites internet qui permettent de vérifier du code PHP. Copier/coller et tu as la ligne en erreur.

Norbert

Idem, moi j’utilise : Code PHP vérification de la syntaxe

D’une manière empirique, tu peux ajouter au milieu du code une ligne de code :

$scenario->setLog('-------------------00001--------------------------');

En regardant les logs, tu sais si c’est la première partie ou la deuxième partie du code qui est en cause.

Puis tu redivises en deux la partie concernée avec :

$scenario->setLog('-------------------00002--------------------------');

et ainsi de suite.

https://www.google.com/search?q=recherche+par+dichotomie

1 J'aime
$info_num_jdom=$timezone.','
    .$poubelle','
    .$bright=0.4;

@m.georgein avec le code ci-dessus, pas d’erreur alors que pourtant il manque un . après $poubelle

J’utilise d’habitude https://onlinephp.io/

J’ai testé la solution éphémère @Salvialf (Try Catch getLine()), mais ça ne fait pas le job

Oui je pensais que ça ferait la blague puis ça m’a titillé donc j’ai testé après coup et non ça ne fonctionne pas.

Salut,

Autre technique mais dans le même genre d’idée que @Jeandhom. Quand je ne trouve pas la cause d’un plantage je sélectionne plusieurs lignes que je coupe, je sauve et je relance. Si ça passe c’est dans ce bloc que ce trouve le soucis. Je colle (pour remplacer le code), je sélectionne moins de ligne et je recommence.

Ça va assez vite, plus je trouve que poser des lignes de logs.

Hello,
Si tu coupe au mauvais endroit, c’est ta technique qui peut générer d’autres erreurs (variables non présente…) , et en plus il y a un risque, lors du « couper » l’info peut ce perdre. (panne, reboot, bug …) la méthode que je conseil, et que j’utilise, est celle de @Jeandhom, pas mieux que de cette méthode pour débugger et ne pas hésiter a générer des lignes de log.

Maintenant j’utilise systématiquement une variable en entête de bloc code :
$debug = false;

Ainsi je commente au max le code :
if ($debug == true) $scenario->setLog('La fonction xxx a retourné .... [OK]');
ensuite en cas de debug, il suffit de passer la variable $debug a ‹ true › pour avoir des log detaillés.

1 J'aime

Personnellement, je n’ai pas besoin d’utiliser la méthode que je viens de décrire.
J’ai pris l’habitude, à chaque fois que j’initialise ou modifie une variable de la logger.
Si j’ai une erreur, j’arrive donc facilement à voir où elle se situe.

Mais ces méthodes ne marchent que si le script tourne. si il y a une erreur de syntaxe (il manque un }, un ;, ou autres truc bien chiants), le script ne se lance pas et les tests de type if ($debug == true) ne servent pas à grand chose

1 J'aime

Bon je vois qu’on à tous notre petite technique de contournement … En somme, il n’y a rien de natif dans jeedom
J’ajoute celle que j’utilise quand j’ai la flemme de copier le code dans un testeur PHP (qui ne trouve que les erreurs de synthaxe)
En fait je pratique presque de la même façon que @Bison mais en /* commentant */ de grandes parties de mon code (ça évite des erreurs de copier coller dans lesquelles on oublie de sélectionner le dernier } qui traine)

1 J'aime

Voilà moi je parlais de ce cas là @Phpvarious.
Si page blanche parce que le script a un souci d’accolades, de parenthèses, de point-virgule, etc… Les logs ne servent à rien et je maintiens ma technique :grinning_face_with_smiling_eyes:.

1 J'aime

En effet c’est pas mal aussi de commenter de gros bloc, ça évite le soucis lié à la panne de courant quand je fais des couper/coller :wink:

3 J'aime

Bonjour,
Utiliser le framework de Djul est peut être votre solution :
image

pour l’erreur suivante dans le bloc code :
image

Bonne journée

Edit : [Framework SC] les scenarios en php - #55 par dJuL

3 J'aime