Maison > développement back-end > C++ > Comment identifier l'origine des exceptions non gérées en C ?

Comment identifier l'origine des exceptions non gérées en C ?

Barbara Streisand
Libérer: 2024-11-16 17:48:03
original
321 Les gens l'ont consulté

How to Pinpoint the Origin of Unhandled Exceptions in C  ?

Détermination de l'origine des exceptions non gérées

Dans la gestion des exceptions, il est courant d'inclure des numéros de ligne et des noms de fichiers source pour identifier la cause de une exception. Lorsque les exceptions sont générées manuellement, ces informations peuvent être facilement ajoutées. Cependant, les exceptions non gérées et celles qui ne sont pas explicitement levées peuvent présenter un défi.

Utiliser une classe d'exception personnalisée avec des macros

Pour surmonter cette limitation, une solution plus robuste consiste à utilisez une classe d’exception personnalisée et une macro. Le code C suivant illustre comment cela peut être réalisé :

#include <iostream>
#include <sstream>
#include <stdexcept>
#include <string>

class my_exception : public std::runtime_error {
    std::string msg;
public:
    my_exception(const std::string &arg, const char *file, int line) :
    std::runtime_error(arg) {
        std::ostringstream o;
        o << file << ":" << line << ": " << arg;
        msg = o.str();
    }
    ~my_exception() throw() {}
    const char *what() const throw() {
        return msg.c_str();
    }
};
#define throw_line(arg) throw my_exception(arg, __FILE__, __LINE__);
Copier après la connexion

Exemple d'utilisation

Avec la classe d'exception personnalisée et la macro en place, les exceptions non gérées peuvent être capturées et leur source identifiée :

void f() {
    throw_line("Oh no!");
}

int main() {
    try {
        f();
    }
    catch (const std::runtime_error &ex) {
        std::cout << ex.what() << std::endl;
    }
}
Copier après la connexion

Lorsque ce code est exécuté, le message d'erreur suivant est imprimé :

myFile.cpp:255: Oh no!
Copier après la connexion

Ceci identifie clairement le fichier et le numéro de ligne où l'exception a été levée, en fournissant informations précieuses pour le débogage et la résolution du problème.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal