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
Lepaskan: 2024-11-16 17:48:03
asal
321 orang telah melayarinya

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__);
Salin selepas log masuk

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;
    }
}
Salin selepas log masuk

Apabila kod ini dilaksanakan, mesej ralat berikut ialah dicetak:

myFile.cpp:255: Oh no!
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan