Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah saya boleh menentukan sumber pengecualian yang tidak dikendalikan dalam kod saya?

Bagaimanakah saya boleh menentukan sumber pengecualian yang tidak dikendalikan dalam kod saya?

Patricia Arquette
Lepaskan: 2024-11-16 15:33:03
asal
400 orang telah melayarinya

How can I pinpoint the source of unhandled exceptions in my code?

Mengenal pasti Sumber Pengecualian Tidak Terkendali

Dalam bidang pengendalian pengecualian, keupayaan untuk menentukan punca pengecualian adalah yang paling penting. Walaupun agak mudah untuk memasukkan maklumat tambahan semasa membuat pengecualian, menentukan baris kod yang tepat di mana pengecualian tidak terkendali atau luaran berasal boleh mencabar.

Kelas Tersuai dan Makro untuk Penyelamat

Satu penyelesaian yang berkesan terletak pada penggunaan kelas pengecualian tersuai dan makro. Kita boleh menentukan kelas pengecualian tersuai, my_exception, yang memanjangkan standard std::runtime_error. Dalam kelas ini, kami memulakan mesej dengan nama fail pengecualian, nombor baris dan mesej ralat asal.

Seterusnya, kami mencipta makro, throw_line(), yang mengambil hujah dan melontar my_exception dengan yang sesuai maklumat. Makro ini memudahkan proses melontar pengecualian yang merangkumi konteks ralat terperinci.

Demonstrasi:

Mari kita pertimbangkan contoh kod berikut:

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

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 menjalankan kod ini, outputnya ialah:

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

Seperti yang anda lihat, ia menyediakan mesej ralat terperinci yang merangkumi nama fail yang tepat, nombor baris dan hujah pengecualian. Maklumat ini sangat memudahkan penyahpepijatan dan membolehkan analisis punca yang cekap.

Atas ialah kandungan terperinci Bagaimanakah saya boleh menentukan sumber pengecualian yang tidak dikendalikan dalam kod saya?. 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