Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menentukan Sumber Tepat Pengecualian Tidak Terkendali?

Bagaimana untuk Menentukan Sumber Tepat Pengecualian Tidak Terkendali?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-14 11:30:02467semak imbas

How to Pinpoint the Exact Source of Unhandled Exceptions?

Mengenal pasti Sumber Tepat Pengecualian Tidak Terkendali

Adalah selalunya wajar untuk menentukan baris kod tertentu yang menyebabkan pengecualian, walaupun ia tidak dijana secara eksplisit oleh pengaturcara.

Kelas Pengecualian Tersuai dan Makro

Pendekatan yang disyorkan melibatkan mencipta kelas pengecualian tersuai dan makro yang sepadan. Contohnya:

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

Penggunaan:

Kelas my_exception membina mesej pengecualian tersuai yang termasuk nama fail, nombor baris dan mesej ralat yang ditentukan pengguna. Makro throw_line digunakan untuk menjana pengecualian tersuai dengan mesej ralat yang dipertingkatkan ini.

Dalam contoh berikut, makro throw_line digunakan dalam fungsi f:

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

Apabila f melontar pengecualian, fungsi utama menangkapnya dan mencetak mesej ralat tersuai ke konsol:

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

Pendekatan ini menyediakan mekanisme yang mudah untuk menjana pengecualian dengan maklumat terperinci tentang asal usulnya, tidak kira sama ada ia dijana secara eksplisit atau tidak.

Atas ialah kandungan terperinci Bagaimana untuk Menentukan Sumber Tepat Pengecualian Tidak Terkendali?. 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