Dévoilement de la source des exceptions non gérées
Lorsque des exceptions surviennent pendant l'exécution d'un programme, retracer leur origine peut être crucial pour le dépannage. En l'absence d'informations explicites sur la ligne de code intégrées dans le message d'exception, les exceptions externes et non gérées peuvent laisser les développeurs dans le noir.
Une plongée plus approfondie dans les exceptions et les macros personnalisées
Pour relever ce défi, une solution robuste consiste à créer une classe d'exception personnalisée et à exploiter les macros.
La classe my_exception étend la classe std::runtime_error et intègre un membre msg supplémentaire pour stocker le message d'exception. Le constructeur de cette classe construit le message en concaténant le fichier source, le numéro de ligne et l'argument d'exception d'origine.
Ensuite, la macro throw_line simplifie le processus de levée d'une exception avec les informations de ligne. Il prend un argument représentant le message d'exception et ajoute automatiquement les détails du fichier et du numéro de ligne à l'objet my_exception.
Le mettre en action
Considérez l'extrait de code suivant :
void f() { throw_line("Oh no!"); } int main() { try { f(); } catch (const std::runtime_error &ex) { std::cout << ex.what() << std::endl; } }
Lorsqu'une exception est levée dans la fonction f, la macro throw_line fournit à la fois le message d'exception (« Oh non ! ») et le numéro de ligne où elle s'est produite. Ces informations sont accessibles via la méthode what() de l'objet my_exception.
En utilisant cette approche, les développeurs disposent d'un outil précieux pour identifier avec précision la source des exceptions, même lorsqu'elles proviennent de sources non gérées ou externes.
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!