7
votes

Comment CODE dans un «Essayez-vous ... Catch» Block lancer une exception non gérée?

J'ai eu une exception dans certains codes aujourd'hui: "A [une exception] a été non endommagé."

Cependant, ce code était clairement à l'intérieur du bloc "Essayez" d'une structure "Essayer / Catch".

Qu'est-ce que je manque ici?

mise à jour: c'est c #

mise à jour: oh, oubliez ça. Il s'avère que le mécanisme d'erreur spécifique est que je suis un idiot. Il n'y a pas de solution pour cela.


5 commentaires

Quelle langue / cadre utilisez-vous?


Si vous publiez votre code, il pourrait être plus facile de diagnostiquer votre problème.


Besoin de plus d'informations. Essayez de poster des OCDE.


En C ++, si vous n'acceptez pas SEH (Manipulation de l'exception structurée), des événements spécifiques à de basse niveau système d'exploitation tels que des exceptions arithmétiques ne seront pas pris dans le bloc de captures.


Comme il est possible que vous puissiez ajouter des détails sur quelle hypothèse que vous avez faite ou quel concept vous aviez mal compris? De cette façon, une personne qui lutte avec le même problème peut avoir une chance de trouver la résolution.


6 Réponses :


5
votes

La déclaration de capture spécifie-t-elle un type d'exception spécifique?

Si c'est le cas, il ne tirera que ce type d'exception.


2 commentaires

J'attrape "Exception". Est-ce que tous ne dérivent pas de cela?


Pas nécessairement, essayez de ne rien spécifier du tout dans le bloc de capture.



4
votes

Étiez-vous en train de courir dans un débogueur avec "pause sur des exceptions" / "rupture sur jetée" allumée? Dans ce cas, vous verrez l'exception avant qu'il ne soit transmis à l'essai / prise.


2 commentaires

C'était dans le débogueur, oui. Cela pourrait être ça. Dans Visual Studio, est-ce qu'un cadre quelque part?


Quand vous avez obtenu l'exception, pouvez-vous continuer puis voir cela aller dans l'essai / attraper? Les paramètres d'exception sont normalement sous "débogage-> exceptions". Selon la langue, vous pouvez faire différentes choses.



1
votes

J'ai 10 dollars qui disent que c'est une exception filetabortException ou une autre exception d'auto-lanceur. Si tel est le cas, vous devez saisir l'exception deux fois.


0 commentaires

0
votes

Sans connaître la langue, il est difficile de dire, mais de nombreuses langues ont le concept d'exceptions qui ne peuvent pas être attrapées - par exemple en .NET, OutofMemoryException et exécutenanceException (entre autres) ne peuvent être attrapées, car elles sont essentiellement non récupérables.


0 commentaires

4
votes

Certains problèmes causés par une récursion, tels que StackoverFlow Exceptions et similaires, je vais jeter à l'intérieur d'essayer ... des blocs de capture car ils ne sont pas réellement jetés à partir d'une ligne de code particulière dans le bloc, mais plutôt par le CLR. Cela est également vrai pour la mémoire des exceptions de mémoire et d'autres problèmes qui ne sont pas le résultat direct d'une ligne de code.

Peut-être que vous parlez de quelque chose comme ceci:

texte alt


0 commentaires

4
votes

Les exceptions non gérées ne seront pas attrapées par prises (exception e), vous pouvez essayer un xxx

au lieu de xxx


0 commentaires