Page 3 sur 3

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

Posté : mer. 23 mars 2016 22:31
par mikell
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


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

Posté : jeu. 24 mars 2016 09:11
par TommyDDR
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é :)

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

Posté : jeu. 24 mars 2016 17:04
par mikell
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:

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

Posté : jeu. 24 mars 2016 22:09
par TommyDDR
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

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

Posté : sam. 26 mars 2016 17:49
par mikell
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:

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

Posté : lun. 28 mars 2016 01:15
par TommyDDR
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

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

Posté : dim. 24 mars 2019 15:43
par Yle
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