Debug mode pour une application winform

[Résolu]
Signaler
Messages postés
3
Date d'inscription
mardi 10 juin 2008
Statut
Membre
Dernière intervention
24 novembre 2008
-
Messages postés
3
Date d'inscription
mardi 10 juin 2008
Statut
Membre
Dernière intervention
24 novembre 2008
-
J'ai actuellement un point d'arrêt de VS 2005 qui fait planter l'application. Je m'explique.

Dans une formulaire, le frm_load modifie une donnée et réinitlise le bindingcontext.
Une fois le binding context en place, je lance une méthode qui va changer cette information de visibilité de groupbox...

l'application marche très bien en mode classique, excepté que cette dernière partie (visibilité des groupbox) ne donne rien, comme si la binding.current ne renvoyait pas des bonnes données.
Afin de vérifier ces données, j'ai posé un point d'arrêt :
this.newReceptionScreenDataLayerBindingSource.DataSource = this.currentReception;
<strike>//this.newReceptionScreenDataLayerBindingSource.ResetBindings(false);</strike>
<strike>//newReceptionScreenDataLayerBindingSource.ResetCurrentItem();</strike>
[BREAKPOINT]ManageGroupBoxRawMaterial();

Et juste le fait de poser le breakpoint fait que l'application s'arrête purement et simplement.
Un eval de newReceptionScreenDataLayerBindingSource.current au moment du breakpoint ne me permet que d'afficher le début des données de l'objet, ensuite les données sont soient ok, soient à :
        Function evaluation was aborted
        Cannot evaluate expression because debugging information has been optimized away

Suite a quelques recherches sur :
http://forums.msdn.microsoft.com/en-US/vsdebug/thread/817776da-13da-43f5-a189-1727ce4f3b6b
et quelques autres, j'ai supprimé tout mes debug.assert() (expression non recommandée en debug, car non managée) mais tout reste.

Quelqu'un aurait il quelque chose à me proposer ?

1 réponse

Messages postés
3
Date d'inscription
mardi 10 juin 2008
Statut
Membre
Dernière intervention
24 novembre 2008

solution trouvée :

Le (BindingSource.DataSource = something) appelle des méthodes aynchrone managé, effectuant des appels sur une autre classe (dont something est une collection).
Or j'avais un autre breakpoint sur cette classe...

Automatiquement après un certain temps d'inactivité, la méthode asynchrone appelée ne s'étant pas terminée (à cause donc du second breakpoint), le thread est automatiquement killé par la CLR... sauf que ce thread est celui de mon application principale.

Donc si vous avez un jour ce message d'erreur : Cannot evaluate expression because debugging information has been optimized away, vérifiez que dans le configuration du projet, le "optimize code" est décoché, puis désactiver touts les breakpoint inutiles dans votre appli ;-)
(il existe d'autres subtilité si vous êtes en ASP.NET, je vous conseille la KB : http://support.microsoft.com/kb/312629/EN-US/ )