6
votes

Arrête debug.Assert?

J'utilise une bibliothèque qui tente de faire debug.Assert lorsque je fais une traction de cérémonie, est là pour l'arrêter d'utiliser Debug.Assert?


3 commentaires

Sûr. Et ensuite, le programme poursuivra tout ce que la corruption de l'État a été détectée dans l'affirmation et une catastrophe vous arrivera d'une manière la plus odieuse. Pourquoi n'arrêtez-vous pas de faire ce que c'est que cela provoque l'affirmation de se plaindre?


@Jeffrey: Bien que votre point soit bien pris, l'assertion est probablement erronée; Il ne devrait pas y avoir un moyen de faire feu d'assertion en premier lieu si le code est correct. L'affirmation indique probablement un bogue dans la bibliothèque, pas un bogue dans le code de l'appelant. Si Levi a déterminé que le bogue est bénin, il peut être utile de supprimer simplement l'affirmation jusqu'à ce que le code soit corrigé.


@ERIC LIPPERT - Je pensais que l'auteur de la bibliothèque n'a pas compris la position correcte de l'ASSERT (puisqu'elle ne devrait jamais tirer), mais il devait y avoir une raison de faire le chèque en premier lieu. C'est peut-être quelque chose pour lequel une exception devrait être lancée. Il semble peu probable qu'ils auraient ajouté un test pour une maladie qui n'a pas d'importance. Mais là encore, peut-être qu'ils l'ont fait. Si oui, alors peut-être une autre bibliothèque sans ces erreurs-up erreurs devraient être recherchées! :)


4 Réponses :


8
votes

Si vous le compilez sans le symbole de débogage , alors aucun appels sur débog.assert sera compilé (les méthodes sont définies avec [conditionnel (" Débogage ")] )


0 commentaires

11
votes

Si vous pouvez recompiler la bibliothèque, alors Marc est correct; Juste la recompilez sans débogage défini et toutes les affirmations disparaîtront.

Si vous ne pouvez pas faire cela, parce que vous dites que vous n'avez pas le code source de la bibliothèque, vous pouvez afficher votre programme de préciser le Trace Souditeurs . De cette façon, lorsque l'assertion tire, il tire toujours mais cela ne fait rien. (Lorsqu'une assertion tire, il vérifie simplement les écouteurs de trace enregistrés et les informe de l'affirmation. Aucun auditeur ne signifie rien ne se passe.)

Dans ce scénario, vous pouvez envisager de remplacer l'auditeur de trace par défaut avec un écouteur de trace client de votre choix qui fait quelque chose comme enregistre l'affirmation à un fichier. De cette façon, vous pouvez examiner le journal et voir quelles assertions auraient accélérées dans l'exécution «normale» de la version de débogage de la bibliothèque.


0 commentaires

0
votes

Utilisez-vous un binaire ou avez-vous une source de bibliothèque? Dans le premier cas, je vous suggère de contacter votre fournisseur pour vous demander pourquoi ils ont publié une construction de débogage et leur permettent également de savoir l'affirmation, qui est un bogue dans leur code (les défaillances d'affirmation ne devraient jamais se produire si le code s'exécute comme prévu, même dans cas exceptionnels.)


0 commentaires

0
votes

Vous pouvez ajouter la section suivante à votre fichier app.config qui inhibe la rupture sur débog.assert (false) : xxx

Pour plus de détails, voir affirmer Élément et DefaultTracelistener.Assertaineableableablebleableablebleableabled .


0 commentaires