03/06/2020, chez moi c'est pas encore arrivé
Comment savoir le numéro de ligne qui appel une procédure ?
Re: Comment savoir le numéro de ligne qui appel une procédur
Whaaouu il est fort notre Fred, il sais aller et prévoir les Bug du Future
03/06/2020, chez moi c'est pas encore arrivé
03/06/2020, chez moi c'est pas encore arrivé
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.
PureBasic: 5.60 x64 Bits.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.
PureBasic: 5.60 x64 Bits.
Re: Comment savoir le numéro de ligne qui appel une procédur
S'agissant de l'affichage de la date en anglais, celle-ci se fait par défaut mois/jour Année (donc 6 mars)Shadow a écrit :Whaaouu il est fort notre Fred, il sais aller et prévoir les Bug du Future![]()
![]()
03/06/2020, chez moi c'est pas encore arrivé
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.
Dernière modification par Marc56 le lun. 16/mars/2020 14:18, modifié 1 fois.
Re: Comment savoir le numéro de ligne qui appel une procédur
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 ...
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 ...
Re: Comment savoir le numéro de ligne qui appel une procédur
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.
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.
Dernière modification par Marc56 le lun. 16/mars/2020 14:29, modifié 1 fois.
- Mindphazer
- Messages : 700
- Inscription : mer. 24/août/2005 10:42
Re: Comment savoir le numéro de ligne qui appel une procédur
C'est la raison pour laquelle samedi dernier était le "Pi day". Je laisse le soin à notre ami shadow de comprendre pourquoi...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)
Une date en anglais se prononce "Mars, le sixième" (jour) à traduire « le sixième jour de mars »
Bureau : Win10 64bits
Maison : Macbook Pro M3 16" SSD 512 Go / Ram 24 Go - iPad Pro 32 Go (pour madame) - iPhone 15 Pro Max 256 Go
Maison : Macbook Pro M3 16" SSD 512 Go / Ram 24 Go - iPad Pro 32 Go (pour madame) - iPhone 15 Pro Max 256 Go
Re: Comment savoir le numéro de ligne qui appel une procédur
-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
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
Re: Comment savoir le numéro de ligne qui appel une procédur
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.
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
Si c'est là, alors pour mon cas j'ai rien compris, mais je plane très bas.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.
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
Code : Tout sélectionner
C:>pbcompiler /LINENUMBERING /DEBUGGER OnErrorShowLine.pb /EXE OnErrorShowLine.exeCode : 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 -
Code : Tout sélectionner
C:>OnErrorShowLine.exeCode : 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::Donc je continue à me demander comment fait Fred pour afficher le numéro de ligne dans une fenêtre graphique ?
Exemple:

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
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...
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
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é.
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
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.
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
À 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
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
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 /linenumberingLe 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)

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_EOPJe 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)