Maison > développement back-end > C++ > Comment identifier la source exacte des exceptions non gérées ?

Comment identifier la source exacte des exceptions non gérées ?

Mary-Kate Olsen
Libérer: 2024-11-14 11:30:02
original
405 Les gens l'ont consulté

How to Pinpoint the Exact Source of Unhandled Exceptions?

Identifying the Exact Source of Unhandled Exceptions

It is often desirable to determine the specific line of code that caused an exception, even if it was not explicitly generated by the programmer.

Custom Exception Class and Macro

A recommended approach involves creating a custom exception class and a corresponding macro. For example:

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

Usage:

The my_exception class constructs customized exception messages that include the file name, line number, and user-defined error message. The throw_line macro is used to generate custom exceptions with these enhanced error messages.

In the following example, the throw_line macro is used within function f:

void f() {
    throw_line("Oh no!");
}
Copier après la connexion

When f throws the exception, the main function catches it and prints the customized error message to the console:

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

This approach provides a convenient mechanism for generating exceptions with detailed information about their origin, regardless of whether they were generated explicitly or not.

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