Si je définis la constante Débogage de mon projet C# dans Visual Studio, je peux être sûr que les assertions seront évaluées et qu'une boîte de message sera affichée en cas d'échec. Mais quel drapeau, attribut fait le CLR à l'exécution effectivement décider si une assertion est évaluée et affichée. Est-ce que le code d'assertion ne finit pas dans l'IL lorsque DEBUG est défini? Ou est-ce le drapeau DebuggableAttribute.DebuggingModes dans le DebuggableAttribute de l'assemblée le point crucial? Si oui, quelle valeur en doit-il être présent? Comment cela fonctionne-t-il sous le capot?Qu'est-ce qui fait que le CLR affiche des assertions?
2
A
Répondre
5
Si vous compilez sans le symbole de préprocesseur DEBUG défini, tous les appels à Debug.Assert seront omis du code compilé. Si vous regardez le docs for Debug.Assert, vous verrez qu'il a [ConditionalAttribute("DEBUG")]
sur la déclaration. ConditionalAttribute est utilisé pour décider si un appel de méthode est réellement émis ou non au moment de la compilation.
Si un attribut conditionnel signifie que l'appel n'est pas effectué, toute évaluation d'argument est également omise. Voici un exemple:
using System;
using System.Diagnostics;
class Test
{
static void Main()
{
Foo(Bar());
}
[Conditional("TEST")]
static void Foo(string x)
{
Console.WriteLine("Foo called");
}
static string Bar()
{
Console.WriteLine("Bar called");
return "";
}
}
Lorsque le test est défini, les deux méthodes sont appelées:
c:\Users\Jon> csc Test.cs /d:TEST
c:\Users\Jon> test.exe
Bar called
Foo called
Lorsque le test est pas défini, ni est appelé:
c:\Users\Jon> csc Test.cs /d:TEST
c:\Users\Jon> test.exe
2
ConditionalAttribute sur les méthodes de la classe System.Diagnostics.Debug et DEBUG définies.
Questions connexes
- 1. Qu'est-ce qui fait que g ++ inclut GLIBCXX_3.4.9?
- 2. Qu'est-ce que le standard CLR XML pour un générique concret qui est un tableau?
- 3. IIS7 - que fait MaxProcesses?
- 4. Que fait le registre PIC (% ebx)?
- 5. Que fait le symbole "@" dans Powershell?
- 6. Autorisation ASP.NET que fait le * et? signifier?
- 7. Android: Simple GridView qui affiche le texte dans les grilles
- 8. Que fait le mot-clé PHP 'var'?
- 9. Recherche des rails qui fait le classement des résultats selon le champ
- 10. Qu'est-ce qui fait que l'éditeur de liens ne donne que le message "ld return 1 exit status"?
- 11. .net cf TextBox qui affiche le clavier en surbrillance
- 12. Smalltalk et Assertions
- 13. Que sont les assertions? et pourquoi les utiliseriez-vous?
- 14. Que fait stdole.dll?
- 15. Que fait le substrat de Perl?
- 16. Que fait le réglage "RAILS_GEM_VERSION" exactement?
- 17. Que fait le symbole "@" dans SQL?
- 18. Que fait le framework d'acteur distant en essayant d'écrire sur un client qui n'est plus là?
- 19. Que fait [STAThread]?
- 20. Que fait readlink systemcall?
- 21. Que fait exactement rangeOfCharacterFromSet?
- 22. Que fait '@_' dans Perl?
- 23. Que fait cette fonction?
- 24. Que fait l'opérateur =>?
- 25. Que fait exactement FillMode?
- 26. Que fait ce javascript
- 27. Que fait sizeof (char *)?
- 28. développement fonctionnel sur le CLR
- 29. Session et le pool d'applications: une application ASP.NET qui stocke et affiche des images
- 30. Que fait exactement l'utilitaire "ar"?