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

C++/CLI Discussion :

NoMeyrio, message de débogage


Sujet :

C++/CLI

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    3 379
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 3 379
    Par défaut NoMeyrio, message de débogage
    Bonjour tout le monde,

    Je parle C++ à peu près aussi bien qu'une vache espagnole parle Anglais (ou peut-être pas tout-à-fait aussi bien), et j'ai un souci avec NoMeyrioUI.

    Après quelques tentatives pour modifier l'affichage, j'avais un message d'erreur, erreur d'assomption. Et ça même après restauration de la sauvegarde, ce qui m'intriguait bien.

    Finalement, le projet est plus ancien que je ne m'en rendais compte, et a fini par avoir quelques petits soucis.

    Un coup d'œil au fichier readme apporte les deux précisions suivantes :
    • NoMeyrioUI modifie le registre, et a bien pu noter là de rester en débogage
    • La version 3.4.2 fonctionne


    Définir une police plus grande pour l'affichage du formulaire serait bien utile (après tout on utilise ce programme pour que Windows soit lisible). Ce projet est loin d'être le seul concerné, si des fois il existe quelque part une notice à l'attention de développeurs qui ne connaissent rien à C++ ça peut aider.

    Sinon je m'efforcerai de poser une question plus précise, mais alors ça me prendra plus de temps.
    Images attachées Images attachées  

  2. #2
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 793
    Par défaut
    Bonjour,

    Sauf erreur, l'écran dit juste qu'une assertion placée en ligne 1931 du fichier donné juste avant n'est pas vérifiée. Il faut aller voir cette assertion et regarder ce qu'elle vérifie (apparemment la validité d'une adresse). En général, c'est souvent le résultat du passage d'un pointeur (objet y compris) non (ou plus) initialisé.

    Salutations
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

  3. #3
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    3 379
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 3 379
    Par défaut
    Bonjour,

    Merci,

    Effectivement à partir de la ligne 1929 de C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\vector

    il y a ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #if _MSVC_STL_HARDENING_VECTOR || _ITERATOR_DEBUG_LEVEL != 0
            _STL_VERIFY(
                _Pos < static_cast<size_type>(_My_data._Mylast - _My_data._Myfirst), "vector subscript out of range");
    #endif
    Et donc, comme je disais, c'est du code qui ne s'exécute pas si _ITERATOR_DEBUG_LEVEL vaut 0.

    Alors là où ça peut présenter un intérêt de creuser ça, c'est en assimilant les bases du langage (que je n'ai qu'à peine effleuré), pouvoir finir par gérer la police d'affichage.

    En attendant, le concepteur du programme a conscience d'avoir laissé des repères de débogage, et il a publié une autre version, qui fonctionne proprement.

    Dans cette version il y a un menu options qui permet de choisir la police d'affichage, malheureusement ça ne permet pas de choisir la taille. En mettant Arial Black j'arrive à deviner ce qui est écrit sur la gauche de la boîte de dialogue (les utilisations des six polices gérées, title bar, icon, palette title, hint, message box, menu), en revanche pour voir à droite les polices sélectionnées là il faut la loupe, parce que c'est écrit dans une couleur plus pâle.
    Je n'ai pas essayé d'en toucher deux mots au concepteur, apparemment il a déjà fait du chemin sur la question.

    Les versions précédentes présentent aussi l'option pour la police d'affichage de la boîte de dialogue, mais c'est en parcourant le fichier d'aide que je découvre ça. Et la police d'affichage de la boîte de dialogue est le seul point pour lequel il faut un fichier d'aide parce que les manipulations ne sont pas intuitives.

    Alors dans la version principale, pour savoir à quoi se rapporte ce vector, j'imagine qu'il faut aller chercher du code supplémentaire au niveau de l'appel ?

    à commencer par la pile d'appel, qui comporte six lignes, précédées par du "code externe".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    noMeiryoUI.exe!std::vector<int,std::allocator<int>>::operator[](const unsigned int _Pos) Ligne 1930
    	à C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\vector(1930)__
    noMeiryoUI.exe!NoMeiryoUI::set11TitlePreset(tagNONCLIENTMETRICSW * metrics) Ligne 2231
    	à C:\Projects Visual Studio\Winform\NoMeyrio\program\noMeiryoUI.cpp(2231)
    __
    noMeiryoUI.exe!NoMeiryoUI::selectFont(NoMeiryoUI::fontType type) Ligne 1375
    	à C:\Projects Visual Studio\Winform\NoMeyrio\program\noMeiryoUI.cpp(1375)
    __
    noMeiryoUI.exe!NoMeiryoUI::OnCommand(unsigned int wParam) Ligne 1140
    	à C:\Projects Visual Studio\Winform\NoMeyrio\program\noMeiryoUI.cpp(1140)
    __
    noMeiryoUI.exe!BaseDialog::dialogProc(HWND__ * hDlg, unsigned int message, unsigned int wParam, long lParam) Ligne 205
    	à C:\Projects Visual Studio\Winform\NoMeyrio\program\TWR\BaseDialog.cpp(205)
    __
    noMeiryoUI.exe!MainDialogProc(HWND__ * hwndDlg, unsigned int uMsg, unsigned int wParam, long lParam) Ligne 222
    	à C:\Projects Visual Studio\Winform\NoMeyrio\program\noMeiryoUI.cpp(222)

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 631
    Par défaut
    Il faudrait un peu remettre le clocher au centre du village.

    Après quelques tentatives pour modifier l'affichage, j'avais un message d'erreur, erreur d'assomption.
    Modification de quoi ?
    • Des paramètres d'affichage de votre ordinateur via cette "outil" ?
    • Le code source du projet pour qu'il s'adapte à votre besoin ?


    Le message d'erreur mentionne un répertoire "Debug" qui ne fait pas partie ni du package livrable ni dans les sources fournis.
    L'exécutable lancé est donc le résultat d'une compilation faite avec vos petites mimines.
    Si vous lancez l'exécutable qui est dans le répertoire "Debug", c'est normal que vous lanciez une version qui contient des "auto-vérifications" pour détecter des erreurs de programmation (Rôle de la MACRO "_STL_VERIFY" qui apparaît à la ligne indiquée par le message d'erreur).

    Vous n'auriez donc qu'à cliquer sur le bouton "Recommencer" (oui le label de ce bouton est "trompeur") de la boite de dialogue pour lancer le débugueur par défaut qui s'attachera à votre programme est vous pourriez analyser concrètement le problème.

    Et ça même après restauration de la sauvegarde, ce qui m'intriguait bien.
    Kesako ???

    NoMeyrioUI modifie le registre
    Et ?

    La version 3.4.2 fonctionne
    C'est vraisemblablement une version Release et pas Debug, donc sans auto-vérification => Erreurs "silentieuses", ou erreurs induites pas votre chaine compilation.

    Définir une police plus grande pour l'affichage du formulaire serait bien utile (après tout on utilise ce programme pour que Windows soit lisible). Ce projet est loin d'être le seul concerné, si des fois il existe quelque part une notice à l'attention de développeurs qui ne connaissent rien à C++ ça peut aider.
    Ce "formulaire", il est là pour enclencher une session de débugging. Le débugueur est bien plus "puissant" qu'une semble boite de dialogue.

    Effectivement à partir de la ligne 1929 de C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\vector
    Cela montre juste que la condition "_Pos < static_cast<size_type>(_My_data._Mylast - _My_data._Myfirst)" n'est pas respectée.
    Le débugueur est ton ami pour trouver la cause racine de cette erreur que la MACRO "_STL_VERIFY" te signale sur un plateau.

    Et donc, comme je disais, c'est du code qui ne s'exécute pas si _ITERATOR_DEBUG_LEVEL vaut 0.
    NON
    C'est une vérification qui est faite si la constante de compilation "_MSVC_STL_HARDENING_VECTOR" est défini ou si la constante de compilation "_ITERATOR_DEBUG_LEVEL" n'est pas égale à 0 (défini ou pas).
    En gros ou fait cette vérification si on a demandé d'utiliser une version "renforcé" de la librairie STL, ou si on n'a demandé un certain niveau de "Debug" (outils d'aides au développement/débugage).

    et il a publié une autre version, qui fonctionne proprement.
    Ou plutôt qui planque les problèmes sous le tapis, probablement.

    Dans cette version il y a un menu options qui permet de choisir la police d'affichage, malheureusement ça ne permet pas de choisir la taille. En mettant Arial Black j'arrive à deviner ce qui est écrit sur la gauche de la boîte de dialogue (les utilisations des six polices gérées, title bar, icon, palette title, hint, message box, menu), en revanche pour voir à droite les polices sélectionnées là il faut la loupe, parce que c'est écrit dans une couleur plus pâle.
    Je n'ai pas essayé d'en toucher deux mots au concepteur, apparemment il a déjà fait du chemin sur la question.
    Vous parlez du programme utilitaire ou de la boite de dialogue du message d'erreur ?
    Si c'est de la boite de dialogue du message d'erreur, utilisez le débugueur.

    Les versions précédentes présentent aussi l'option pour la police d'affichage de la boîte de dialogue, mais c'est en parcourant le fichier d'aide que je découvre ça. Et la police d'affichage de la boîte de dialogue est le seul point pour lequel il faut un fichier d'aide parce que les manipulations ne sont pas intuitives.
    ???

    Alors dans la version principale, pour savoir à quoi se rapporte ce vector, j'imagine qu'il faut aller chercher du code supplémentaire au niveau de l'appel ?

    à commencer par la pile d'appel, qui comporte six lignes, précédées par du "code externe".
    Il faut plutôt voir pourquoi la condition n'est pas respectée.

    Vous avez eu accès à la callstack, donc au débugueur, j'ai du mal à comprendre vos interrogations maintenant.

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

Discussions similaires

  1. Variable s'initialisant uniquement à la première utilisation d'un programme
    Par Yann_69 dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 15/05/2012, 13h44
  2. [Conception] Variable et initialisation
    Par zaknaou dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 25/12/2006, 11h35
  3. Réponses: 11
    Dernier message: 07/04/2005, 10h20
  4. [VB6]Initialiser une variable Static dans un évenement
    Par loverdose dans le forum VB 6 et antérieur
    Réponses: 16
    Dernier message: 20/01/2005, 14h57
  5. Réponses: 9
    Dernier message: 29/06/2004, 08h40

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