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

Partagez vos scripts, et vos applications AutoIt.
Règles du forum
.
Avatar du membre
Yle
Niveau 5
Niveau 5
Messages : 167
Enregistré le : mar. 21 avr. 2009 17:22
Localisation : La NORMANDIE -76
Status : Hors ligne

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

#21

Message 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.
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2086
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

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

#22

Message 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
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2086
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

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

#23

Message par TommyDDR »

C'est chose faite (voir 1er message)
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
ricky
Niveau 7
Niveau 7
Messages : 443
Enregistré le : ven. 06 févr. 2009 09:25
Localisation : Suisse
Status : Hors ligne

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

#24

Message 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"
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#25

Message 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:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2086
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

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

#26

Message par TommyDDR »

Je ne connaissais pas le stripper.
Moi j'en ai fini avec les erreurs de script, je vous refourgue le bébé ^^
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#27

Message 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
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2086
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

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

#28

Message 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.
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#29

Message 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 ?
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2086
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

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

#30

Message 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 ^^)
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
Yle
Niveau 5
Niveau 5
Messages : 167
Enregistré le : mar. 21 avr. 2009 17:22
Localisation : La NORMANDIE -76
Status : Hors ligne

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

#31

Message 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...
Modifié en dernier par mikell le jeu. 10 mars 2016 19:09, modifié 1 fois.
Raison : enlevé les données personnelles
Avatar du membre
anje84
Niveau 2
Niveau 2
Messages : 22
Enregistré le : ven. 10 avr. 2015 14:00
Status : Hors ligne

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

#32

Message par anje84 »

Trop bon merci!
Avatar du membre
Yle
Niveau 5
Niveau 5
Messages : 167
Enregistré le : mar. 21 avr. 2009 17:22
Localisation : La NORMANDIE -76
Status : Hors ligne

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

#33

Message 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
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2086
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

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

#34

Message par TommyDDR »

$CountTemp[2] n'existe plus, vous utilisez l'ancien GetRealErrorLine.au3 ;)
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
Yle
Niveau 5
Niveau 5
Messages : 167
Enregistré le : mar. 21 avr. 2009 17:22
Localisation : La NORMANDIE -76
Status : Hors ligne

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

#35

Message par Yle »

Effectivement...
Remarque : Ce serait (peut-être) mieux de tout regrouper en un seul script
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#36

Message 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
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Yle
Niveau 5
Niveau 5
Messages : 167
Enregistré le : mar. 21 avr. 2009 17:22
Localisation : La NORMANDIE -76
Status : Hors ligne

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

#37

Message 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]
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2086
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

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

#38

Message 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 ;)
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#39

Message 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)
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Yle
Niveau 5
Niveau 5
Messages : 167
Enregistré le : mar. 21 avr. 2009 17:22
Localisation : La NORMANDIE -76
Status : Hors ligne

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

#40

Message 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
Répondre