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 &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!