2010-01-05 4 views
0

est-ce un bug? voici le codeC#: compiler avec/debug +/debug: pdbonly/optimize- optimise le code d'exécution

static void Main(string[] args) 
{ 
    fun1(); 
} 
static void fun1() 
{ 
    fun2(); 
} 
static void fun2() 
{ 
    throw new Exception("test exception"); 
} 

construction avec l'option ci-dessus dans VS 2008, avec option Optimiser non sélectionnée et construire des options avancées les informations de débogage et sélectionnez pdbonly vérifier la stacktrace.

laissez-moi savoir u guys expérience de la même

+1

Cela ne devrait pas compiler du tout ... –

+1

Pouvez-vous d'abord vérifier que le code que vous avez ici est correct. La fonction de lancer devrait-elle être appelée fun2? –

+0

Avez-vous exécuté ildasm sur le code lui-même et comparez les fichiers .il (déboguer et optimiser) pour voir toute différence? – t0mm13b

Répondre

1

Oui, en utilisant/debug: est pdbonly suffisant pour convaincre le compilateur que son accord aux méthodes inline. Il génère un autre [DebuggableAttribute] dans l'ensemble.

exemple .custom void [mscorlib] System.Diagnostics.DebuggableAttribute :: cteur (valuetype [mscorlib] System.Diagnostics.DebuggableAttribute/DebuggingModes) = (01 00 06 01 00 00 00 00)

Où/debug: produit complet.

exemple .custom void [mscorlib] System.Diagnostics.DebuggableAttribute :: cteur (valuetype [mscorlib] System.Diagnostics.DebuggableAttribute/DebuggingModes) = (01 00 07 01 00 00 00 00)

En cas de problème, vous devez explicitement désactiver ble inline comme ceci:

using System.Runtime.CompilerServices; 
... 
    [MethodImpl(MethodImplOptions.NoInlining)] 
    static void fun1() { 
     fun2(); 
    } 
+0

Il est étrange qu'optimiser- n'a aucune signification lorsque le mode débogage pdbonly est sélectionné. Si tel est le cas, microsoft doit documenter ceci dans la section d'aide optimisée –

+0

Qui aurait jamais besoin de poster sur un forum s'il le faisait? –

+0

De plus ce n'est pas le compilateur qui inline les méthodes - son JIT à l'exécution fait ce travail. Compilateur ajoute simplement les attributs pour instruire JIT pour faire l'inlining –