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

Partagez vos scripts, et vos applications AutoIt.
Règles du forum
.
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 1804
Enregistré le : mar. 22 juil. 2008 20:55
Localisation : Nantes
Status : Hors ligne

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

#1

Message par TommyDDR » mar. 27 mars 2012 15:26

Bonjour,

Vous vous êtes surement tous confronté au problème suivant :
  • Vous codez une application
  • Vous la lancez en tant que script pour corriger tous les éventuels bugs
  • Vous vous décidez de le compiler et l'utiliser de façon normal
  • C'est là qu'une erreur bien caché fait son apparition et vous vous retrouvez avec un message du type :
    Error.JPG
    Error.JPG (9.88 Kio) Vu 7822 fois
    Error.JPG
    Error.JPG (9.88 Kio) Vu 7822 fois
Malheureusement votre code ne contient même la ligne 1745.

En effet, une fois compilé, toutes les lignes #include "XXXXX" sont supprimé et remplacé par le code des dit fichiers, c'est pourquoi la ligne d'erreur indiqué est beaucoup plus grande une fois le script compilé.

J'ai donc créé un script qui permet de connaitre le fichier et la ligne de ce fichier concerné par l'erreur.

Mode d'emploi :
1) Lancer le script
2) Indiquer le nom du fichier PRINCIPAL de votre script
3) Indiquer le numéro de ligne d'erreur indiqué par le programme COMPILÉ
4) Vous voila avec le nom du fichier concerné ainsi que le numéro de la ligne fautive du plantage.

PS : Il est nécessaire d'avoir en votre possession le code source du script, et qu'il soit en accord avec la version compilé (pas de modifications du code après compilation)
Le code n'est pas commenté :D

[attachment=3]GetRealErrorLine.au3[/attachment]
OneFileScript.au3
(4.6 Kio) Téléchargé 231 fois
OneFileScript.au3
(4.6 Kio) Téléchargé 231 fois
GetRealErrorLine.au3
(853 Octets) Téléchargé 225 fois
GetRealErrorLine.au3
(853 Octets) Téléchargé 225 fois
Exemple.au3
(1.73 Kio) Téléchargé 214 fois
Exemple.au3
(1.73 Kio) Téléchargé 214 fois
Fichiers joints
GetRealErrorLine.au3
(3.68 Kio) Téléchargé 547 fois
GetRealErrorLine.au3
(3.68 Kio) Téléchargé 547 fois
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679

Avatar du membre
sksbir
Niveau 7
Niveau 7
Messages : 384
Enregistré le : lun. 26 oct. 2009 17:57
Localisation : Lyon
Status : Hors ligne

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

#2

Message par sksbir » mar. 27 mars 2012 15:41

ça, c'est ..... excellent !! 8)

Parce que , l'avantage d'autoit, c'est d'obtenir des exécutables autonomes. Il m'arrive souvent d'écrire des scripts que je ne lance même pas sur la machine où j'écris le script, mais sur une autre machine sur laquelle je ne veux pas installer autoit ni scite. Du coup, quand ça plante, le déboggage était très chaud à faire.
Ton outils va donc me servir

Avatar du membre
TopXm
Niveau 6
Niveau 6
Messages : 260
Enregistré le : mer. 25 mai 2011 15:37
Localisation : Cognac !!!
Status : Hors ligne

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

#3

Message par TopXm » mar. 27 mars 2012 18:33

Hello TommyDDR,

En effet cela est une excellent idée.

Juste un "petit bémol", c'est dommage que ça ne prenne pas en compte la "User Include Dir" qu'on peut définir dans Scite (CTRL+1), car ce dossier est bien pratique pour y coller ses propres fonctions qu'on utilise régulièrement.

Du coup je me suis permis d'ajouter quelques lignes dans le script
Au niveau du 1er Global

Code : Tout sélectionner

Global $UserIncludeDirectory = RegRead("HKEY_CURRENT_USER\SOFTWARE\AutoIt v3\AutoIt", "Include")
If $UserIncludeDirectory = "" Then $UserIncludeDirectory = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3\AutoIt", "Include")
If $UserIncludeDirectory <> "" And FileExists($UserIncludeDirectory) Then $UserIncludeDirectory &= '\'
 
Et dans la Func CalculeRealLigne() j'ai modifié les FileExist() pour ajouter $UserIncludeDirectory

Code : Tout sélectionner

    If(Not(FileExists($PathUsed & $Fichier))) Then
        If $UserIncludeDirectory <> '' Then
            $PathUsed = $UserIncludeDirectory
        EndIf
    EndIf
    If(Not(FileExists($PathUsed & $Fichier))) Then
        $PathUsed = $ScriptDir
    EndIf
    If(Not(FileExists($PathUsed & $Fichier))) Then
        Local $TabEmpty[2] = [0, ""]
        Return SetError(1, 0, $TabEmpty)
    EndIf
 
Vu que l'ordre de recherche des .au3 semble être :
  1. Le dossier Include d'AutoIT
  2. Le dossier Include défini par l'utilisateur (si défini)
  3. Le dossier du script en cours
Bon après possible que ça n'intéresse que moi :)

Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 1804
Enregistré le : mar. 22 juil. 2008 20:55
Localisation : Nantes
Status : Hors ligne

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

#4

Message par TommyDDR » mer. 28 mars 2012 08:50

En effet, je n'avais pas pensé au dossier include utilisateur

Je ne l'utilise pas car lors d'export d'un script, il faut pensé que certains includes sont situé dans ce dossier.
De cette manière, je n'ai qu'à copier le dossier du script pour que celui-ci soit fonctionnel.

J'ajoute votre modification au script ;)

Pour Info :
#include "test.au3" -> Recherche : Dossier courant puis dossier include
#include <test.au3> -> Recherche : Dossier include puis dossier courant

Edit : Je n'ai pas de clé Include dans HK_CRRENT_USER et même en l'ajoutant, autoit ne le prend pas en compte. Comment AutoIt connait-il les dossier d'includes ?
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é

#5

Message par ricky » jeu. 29 mars 2012 12:55

Hello,

super utile ton code. Merci du partage

Avatar du membre
TopXm
Niveau 6
Niveau 6
Messages : 260
Enregistré le : mer. 25 mai 2011 15:37
Localisation : Cognac !!!
Status : Hors ligne

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

#6

Message par TopXm » sam. 31 mars 2012 13:06

Hello TommyDDR :)
TommyDDR a écrit :Pour Info :
#include "test.au3" -> Recherche : Dossier courant puis dossier include
#include <test.au3> -> Recherche : Dossier include puis dossier courant
Ah tiens merci, je ne connaissais pas cette information :)
TommyDDR a écrit :Edit : Je n'ai pas de clé Include dans HK_CRRENT_USER et même en l'ajoutant, autoit ne le prend pas en compte.
A priori la clé n'est créée que lorsque l'on renseigne l'information dans Scite. Elle est bien présente sur mon PC.
TommyDDR a écrit :Comment AutoIt connait-il les dossier d'includes ?
Ben j'ai récupéré le bout de code dans SciteConfig.au3 du dossier C:\Program Files\AutoIt3\SciTE\SciTEConfig ligne 214/215 ;)

Avatar du membre
sksbir
Niveau 7
Niveau 7
Messages : 384
Enregistré le : lun. 26 oct. 2009 17:57
Localisation : Lyon
Status : Hors ligne

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

#7

Message par sksbir » mar. 03 avr. 2012 15:05

hello
Le programme m'indique une ligne en erreur qui ne correspond pas tout à fait : exemple : il me dit 2057, et c'est la ligne 2059 qui est en erreur. ( note pour moi : N° d'origine : 6783)

Avatar du membre
wello
Niveau 1
Niveau 1
Messages : 11
Enregistré le : sam. 24 mars 2012 14:57
Status : Hors ligne

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

#8

Message par wello » mar. 03 avr. 2012 15:09

salut

...hum, ça va bien me servir je pense. En tout cas si ça peut nous faire gagner un temps précieux, c'est pas négligeable.

merci c'est cool je garde ton code sous le coude 8)
- Liens -

- Boîte Gmail v1.0 ;==> Connectez-vous à votre compte sans entrer vos identifiants à chaque fois et de façon crypté !!!

Pour tester l'application, contactez-moi par MP.

Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 1804
Enregistré le : mar. 22 juil. 2008 20:55
Localisation : Nantes
Status : Hors ligne

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

#9

Message par TommyDDR » mar. 03 avr. 2012 17:06

Les joies du partage libre :)

Et si cela vous fait plaisir, ça me fait plaisir ;)
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é

#10

Message par ricky » mar. 05 juin 2012 10:16

Hello,

j'ai une erreur, je comprends pas pourquoi :

C:\Documents and Settings\rc\Bureau\AutoIt SourceCode\GetRealErrorLine.au3 (74) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
$Temp = StringSplit($Temp[1], $Chars[1], 3)
$Temp = StringSplit(^ ERROR

Merci d'avance pour ton aide.

Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 1804
Enregistré le : mar. 22 juil. 2008 20:55
Localisation : Nantes
Status : Hors ligne

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

#11

Message par TommyDDR » mar. 05 juin 2012 22:12

Votre question doit faire l'objet d'une demande à part entière. Elle n'a rien à faire ici. De plus, "Array variable has incorrect number of subscripts or subscript dimension range exceeded." en dit long sur le pourquoi cela plante.
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é

#12

Message par ricky » mer. 06 juin 2012 08:47

Hello,
pourquoi ça doit faire une demande à part entière? C'est le script fourni au premier topic qui ne marche pas!

Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 1804
Enregistré le : mar. 22 juil. 2008 20:55
Localisation : Nantes
Status : Hors ligne

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

#13

Message par TommyDDR » mer. 06 juin 2012 16:17

Aaaah, c'était une erreur dans mon programme :P
Je ne l'avais pas compris comme ça, envoyez les sources du programme concerné pour que je puisse me pencher dessus.
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679

Jerem
Niveau 2
Niveau 2
Messages : 24
Enregistré le : ven. 17 mai 2013 10:13
Status : Hors ligne

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

#14

Message par Jerem » lun. 18 août 2014 16:38

Bonjour,

Je suis tombé sur ce topic en cherchant une solution au message d'erreur que je reçois sur mon programme compilé.

J'ai cru que ça allait me sauver la vie, mais malheureusement le programme ne semble pas fonctionner sur mon PC.
J'ai modifié le code afin de l'adapter à mon environnement (la clé de registre sur Win8 64 bits est différente et j'ai ajouté la troisième case "false" lorsque le fichier n'est pas trouvé pour éviter l'erreur d'array number of subscripts) mais la ligne retournée correspond au fichier WinAPI, je doute qu'il y ait une erreur dans ce fichier; d'autant que la ligne ne correspond pas à l'erreur retournée. :P

Bref ma question est la suivante : Le programme fonctionne-t-il avec des programmes compilés en 64 bits ?

Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 1804
Enregistré le : mar. 22 juil. 2008 20:55
Localisation : Nantes
Status : Hors ligne

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

#15

Message par TommyDDR » mar. 19 août 2014 09:13

Cela fait pas mal de temps que je ne m'en suis pas servi, le programme à été codé avec une ancienne version d'autoit, si la compilation à changé (mais j'en doute) il ne fonctionnera plus, si cela ne vous dérange pas, pouvez vous fournir les sources ?
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679

Jerem
Niveau 2
Niveau 2
Messages : 24
Enregistré le : ven. 17 mai 2013 10:13
Status : Hors ligne

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

#16

Message par Jerem » mar. 19 août 2014 14:33

Bonjour,

Merci d'avoir répondu alors que le message d'origine à plus de deux ans.

Je ne peux pas fournir les sources en l'état, il faudrait que j'enlève certaines informations relatives à mon entreprise.
De même le code fourni ne sera pas fonctionnel sur un environnement qui ne correspond pas au mien. À priori cela ne devrait pas poser de problème pour vérifier le fonctionnement du programme de détection de ligne, mais j'aimerai en être sûr avant de me lancer dans la modification des informations confidentielles.

Merci.

Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 1804
Enregistré le : mar. 22 juil. 2008 20:55
Localisation : Nantes
Status : Hors ligne

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

#17

Message par TommyDDR » mar. 19 août 2014 14:54

Le problème vient peut être d'une subtilité que j'aurais oublié, ce qui décalerait les lignes...
Sans le code il sera compliqué de vous aider.
Le code n'a pas besoin d'être exécuter, il faut juste s'assurer que le problème persiste après avoir modifié les infos.
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679

Jerem
Niveau 2
Niveau 2
Messages : 24
Enregistré le : ven. 17 mai 2013 10:13
Status : Hors ligne

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

#18

Message par Jerem » mar. 19 août 2014 15:12

Finalement modifier le source aura été plus rapide que je ne le pensais.
L'erreur se produit toujours.

La ligne indiqué par le programme compilé est la ligne 2901.
La ligne réelle indiquée est la ligne 2933 de WinAPI.

Le fichier zip contient le code principale.
Les fichiers contenant des fonctions (dont certains sont à placer dans le dossier "include" d'AutoIT). Attention, j'ai une version modifiée du fichier <Array.au3> car j'y ai ajouté une fonction.
Le source modifié de "GetRealErrorLine" pour qu'il retourne un résultat au lieu d'une erreur (il y a juste 2 ou 3 petites choses qui changent).
Fichiers joints
Scripts.zip
Sources
(145.95 Kio) Téléchargé 188 fois
Scripts.zip
Sources
(145.95 Kio) Téléchargé 188 fois
Modifié en dernier par mikell le mar. 19 août 2014 17:01, modifié 1 fois.
Raison : Merci d'éviter les colorations de texte inutiles

Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 1804
Enregistré le : mar. 22 juil. 2008 20:55
Localisation : Nantes
Status : Hors ligne

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

#19

Message par TommyDDR » mar. 19 août 2014 15:57

Il va m'être compliqué de vous aider, en analysant votre Array.au3, je vois que vous avez une ancienne version de celui-ci.

Si nous n'avons pas les même versions d'AutoIt, les UDF ont changés entre temps et les lignes ne correspondent plus.

Voici ce que j'obtiens :

Code : Tout sélectionner

---------------------------
Résultat
---------------------------
Fichier :

C:\Program Files (x86)\AutoIt3\Include\ListViewConstants.au3

Ligne :279
---------------------------
OK   
---------------------------
Du coup j'ai essayé de compiler votre programme (ça à marché), de la lancer (ok aussi) mais impossible d'avoir une erreur en l'utilisant.

À savoir aussi, le programme va d'abord chercher l'include dans le dossier include d'AutoIt avant de regarder dans le dossier courant (normalement < > pour le dossier include et " " pour le dossier courant) donc si vous avez un include perso du même nom qu'un include officiel, c'est l'officiel qui sera pris en compte.

Mis à part cela, je ne vois pas où ça peut bloquer..

Avez vous possibilité de supprimer les infos confidentiels et en ajouter d'autres mais bidons ?
(faire en sorte que le programme soit toujours compilable et le bug reproductible une fois recompilé).
Sinon, avez vous essayé de lancer le script dans SciTe avec F5 pour avoir la ligne fautive ?

Juste pour info : Il ne faut jamais modifier un UDF, au pire, faites vous un _ArrayEx.au3 où vous mettrez vos nouvelles fonctions.

Hors sujet : Dans l'aide de votre programme vous avez écris "moins" au lieu de "mois" ^^
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679

Jerem
Niveau 2
Niveau 2
Messages : 24
Enregistré le : ven. 17 mai 2013 10:13
Status : Hors ligne

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

#20

Message par Jerem » ven. 22 août 2014 09:32

Merci pour la petite coquille dans l'aide, je ne l'avais pas remarqué. :oops:

J'aurai donc une ancienne version d'AutoIT ? Ma version est la 3.3.8.1.

Je ne savais pas qu'il ne fallait pas modifier un UDF, je trouvais plus simple d'y ajouter ma fonction. (re :oops: )

Et oui j'ai tenté de lancer le programme non compilé pour reproduire l'erreur, mais mon programme est fait pour fonctionner dans un environnement bien précis et analyser des logiciels développés par ma société sur des serveurs TSE. Il a fallu que j'installe AutoIT sur le serveur pour ensuite obtenir une erreur dans l'UDF "Array.au3" justement. Mais la ligne incriminée n'est pas une ligne que j'ai ajouté moi-même ce que je trouve très étrange.

Vous l'aurez sans doute compris, il sera impossible pour vous d'exécuter le code de manière à ce qu'il fonctionne comme il le devrait (même si je vous fournissait l'original), et donc encore moins de reproduire l'erreur qu'il génère. Celle-ci se produisant uniquement (et pas à chaque fois non plus) lors d'un clique sur le menu "Actualiser".

Ceci étant, à force de recherche, il semble qu'aujourd'hui j'ai pu résoudre le problème de mon programme.
C'est l'option "OnEvent" qui entraînait un conflit dans l'utilisation des variables communes et provoquait des différence dans les tailles des tableaux entre le début et la fin de l'exécution.

Mais votre programme pourrait s'avérer utile en cas de souci sur un autre des mes scripts.
Je vais donc suivre votre conseil et déplacer ma fonction inclus dans le fichier "Array.au3" dans un autre fichier.
Je vais aussi vérifier ma version d'AutoIT pour être sûr d'avoir la dernière.

Merci à vous.

Répondre