Page 2 sur 3

Re: [Ex] Retrouver la ligne d'erreur d'un script compilé

Posté : mar. 23 févr. 2016 18:32
par Yle
Bonjour,

Je veux me servir de votre outil mais j'ai à chaque fois :

>Running:(3.3.14.2):d:\Program Files (x86)\AutoIt3\autoit3_x64.exe "D:\AU3\GetRealErrorLine.au3"
"D:\AU3\GetRealErrorLine.au3" (76) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
If($CountTemp[2]) Then
If(^ ERROR

et visiblement cette erreur s'affiche avec n'importe quel fichier *.AU3 en entrée et en lui indiquant un n° de ligne inférieur au nombre de lignes total du programme.

Re: [Ex] Retrouver la ligne d'erreur d'un script compilé

Posté : mer. 02 mars 2016 17:13
par TommyDDR
Oui, j'ai remarqué ça aussi :(.
Malheureusement, c'est codé avec les pieds :D
Je posterai ce soir (il faut que j'y pense) un script pour avoir le "script compilé" sous forme de source.
Cad : qui agit de la même façon que le compilateur, normalement il gère tous les cas (include, include-once, commentaires ";", commentaires "#cs / #ce", commentaires "#comment-start / #comment-end", les instructions multilignes "_")

Du coup le numéro de ligne correspondra au script généré et vous pourrez trouver d'où vient le problème

Re: [Ex] Retrouver la ligne d'erreur d'un script compilé

Posté : jeu. 03 mars 2016 00:30
par TommyDDR
C'est chose faite (voir 1er message)

Re: [Ex] Retrouver la ligne d'erreur d'un script compilé

Posté : jeu. 03 mars 2016 15:21
par ricky
Hello,

merci pour cette mise à jour. Il y a une petite erreur dans l'exemple.

Il faut remplacer #include "OneFileScript.au3" par #include "GetRealErrorLine.au3"

Re: [Ex] Retrouver la ligne d'erreur d'un script compilé

Posté : jeu. 03 mars 2016 19:40
par mikell
Hello
Peut-être ça vaudrait le coup de vérifier si cette ligne existe dans le haut du script : #AutoIt3Wrapper_Run_Au3Stripper=y
En effet si Au3Stripper a été utilisé avec ses options par défaut ton code ne marchera pas - et probablement rien ne marchera, d'ailleurs :mrgreen:

Tiens à propos de Au3stripper on peut obtenir le script intégral tel qu'il va être utilisé par le compilateur avec ça (chemins à adapter) :
Run("AU3Stripper.exe myscript.au3 /mergeonly", "", @SW_HIDE)
L'option /mergeonly (je cite) "will produce a scriptfile as AUT2EXE includes in the Compiled EXE. This allows you to find the proper linenumber when errors are reported. "
Ce qui est intéressant là-dedans c'est que Au3Stripper.exe est autonome donc on peut le glisser dans un FileInstall... :wink:

Re: [Ex] Retrouver la ligne d'erreur d'un script compilé

Posté : ven. 04 mars 2016 00:23
par TommyDDR
Je ne connaissais pas le stripper.
Moi j'en ai fini avec les erreurs de script, je vous refourgue le bébé ^^

Re: [Ex] Retrouver la ligne d'erreur d'un script compilé

Posté : dim. 06 mars 2016 21:29
par mikell
je vous refourgue le bébé ^^
Père indigne :mrgreen:

Bon ben alors voilà ma version... ça télécharge Au3Stripper dans le répertoire temp et - en principe - ça trouve la ligne avec précision
Le code est très facilement modifiable/adaptable. Le choix de la listview, ben c'est parce que... j'aime les listviews :P
Je n'ai pas poussé les essais donc il peut éventuellement se produire des curiosités (rien de toxique, juste le classique "unexpected result" )

Code : Tout sélectionner

voir message #36

Re: [Ex] Retrouver la ligne d'erreur d'un script compilé

Posté : mar. 08 mars 2016 09:57
par TommyDDR
@Mikell : Ta solution fonctionne uniquement si on a compilé avec Au3Stripper ou dans tous les cas ?

Edit : Après comparaison entre stripped et "ma technique", le stripped supprime les lignes de précompilation -> #xxx, alors qu'ils doivent être pris en compte pour une compilation "normale", ce qui entraine un décalage de lignes.

Re: [Ex] Retrouver la ligne d'erreur d'un script compilé

Posté : mar. 08 mars 2016 14:28
par mikell
Je dirais plutôt que ça fonctionne si on n' a pas compilé avec Au3Stripper

Sinon c'est bizarre, en principe les lignes de précompilation devraient être supprimées par le compilateur et donc ne pas être prises en compte ni dans le décompte des lignes dans le script compilé, ni par le stripper
Je n'ai pas vraiment testé ce cas-là, mais même après rajout de quelques lignes #AutoIt3Wrapper_* en tête de script la ligne d'erreur retournée semble correcte
Tu pourrais poster un exemple où les numéros de ligne sont décalés ?

Re: [Ex] Retrouver la ligne d'erreur d'un script compilé

Posté : mar. 08 mars 2016 18:29
par TommyDDR
Ce sont en fait les #Region / #EndRegion, etc qui sont supprimé par le stripped
Il y en a par exemple dans "WinAPIInternals.au3"
#include <WinAPIInternals.au3>
Global $var = 1

test($var)
MsgBox(0)
test($var)

Func test($a)
   ConsoleWrite($a & @CRLF)
EndFunc
EDIT : Après plusieurs tests, seul #pragma est supprimé à la compilation, tous les autres restent dans le code compilé (j'en profite pour mettre à jour mon OneFileScript qui ne supprimait pas #pragma ^^)

Re: [Ex] Retrouver la ligne d'erreur d'un script compilé

Posté : mar. 08 mars 2016 19:03
par Yle
Re,

Suite à votre conversation, je viens de faire un test avec un de mes petits programmes et contrairement à ce que j'ai dit : la compil est bonne mais le résultat donné est erroné.
J'ai modifié mon programme pour qu'il plante. L'exécutable me dit : Erreur ligne 17886 => Array variable has incorrect number...

Pour le script de Mikell : l'erreur sur la ligne 17886 correspond à : $NL=10

Depuis mon source, j'ai une erreur sur la ligne 349 :
"D:\AU3\!ChallengExtarV25.au3" (349) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
$ListFich[$y][0] = $Fichiers[$y]
$ListFich[$y][0] = ^ ERROR

Mon source démarre avec ces lignes :

#Region
#AutoIt3Wrapper_icon=d:\au3\YL.ico
#AutoIt3Wrapper_outfile=ChallengExtar.exe
#AutoIt3Wrapper_Res_Comment=Commentaires
#AutoIt3Wrapper_Res_Description= Comment générer un Fichier Challenge
#AutoIt3Wrapper_Res_Fileversion=2.4
#AutoIt3Wrapper_Res_LegalCopyright=(C)[Yle-2012-2016]
#AutoIt3Wrapper_Res_Language=1036
#AutoIt3Wrapper_Res_Field=Commentaires| Créé par @Yves L**** (Juillet 2012)
#AutoIt3Wrapper_Res_Field=Enterprise | Yle
#AutoIt3Wrapper_Res_Field=Email|yle****@gmail.com
#AutoIt3Wrapper_UseX64=N
#AutoIt3Wrapper_Run_AU3Check=y
#EndRegion
#NoTrayIcon ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
#include-once
#include <Array.au3>
#include <Array2D.au3>
#include <Array_yl.au3>
#include <EditConstants.au3>
#include <ExcelCOM_UDF.au3>
#include <GuiConstantsEx.au3>

Si besoin, je fournis le source complet...

Re: [Ex] Retrouver la ligne d'erreur d'un script compilé

Posté : mer. 09 mars 2016 07:49
par anje84
Trop bon merci!

Re: [Ex] Retrouver la ligne d'erreur d'un script compilé

Posté : mer. 09 mars 2016 09:42
par Yle
Bonjour,

La modification de TommyDDR semble bonne
J'ai téléchargé, puis lancé Example-2.au3
J'ai entré mon nom de fichier et mon erreur 17886 et example-2.au3 me renvoit ceci :

$Fichiers[0] = $Fichiers[0] -1
ReDim $Fichiers[$Fichiers[0]+1]
EndIf
if $ok = 0 then $Fichiers[0] = 4
For $y = 1 to $Fichiers[0]
$ListFich[$y][0] = $Fichiers[$y] <- ERROR
$oXL = _ExcelBookOpen($Fichiers[$y],0)
If @error = 2 Then
MsgBox(0, "Erreur_33", "Le fichier " & $ListFich[$y] & " n'existe pas ou n'est pas un classement général final")
KillExcel()
Exit

Par contre, si j'enregistre le fichier Example-2.au3 et que je relance.
Le programme me demande bien mon fichier source puis la ligne en erreur et j'ai de nouveau cette erreur :

"D:\AU3\GetRealErrorLine.au3" (76) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
If($CountTemp[2]) Then
If(^ ERROR
->09:34:37 AutoIt3.exe ended.rc:1
+>09:34:37 AutoIt3Wrapper Finished.
>Exit code: 1 Time: 11.79

Re: [Ex] Retrouver la ligne d'erreur d'un script compilé

Posté : mer. 09 mars 2016 11:35
par TommyDDR
$CountTemp[2] n'existe plus, vous utilisez l'ancien GetRealErrorLine.au3 ;)

Re: [Ex] Retrouver la ligne d'erreur d'un script compilé

Posté : mer. 09 mars 2016 17:10
par Yle
Effectivement...
Remarque : Ce serait (peut-être) mieux de tout regrouper en un seul script

Re: [Ex] Retrouver la ligne d'erreur d'un script compilé

Posté : sam. 12 mars 2016 18:21
par mikell
La récente (du 12/3) nouvelle version de Au3Stripper règle la plupart des problèmes, reste juste comme exception les #pragma (facile à gérer dans le script)
Tommy et Yle vous pouvez tester ça ? (il faut d'abord supprimer les anciens fichiers du stripper dans @temp )

Edit
J'ai supprimé quelques messages (pour alléger le sujet) qui n'avaient plus de raison d'être suite à la sortie de cette nouvelle version de Au3Stripper

Code : Tout sélectionner

voir message #41

Re: [Ex] Retrouver la ligne d'erreur d'un script compilé

Posté : ven. 18 mars 2016 23:34
par Yle
Avec un peu de retard (vacances à l'étranger), je viens de tester ta dernière version...
L'erreur en ligne 17886 me renvoie à cette ligne : For $y = 1 to $Fichiers[0]
au lieu de la suivante : $ListFich[$y][0] = $Fichiers[$y]

Re: [Ex] Retrouver la ligne d'erreur d'un script compilé

Posté : sam. 19 mars 2016 02:04
par TommyDDR
Le plus simple serait encore de fournir le script complet pour que l'on puisse tester de notre coté et ne pas y aller à taton ;)

Re: [Ex] Retrouver la ligne d'erreur d'un script compilé

Posté : sam. 19 mars 2016 13:53
par mikell
En effet
D'après Jos (le développeur) cette dernière version du 12/3 de Au3Stripper (16.306.1237.1) est censée régler tous les problèmes de décalage à l'exception des lignes #pragma, s'il existe d'autres exceptions passées inaperçues ce serait intéressant de les lui signaler
A moins évidemment que le souci vienne de mon script (Tommy tu l'as testé ? )
Yle si tu acceptes de fournir ton script pourrais-tu joindre les includes perso ? (ton message #31 semble montrer que ton script en utilise)

Re: [Ex] Retrouver la ligne d'erreur d'un script compilé

Posté : dim. 20 mars 2016 23:55
par Yle
Mikell
pas de souci pour te fournir mon script et mon include bidouillé
Envoies moi un message sur ma boite mail (tu dois la connaitre) car tu as effacé des caractères et je t'envoie par mail ce qu'il te faut