Domanda

Qual è l'ordine in cui le eccezioni che gestiscono i frame dello stack vengono inserite nello stack delle chiamate, ad esempio C #. Se ho un metodo:

private void MyMethod() {
  try {
    DoSomething();  
  }
  catch (Exception ex)
  {
    //Handle
  }
}

Viene creato un frame stack separato per ciascun gestore eccezioni come segue?

DoSomething stackframe<br/>
Exception stackframe<br/>
MyMethod stackframe<br/>

o

DoSomething stackframe<br />
MyMethod stackframe<br />
Exception stackframe<br />

OPPURE

qualcos'altro?

È stato utile?

Soluzione

No, l'aggiunta di un gestore di eccezioni non aggiunge un nuovo frame allo stack di chiamate. Aggiunge solo le informazioni appropriate in modo che quando viene generata un'eccezione, ad ogni livello dello stack di chiamate il framework può trovare il gestore appropriato per tale eccezione (se effettivamente è un gestore appropriato).

È un po 'come la garbage collection, in cui in qualsiasi momento dell'esecuzione il GC può capire quali variabili locali dovrebbero comunque contare come root GC - in sostanza c'è un metodo in più rispetto al codice eseguibile stesso :)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top