Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menentukan Asal Pengecualian Tidak Terkendali dalam C ?

Bagaimana untuk Menentukan Asal Pengecualian Tidak Terkendali dalam C ?

Barbara Streisand
Barbara Streisandasal
2024-11-16 17:48:03327semak imbas

How to Pinpoint the Origin of Unhandled Exceptions in C  ?

Menentukan Asal Pengecualian Tidak Terkendali

Dalam pengendalian pengecualian, adalah perkara biasa untuk memasukkan nombor baris dan nama fail sumber untuk menentukan punca pengecualian. Apabila pengecualian dijana secara manual, maklumat ini boleh ditambah dengan mudah. Walau bagaimanapun, pengecualian yang tidak dikendalikan dan pengecualian yang tidak dilemparkan secara eksplisit mungkin menimbulkan cabaran.

Menggunakan Kelas Pengecualian Tersuai dengan Makro

Untuk mengatasi had ini, penyelesaian yang lebih mantap ialah dengan menggunakan kelas pengecualian tersuai dan makro. Kod C berikut menggambarkan cara ia boleh dicapai:

#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__);

Contoh Penggunaan

Dengan kelas pengecualian tersuai dan makro di tempatnya, pengecualian yang tidak dikendalikan boleh ditangkap dan sumber mereka ditunjuk:

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

int main() {
    try {
        f();
    }
    catch (const std::runtime_error &ex) {
        std::cout << ex.what() << std::endl;
    }
}

Apabila kod ini dilaksanakan, mesej ralat berikut ialah dicetak:

myFile.cpp:255: Oh no!

Ini dengan jelas mengenal pasti fail dan nombor baris tempat pengecualian dilemparkan, memberikan maklumat berharga untuk nyahpepijat dan menyelesaikan isu.

Atas ialah kandungan terperinci Bagaimana untuk Menentukan Asal Pengecualian Tidak Terkendali dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn