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

Partagez vos scripts, et vos applications AutoIt.
Règles du forum
.
Avatar du membre
mikell
Modérateur
Modérateur
Messages : 5850
Enregistré le : dim. 29 mai 2011 16:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#41

Message par mikell » mer. 23 mars 2016 22:31

Merci Yle pour ta collaboration, problème résolu
Voilà le code définitif

Code : Tout sélectionner

#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>

Global Const $__LISTVIEWCONSTANT_WM_SETREDRAW = 0x000B
Opt("GUIDataSeparatorChar", ChrW(9617))

$gui = GUICreate("test", 520, 360, -1, 150)
$listview = GUICtrlCreateListView("Lignes", 10, 50, 500, 300)
GUICtrlSetFont($listview, 8.5, 0, 0, "Tahoma")
GUICtrlSendMsg($listview, $LVM_SETCOLUMNWIDTH, 0, 480)
GuiCtrlCreateLabel("Ligne à chercher :", 20, 17, 100, 20)
$Input = GUICtrlCreateInput("", 110, 15, 40, 20)
$Vazi = GUICtrlCreateButton("Charger le script", 180, 15, 120, 20)
GUISetState(@SW_SHOW)


While 1
 Switch GUIGetMsg()
   Case $GUI_EVENT_CLOSE
         Exit
   Case $Vazi
          $n = GuiCtrlRead($Input)
       ;   If $n = "" Then ContinueLoop
          $au3 = FileOpenDialog("Sélectionner le script à analyser", @scriptdir, "Scripts (*.au3)", 0, "", $gui)
          If @error Then ContinueLoop

          $Au3Stripper = _SetAu3Stripper(@tempdir)
          If @error Then Exit Msgbox(48, "error", "Impossible de charger Au3Stripper")
          RunWait('"' & $Au3Stripper & '" "' & $au3 & '" /mergeonly', "", @SW_HIDE)
          $stripped = StringTrimRight($au3, 4) & "_stripped" & ".au3"

          $stripped_txt = StringRegExpReplace(FileRead($stripped), '(?m)^\s*#(pragma|include).*\R', "")
          $lines = StringSplit($stripped_txt, @crlf, 1)
          GuiCtrlSendMsg($listview, $LVM_DELETEALLITEMS, 0, 0)
          If $n > $lines[0] Then
               GUICtrlCreateListViewItem("Le fichier complet n'a que " & $lines[0] & " lignes", $listview)
               ContinueLoop
          EndIf
          GuiCtrlSendMsg($listview, $__LISTVIEWCONSTANT_WM_SETREDRAW, False, 0)
          For $i = 1 to $lines[0]
               GUICtrlCreateListViewItem($i & " :  " & $lines[$i], $listview)
               If $i = $n Then GuiCtrlSetColor(-1, 0xdd0000)
          Next
          GuiCtrlSendMsg($listview, $__LISTVIEWCONSTANT_WM_SETREDRAW, True, 0)

          Local $tPoint = DllStructCreate("long X;long Y")
          GUICtrlSendMsg($listview, $LVM_GETITEMPOSITION, $n-6, DllStructGetPtr($tPoint))
          GUICtrlSendMsg($listview, $LVM_SCROLL, DllStructGetData($tPoint, "X"), DllStructGetData($tPoint, "Y"))
 EndSwitch
WEnd


Func _SetAu3Stripper($path)
   Local $exe = $path & "\Au3Stripper.exe"   ; v. 16.306.1237.1
   If not FileExists($exe) Then 
      GUICtrlCreateListViewItem("Chargement de Au3Stripper ...", $listview)
    ;;  Local $url = "https://www.autoitscript.com/autoit3/scite/download/beta_SciTE4AutoIt3/Au3Stripper.exe"
      Local $url = "http://affz.free.fr/Au3Stripper/Au3Stripper.exe"
      InetGet($url, $exe)
      If @error Then Return SetError(1, 0, 0)
      _DatFile($path)
   EndIf
   Return $exe
EndFunc

Func _DatFile($path)
  Local $datfile = $path & "\Au3Stripper.dat"
  If not FileExists($datfile) Then
     Local $data = "Functionname,Parameter to check,0=check for function/1=check for Variable;adlibenable,1,0;" & _
	"adlibregister,1,0;adlibunregister,1,0;call,1,0;dllcallbackregister,1,0;eval,1,1;guictrlregisterlistviewsort,2,0;" & _
	"guictrlsetonevent,2,0;guiregistermsg,2,0;guisetonevent,2,0;hotkeyset,2,0;isdeclared,1,1;objevent,2,0;" & _
	"onautoitexitregister,1,0;onautoitexitunregister,1,0;opt,2,0;traysetonevent,2,0;trayitemsetonevent,2,0;"
     FileWrite($datfile, StringReplace($data, ";", @crlf))
  EndIf
EndFunc

" 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 : 1800
Enregistré le : mar. 22 juil. 2008 20:55
Localisation : Nantes
Status : En ligne

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

#42

Message par TommyDDR » jeu. 24 mars 2016 09:11

J'ai testé avec l'un de mes plus gros scripts.
Erreur : 41325
En passant ton programme, l'erreur se trouve en 42944

J'essaye de voir pourquoi ce soir.

La grosse différence aussi est que dans ma version, j'affiche le nom du fichier incriminé :)
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679

Avatar du membre
mikell
Modérateur
Modérateur
Messages : 5850
Enregistré le : dim. 29 mai 2011 16:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#43

Message par mikell » jeu. 24 mars 2016 17:04

Oui, pas de nom de fichier avec juste les fonctionnalités de Au3Stripper...
1619 lignes de différence, c'est 4% du code complet, ça fait beaucoup :mrgreen:
" 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 : 1800
Enregistré le : mar. 22 juil. 2008 20:55
Localisation : Nantes
Status : En ligne

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

#44

Message par TommyDDR » jeu. 24 mars 2016 22:09

Si #include-once est dans le fichier principal, il est ignoré ET laissé dans le fichier généré.
Ce qui pose 3 problèmes :
1) Une ligne #include-once apparait en trop dans le script généré
2) Si l'un des include fait un include du script principal, le script principal est inclus 2 fois dans le script généré.
3) Le fichier généré n'est pas exécutable :p

Exemple :
1.au3 :
#include-once
#include "2.au3"

Opt("GUIOnEventMode", 1)
Opt("MustDeclareVars", 1)

Global $gui
Global $taille[2] = [300, 300]

$gui = GUICreate("", $taille[0], $taille[1])
GUISetOnEvent(-3, "quit", $gui)
GUISetState(@SW_SHOW, $gui)

While(True)
        Sleep(10)
WEnd

Func quit()
        MsgBox(0)
        Exit
EndFunc
2.au3 :
#include-once
#include "1.au3"

Global $dummy0 = 0
Global $dummy1 = 1
Global $dummy2 = 2
1_stripped.au3 :
#include-once
Opt("GUIOnEventMode", 1)
Opt("MustDeclareVars", 1)
Global $gui
Global $taille[2] = [300, 300]
$gui = GUICreate("", $taille[0], $taille[1])
GUISetOnEvent(-3, "quit", $gui)
GUISetState(@SW_SHOW, $gui)
While(True)
Sleep(10)
WEnd
Func quit()
MsgBox(0)
Exit
EndFunc
Global $dummy0 = 0
Global $dummy1 = 1
Global $dummy2 = 2
Opt("GUIOnEventMode", 1)
Opt("MustDeclareVars", 1)
Global $gui
Global $taille[2] = [300, 300]
$gui = GUICreate("", $taille[0], $taille[1])
GUISetOnEvent(-3, "quit", $gui)
GUISetState(@SW_SHOW, $gui)
While(True)
Sleep(10)
WEnd
Func quit()
MsgBox(0)
Exit
EndFunc
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679

Avatar du membre
mikell
Modérateur
Modérateur
Messages : 5850
Enregistré le : dim. 29 mai 2011 16:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#45

Message par mikell » sam. 26 mars 2016 17:49

Pour la présence d'un #include-once dans le fichier principal, c'est signalé à Jos
Pour le reste, vu les avertissements qu'il donne ici :
A few things to note before use:
· Ensure the script is working correctly before using Au3Stripper.
· Ensure the Au3Stripped script is extensively tested
· Do not complain if using Au3Stripper prevented the script from working correctly

je m'abstiendrai, vu que je ne suis pas sûr qu'un include du script principal dans un de ses propres includes soit réellement 'de bonne pratique' :roll:
" 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 : 1800
Enregistré le : mar. 22 juil. 2008 20:55
Localisation : Nantes
Status : En ligne

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

#46

Message par TommyDDR » lun. 28 mars 2016 00:15

Oui, je pense aussi, (mais la compilateur AutoIt lui le gère très bien ^^)
J'ai du faire ça car je bossais sur plusieurs gros fichiers d'un projet, et je voulais faire F5 de n'importe où :p
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679

Avatar du membre
Yle
Niveau 5
Niveau 5
Messages : 134
Enregistré le : mar. 21 avr. 2009 16:22
Localisation : La NORMANDIE -76
Status : Hors ligne

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

#47

Message par Yle » dim. 24 mars 2019 15:43

Mikell bonjour,

Il doit y avoir qq chose qui a changé car ton script qui fonctionnait bien avant me dit systématiquement que mon .AU3 ne comporte qu'une ligne...
J'ai essayé sur d'autres AU3 qui ne comporte pas de #AutoIt3Wrapper ou d'Include et là, cà fonctionne...
QQ chose a du changer dans la 3.3.14.5

D'avance merci

Répondre