IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

problème de sortie intempestive de routine


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Homme Profil pro
    passionné
    Inscrit en
    Janvier 2016
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : passionné
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2016
    Messages : 22
    Points : 18
    Points
    18
    Par défaut problème de sortie intempestive de routine
    bonjour à tous, toujours aussi têtu mais débutant...
    J'ai bien avancé dans mon programme, mais je reviens avec une question qui doit être toute couillonne, mais je trouve pas.

    Je pars d'un clic souris
    En fonction d'un test, je lance une routine appelée "mvttf()"
    Cette routine en lance une autre qui me sert à calculer une distance : calculdistance()

    1/ il semble bloquer sur la formule abs() de calcul des valeurs absolues.
    pourtant, j'ai bien "Imports System.Math". je précise que j'ai essay" abs(x) et Math.abs(x) : les deux plantent...

    2/ mais surtout, le plantage conduit le système à sortir des sub calculdistance() et mvttf() pour revenir directement à la partie d'origine "mouse down"...
    je l'ai vérifié en utilisant le "pas à pas"...
    il ne calcul jamais la valeur de directionvers

    j'espère que c'est clair en terme, ou avec le résumé ci dessous avec extrait du code.

    Avez vous une idée de ce qui me plante ?
    Ce fonctionnement curieux correspond-il à un comportement connu et voulu ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Imports System.Math
    Dim entrex, entrey, etx, ety, distance, directionvers As Byte
    
    Private Sub carte1_MouseDown(sender As Object, e As MouseEventArgs) Handles carte1.MouseDown
    (...)
         If phase = 3 And tfactif < 21 And tfmvtrestant(joueur, tfactif) > 0 Then mvttf():faitautrechose()
    (...)
    
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
       Private Sub mvttf()
    
                entrex = tfx(joueur, tfactif)
                entrey = tfy(joueur, tfactif)
                etx = hexciblex
                ety = hexcibley
               calculdistance()
    
    Suite de lignes (...)
    
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub calculdistance()
    distance = Math.Abs(entrex - etx) [Ejection et retour à faitautrechose]
    directionvers=(...)
    Private Sub
    merci d'avance pour votre analyse...

  2. #2
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 193
    Points : 28 077
    Points
    28 077
    Par défaut
    Citation Envoyé par william44af Voir le message
    2/ mais surtout, le plantage conduit le système à sortir des sub calculdistance() et mvttf() pour revenir directement à la partie d'origine "mouse down"...
    je l'ai vérifié en utilisant le "pas à pas"...
    il ne calcul jamais la valeur de directionvers
    Tu as donc sans doute une exception qui, comme elle n'est pas gérée, remonte la pile d'appel jusqu'à trouver un gestionnaire. En l'absence de celui-ci un message d'erreur (d'exception en l’occurrence) est affiché.

    Tu dis que ça remonte jusqu'à faitautrechose(), mais très certainement que faitautrechose() n'est même pas exécuté et que tu sors directement de l'event avec un joli message. Et ce message pourrait aider dans la compréhension du problème.
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  3. #3
    Membre à l'essai
    Homme Profil pro
    passionné
    Inscrit en
    Janvier 2016
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : passionné
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2016
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    Sevyc64, justement : aucun message , le programme reprend à ce "faitautrechose" et continue sa vie ... sans connaître les résultats qu'il devrait connaître. A moins qu'un emplacement de l'interface n'indique l'exeption rencontrée sans faire un "stop" du programme ?

    J'ai remplacé les abs() par des if... then ... et du coup c'est la ligne suivante qui produit le même phénomène. (en occurrence un autre If ... then... )

    Ton explication me fait cependant mieux comprendre : si le système loupe un truc "pas trop grave", il essaye de s'en sortir en "remontant la pile d'appel" pour trouver un truc faisable. Je pensais que toute anomalie arrêtait le débogueur, mais en fait, si je comprends bien, "il" peut aussi s'en sortir autrement.

    Je vais essayé de comprendre quelle anomalie "non grave" intervient alors ...
    Je vais pas tarder à venir vous questionner !

    Merci pour ton aide !


    et j'en profite pour vous demander d'excuser mon langage si peu "expert", mais j'essaye d'utiliser des termes que je comprends (il y en a peu) ! Désolé s'ils vous arrachent probablement les yeux ...

  4. #4
    Membre à l'essai
    Homme Profil pro
    passionné
    Inscrit en
    Janvier 2016
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : passionné
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2016
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    ouille, j'ai trouvé ce message dans la fenêtre "sortie" :

    "Une exception de première chance de type 'System.OverflowException' s'est produite dans WindowsApplication1.exe"

    pouvez vous me la traduire ?

    mon idée : si je définit en Byte a et b

    et que je fais un test :
    Dim a, b as Byte
    If a-b>0 then....


    si b>a, alors le système provoque cet "overflow" ?
    ai-je raison ?

  5. #5
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par william44af Voir le message
    ouille, j'ai trouvé ce message dans la fenêtre "sortie" :

    "Une exception de première chance de type 'System.OverflowException' s'est produite dans WindowsApplication1.exe"

    pouvez vous me la traduire ?

    mon idée : si je définit en Byte a et b

    et que je fais un test :
    Dim a, b as Byte
    If a-b>0 then....


    si b>a, alors le système provoque cet "overflow" ?
    ai-je raison ?
    Bonjour,

    cette exception surgit (dépassement de capacité) lorsque tu tentes de faire un calcul avec un nombre qui ne peut être contenu (trop grand) pour son type de variable !
    Il faut que tu fasses le distinguo entre les différentes allocations mémoire de chaque type : tu ne peux pas toujours travailler avec du Byte (comme je peux je voir plus haut) !

    A+

  6. #6
    Membre à l'essai
    Homme Profil pro
    passionné
    Inscrit en
    Janvier 2016
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : passionné
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2016
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    je ne m'étais jamais posé cette question :

    If a-b>0 then ...

    où et comment est stockée l'opération (a-b) le temps du test ?

    il semble que si a et b sont des "byte" alors ce résultat transitoire est un byte aussi... et plante donc si le résultat est négatif.

    Eh beh c'est résolu en changeant le type de certaines de mes variables.

    C'est assez troublant, car a et b seront toujours entre 0 et 85 dans mon cas : il semblait disproportionné de leur coller une place mémoire de type plus capacitaires...

    Mille merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de sortie dans un programme.
    Par IDE dans le forum C
    Réponses: 8
    Dernier message: 20/05/2007, 18h21
  2. [MySQL] Problème unicode sortie BD (MySQL 5)
    Par bractar dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 19/05/2007, 08h34
  3. Problème unicode sortie BD
    Par bractar dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 18/05/2007, 16h20
  4. Problème de connexion intempestive à MySQL
    Par TangoZoulou dans le forum Apache
    Réponses: 7
    Dernier message: 05/11/2006, 18h12
  5. petit problème de sortie de programme
    Par clampin dans le forum C
    Réponses: 2
    Dernier message: 17/06/2006, 11h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo