Page 2 sur 2

Re: Comment savoir le numéro de ligne qui appel une procédur

Publié : lun. 16/mars/2020 13:54
par Shadow
Whaaouu il est fort notre Fred, il sais aller et prévoir les Bug du Future :lol: :mrgreen:
03/06/2020, chez moi c'est pas encore arrivé :mrgreen:

Re: Comment savoir le numéro de ligne qui appel une procédur

Publié : lun. 16/mars/2020 14:11
par Marc56
Shadow a écrit :Whaaouu il est fort notre Fred, il sais aller et prévoir les Bug du Future :lol: :mrgreen:
03/06/2020, chez moi c'est pas encore arrivé :mrgreen:
S'agissant de l'affichage de la date en anglais, celle-ci se fait par défaut mois/jour Année (donc 6 mars) :wink:
Une date en anglais se prononce "Mars, le sixième" (jour) à traduire « le sixième jour de mars »

Je continue à chercher comment faire pour affiche ce numéro de ligne en message graphique. Ce serait utile pour faire des version beta.

Re: Comment savoir le numéro de ligne qui appel une procédur

Publié : lun. 16/mars/2020 14:18
par Zorro
donc tout ça pourrai alors signifier qu'en mode "Compil+Debuggeur"
ce soit en fait une interpretation du code qui est faite par le debuggeur

on aurai alors un Executable (le debuggeur) qui lancerai en mode interpreteur le code
d'ou la possibilité de recuperer les numeros de lignes ....

ce serai etonnant, mais je ne vois que ça pour expliquer la chose ....
une explicatiion de Fred , serai la bienvenue ... 8O

Re: Comment savoir le numéro de ligne qui appel une procédur

Publié : lun. 16/mars/2020 14:26
par Marc56
J'ai pris l'exemple de l'aide sur OnErrorGoto() puis compilé en ligne de commande avec -l -d puis lancé l'exe généré et j'explore le debbugeur en ligne de commande.
Il indique bien le numéro de ligne et qui est le numéro où s'est produit l'erreur et non pas comme je croyais le numéro de branchement.

Il semble que si on compile avec -l il encapsule le debuguer en ligne dans l'EXE
Un débogueur en ligne de commande uniquement. Le but premier de ce débogueur est de pouvoir tester et développer un programme PureBasic sur un système dépourvu d'environnement graphique (comme un serveur linux), et/ou développer à distance via SSH.

Je continue à explorer pour ma (petite) culture générale.

Re: Comment savoir le numéro de ligne qui appel une procédur

Publié : lun. 16/mars/2020 14:29
par Mindphazer
Marc56 a écrit : S'agissant de l'affichage de la date en anglais, celle-ci se fait par défaut mois/jour Année (donc 6 mars) :wink:
Une date en anglais se prononce "Mars, le sixième" (jour) à traduire « le sixième jour de mars »
C'est la raison pour laquelle samedi dernier était le "Pi day". Je laisse le soin à notre ami shadow de comprendre pourquoi... :mrgreen:

Re: Comment savoir le numéro de ligne qui appel une procédur

Publié : lun. 16/mars/2020 14:45
par Marc56
-d ou /DEBUGGER fait la même chose que compiler dans l'IDE avec l'option du menu Compilateur > Compiler avec le débogueur (différent de l'icône de la barre d'outil)
Les messages d'erreurs sont par contre différents (pas de chemin dans le fichier)

..et je continue ma (re)lecture des chapitres généraux de l'aide 8)

Re: Comment savoir le numéro de ligne qui appel une procédur

Publié : lun. 16/mars/2020 15:41
par Ollivier
Avec l'option << commented >> il y a tout ce qu'il faut pour retrouver le numéro de ligne qui a appelé. Ça ne ralentit rien. J'ai expliqué comment faire plus haut.

Et si Fred ralentit son programme (ce qui m'étonnerait) c'est son problème.

Re: Comment savoir le numéro de ligne qui appel une procédur

Publié : lun. 16/mars/2020 16:01
par Marc56
Ollivier a écrit :Avec l'option << commented >> il y a tout ce qu'il faut pour retrouver le numéro de ligne qui a appelé. Ça ne ralentit rien. J'ai expliqué comment faire plus haut.
Si c'est là, alors pour mon cas j'ai rien compris, mais je plane très bas.

Avec le paramètre /commented il ne se passe rien (mais as-tu testé ?)

Perso, j'ai testé l'exemple

Code : Tout sélectionner

MessageRequester("Test OnError", "Début Test errorline.")

OnErrorGoto(?GestionErreurs)
PokeS(10, "Salut le Monde.") ; Provoque une erreur #PB_OnError_InvalidMemory

MessageRequester("Test OnError", "Ceci ne devrait jamais s'afficher.")
End

GestionErreurs:
MessageRequester("Test OnError", "L'erreur suivante est arrivée dans errorline: " + ErrorMessage())
End
Compilé

Code : Tout sélectionner

C:>pbcompiler /LINENUMBERING /DEBUGGER OnErrorShowLine.pb /EXE OnErrorShowLine.exe

Code : Tout sélectionner

******************************************
PureBasic 5.71 LTS (Windows - x64)
******************************************

Compiling OnErrorShowLine.pb
Loading external libraries...
Starting compilation...
12 lines processed.
Creating executable "OnErrorShowLine.exe".

- Feel the ..PuRe.. Power -
Lancé

Code : Tout sélectionner

C:>OnErrorShowLine.exe
Le programme a commencé, puis s'est planté (comme prévu) et a affiché une console.

Code : Tout sélectionner

[Debugger Warning]  The OnError library may not catch all errors with enabled debugger.
[Debugger Warning]  File: OnErrorShowLine.pb (Line: 3)

[Debugger Error]  Invalid memory access. (write error at address 10)
[Debugger Error]  File: OnErrorShowLine.pb (Line: 4)
  Fatal error. Do you want to open the Debugger console? (Yes, No)
y

==============================================
 PureBasic Console Debugger
==============================================

Type 'help' for command options.
DEBUGGER::
J'ai bien le numéro de ligne mais affiché en mode texte par le debbug intégré alors (+250Ko)

Donc je continue à me demander comment fait Fred pour afficher le numéro de ligne dans une fenêtre graphique ?
Exemple:
Image

Mais l'IDE est il entièrement écrit en PB ou en C++ ?

Re: Comment savoir le numéro de ligne qui appel une procédur

Publié : lun. 16/mars/2020 16:25
par Ollivier
Oui c'est là (page précédente).

L'option << commented >> produit le fichier << Purebasic.ASM >>.

Et le fichier Purebasic.ASM c'est le fichier qui contient tout ce qu'il faut pour faire un bon déboguage.

Je simplifie:

[Source.PB] -->> PbCompiler.EXE -->> [PureBasic.ASM] -->> FASM.EXE -->> [Source.EXE]

C'est pour que tu comprennes, je l'ai mis en linéaire, même si en réalité PbCompiler a tout inclus dans son fonctionnement, et que je ne schématise pas les dépendances.

Commence en invite de commande à produire PureBasic.ASM puis avec RunProgram.

PureBasic.ASM se situe toujours dans le répertoire du compilateur.

Et ne me demande pas si j'ai testé : c'est oui, il y a 11 ans et c'est sûr que ça marche encore !!

Je dois avoir 3 heures d'utilisation de PC en un an !! Par contre, j'ai bonne mémoire : aie confiance...

Re: Comment savoir le numéro de ligne qui appel une procédur

Publié : lun. 16/mars/2020 16:36
par Marc56
Oui, je sais, comme tout le monde, que PB produit un fichier ASM et que c'est ce fichier qui est ensuite compilé en EXE avec FASM (ou autre compilateur ASM pour les autres OS).
D'où la petite taille et l’extrême rapidité des EXE PB par rapport aux bloatwares et autres pseudos EXE qui ont besoin d'une machine virtuelle (.Net, Java etc)

Ce qu'on cherche à faire c'est faire un EXE en PB et faire en sorte que s'il plante, il affiche le numéro de la ligne du code source où s'est produit l'erreur.
Comme le fait l'IDE pb BETA.

-l, --linenumbering, /LINENUMBERING: ajoute des informations concernant les lignes et les fichiers sources à l'exécutable, qui peut le ralentir considérablement. Ce qui permet à la bibliothèque OnError d'indiquer le fichier et le numéro de ligne en cas d'erreur.

Ça fonctionne, on voudrait juste que le numéro de ligne et nom du fichier s'affiche en fenêtre graphique et ne déclenche pas le débugueur incorporé.

Re: Comment savoir le numéro de ligne qui appel une procédur

Publié : lun. 16/mars/2020 18:50
par Ollivier
L'option << linenumbering >> ne m'intéresse pas. Et je ne comprends pas pourquoi elle est lente. Peut-être qu'elle n'utilise pas de map... Cette option est faite pour gérer des erreurs, pas juste obtenir un numéro de ligne dans un algo.

Je ne sais pas... Peut-être faire "feature request"... En tout cas, le mieux, c'est de faire soi-même, et le fichier PureBAsic.ASM est suffisant et riche d'informations pour fournir rapidement (en terme de performance, pas en terme de programmation, où ça nécessite du travail) le numéro de ligne d'un appel.

Re: Comment savoir le numéro de ligne qui appel une procédur

Publié : mar. 17/mars/2020 20:01
par Naheulf
À un moment j'avais fait joujou avec la fonction "ExamineAssembly(*MemoireDébut [, *MemoireFin])" de la bibliotèque "On error". En fait, si le code est ralenti, ce n'est pas par-ce que c'est interprété. c'est par-ce qu'entre les blocs de code asm correspondant à chaque ligne il y a des instructions en plus qui sont insérées pour appeler le débogueur et rappeler la ligne correspondante dans le fichier source originel.

Dit autrement c'est en gros comme si entre chaque ligne de ton code tu mettait
LigneCode = #PB_Compriler_Line : CallDebugger

Re: Comment savoir le numéro de ligne qui appel une procédur

Publié : mer. 18/mars/2020 8:53
par Marc56
Bingo Naheulf,

Effectivement il y a indication du numéro de ligne ligne dans le fichier ASM selon les options de compilation

pbcompiler /commented fichier.pb (donne un source ASM (purebasic.asm par defaut)
pbcompiler /commented /linenumbering fichier.pb (donne le même fichier mais avec indication de la ligne source (exemple: MOV dword [CLN],20)

Essayez avec un petit fichier et comparez les deux fichiers ASM
Exemple ici avec /commented et /linenumbering

Code : Tout sélectionner

; Repeat 
_Repeat1:
  MOV    dword [CLN],17
; Select WaitWindowEvent()
  MOV    dword [CLN],18
  CALL   PB_WaitWindowEvent
  PUSH   rax
; 
; Case #PB_Event_CloseWindow
  MOV    dword [CLN],20
  MOV    r15,13116
  CMP    r15,[rsp]
  JNE   _Case1
; End
  MOV    dword [CLN],21
  ADD    rsp,-8
  JMP   _PB_EOP
Le deuxième comporte sous chaque ligne de code originale (en commentaire), le numéro de ligne du code source original sous la forme MOV dword [CLN], <numéro de ligne>

Je suis content d'avoir appris un truc nouveau ce matin (même si ça ne me servira pas, c'est pour la culture générale)
:P