Maison > développement back-end > C++ > Comment préserver la trace de pile et l'innerexception lors du retrait des exceptions dans .NET?

Comment préserver la trace de pile et l'innerexception lors du retrait des exceptions dans .NET?

DDD
Libérer: 2025-01-25 20:06:10
original
161 Les gens l'ont consulté

How to Preserve Stack Trace and InnerException When Re-throwing Exceptions in .NET?

Meilleures pratiques de gestion des exceptions .NET : préserver les traces de pile et InnerException

Dans la gestion des exceptions, le respect des meilleures pratiques est essentiel pour garantir un suivi et une récupération appropriés des erreurs. Un aspect à considérer est de conserver l’InnerException et la trace de pile de l’exception d’origine lors de la nouvelle exécution de l’exception.

Considérez les deux blocs de code suivants :

<code class="language-csharp">try
{
    //某些代码
}
catch (Exception ex)
{
    throw ex; // 这种方式会保留原始异常信息,但会丢失调用堆栈信息的一部分
}</code>
Copier après la connexion
<code class="language-csharp">try
{
    //某些代码
}
catch (Exception ex)
{
    throw; // 这种方式会保留完整的调用堆栈信息
}</code>
Copier après la connexion

À première vue, ces deux blocs de code semblent similaires. Il existe cependant des différences subtiles. Le premier bloc de code renvoie explicitement l'exception interceptée, garantissant ainsi que l'InnerException et la trace de la pile sont préservées. Le deuxième bloc de code utilise l'abréviation « throw ; » sans spécifier l'exception interceptée, qui écrase la trace de pile actuelle.

Pour préserver les traces de pile, il est recommandé d'utiliser la syntaxe "throw;" sans spécifier d'exception. Cela permet à la trace de pile de l'exception d'origine d'être propagée à l'appelant.

Vous pouvez également renvoyer explicitement l'exception et sa trace de pile d'origine en utilisant le format suivant :

<code class="language-csharp">try {
  // 这里发生错误的代码
} catch (Exception ex)
{
    throw; // 保留完整的堆栈跟踪
}</code>
Copier après la connexion

N'oubliez pas que c'est une bonne pratique de transmettre l'exception d'origine en tant que paramètre lors de la nouvelle exécution de l'exception. Cela permet de propager des informations supplémentaires et facilite le débogage. Il est plus recommandé d'utiliser throw; au lieu de throw ex; pour conserver les informations complètes de trace de la pile. Si vous devez ajouter des informations contextuelles supplémentaires lors de la nouvelle émission d'une exception, vous pouvez créer un nouvel objet d'exception et transmettre l'exception d'origine sous la forme InnerException.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal