2014-10-14 12 views
8

Ho un problema con il debug ... All'improvviso non riesco a vedere i valori della maggior parte delle variabili durante il debug. Sono riuscito a ottenere due messaggi diversi nella finestra immediata:Impossibile ottenere il valore perché è stato ottimizzato via

Non è possibile ottenere il valore del 'parametro' locali o argomento in quanto non è disponibile in questo puntatore all'istruzione, forse perché è stato ottimizzato via.

e

Errore interno nel analizzatore di espressioni.

Ho provato e controllato le seguenti cose:

  1. Configurazione soluzione è impostato per eseguire il debug (non stampa)
  2. Project -> Impostazioni -> Build -> ottimizzare il codice è non set
  3. Strumenti -> Opzioni -> Debug -> Usa modalità di compatibilità Managaed (non ha funzionato)

Hai altre idee su come rieseguire correttamente il debug? :(

Grazie in anticipo

Modifica Il codice è niente di speciale .. succede quando cerco di guardare cosa c'è dentro il parametro [Key]

public void AddOrUpdateQuartzJob(string jobName, IList<KeyValuePair<string, string>> parameters) 
    { 
     var jobDetail = this.GetJobDetail(jobName); 

     if (jobDetail != null) 
     { 
      foreach (var parameter in parameters) 
      { 
       jobDetail.JobDataMap[parameter.Key] = parameter.Value; 
      } 
     } 
     else 
     { 
      this.ScheduleNewJob(jobName, parameters); 
     } 
    } 
+0

Puoi condividere il codice? – Amorphis

+0

Sì, ho modificato il post originale – xeraphim

+0

quando ci si trova in "if (jobDetail! = Null)". Cosa c'è nei parametri appena prima del crash? –

risposta

5

Il modo migliore che ho trovato per convince the JIT compiler not to optimize the code is to use an INI file with the name of the assembly in the same folder the assembly is in with the contents:

[.NET Framework Debugging Control] 
GenerateTrackingInfo=1 
AllowOptimize=0 

Nota che deve essere il nome del gruppo, non il na me del processo EXE (a meno che non sia l'assembly EXE che si desidera eseguire il debug). Per esempio. se si dispone di un assembly MyCode.dll, il nome del file INI sarà MyCode.ini.

Ecco alcune diapositive da a presentation on .Net debugging che mostrano la differenza:

con l'ottimizzazione:

Debugging with optimization

senza ottimizzazione:

Debugging without optimization

1

Vai a -> Proprietà progetto -> in Build -> imposta la casella di controllo "Codice Optimize" deselezionata.

Inoltre, Sotto Progetto Proprietà -> Build -> Avanzate -> impostare il menu a discesa "Debug Info" per "Full" nelle Opzioni

0

Dopo aver apportato le modifiche elencate dalla codekaizen e isanka thalagala, non dimenticare pulire, ricostruire e pubblicare per rendere effettive le modifiche.

Problemi correlati