Question

Quel est l'ordre dans lequel les trames de la pile de traitement des exceptions sont placées dans la pile des appels, par exemple en C #. Si j'ai une méthode:

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

Un cadre de pile distinct est-il créé pour chaque gestionnaire d'exceptions comme suit?

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

OU

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

OU

autre chose?

Était-ce utile?

La solution

Non, l'ajout d'un gestionnaire d'exceptions n'ajoute pas de nouvelle image à la pile d'appels. Il ajoute simplement les informations appropriées pour que, lorsqu'une exception est générée, le framework puisse trouver à chaque niveau de la pile d'appels le gestionnaire approprié pour cette exception (si est-il un gestionnaire approprié).

Cela ressemble un peu à la récupération de place, où le GC peut déterminer, à tout moment de l'exécution, les variables locales qui doivent toujours compter comme racines du GC - une méthode ne se résume en rien au code exécutable lui-même:)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top