Comment savoir le numéro de ligne qui appel une procédure ?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

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

Message 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:
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.
Marc56
Messages : 2199
Inscription : sam. 08/févr./2014 15:19

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

Message 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.
Dernière modification par Marc56 le lun. 16/mars/2020 14:18, modifié 1 fois.
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

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

Message 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
Marc56
Messages : 2199
Inscription : sam. 08/févr./2014 15:19

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

Message 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.
Dernière modification par Marc56 le lun. 16/mars/2020 14:29, modifié 1 fois.
Avatar de l’utilisateur
Mindphazer
Messages : 700
Inscription : mer. 24/août/2005 10:42

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

Message 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:
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
Marc56
Messages : 2199
Inscription : sam. 08/févr./2014 15:19

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

Message 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)
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

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

Message 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.
Marc56
Messages : 2199
Inscription : sam. 08/févr./2014 15:19

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

Message 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++ ?
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

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

Message 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...
Marc56
Messages : 2199
Inscription : sam. 08/févr./2014 15:19

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

Message 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é.
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

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

Message 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.
Avatar de l’utilisateur
Naheulf
Messages : 193
Inscription : dim. 10/mars/2013 22:22
Localisation : France

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

Message 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
Marc56
Messages : 2199
Inscription : sam. 08/févr./2014 15:19

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

Message 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
Répondre