처리되지 않은 예외의 소스 식별
예외 처리 영역에서는 예외의 근본 원인을 찾아내는 능력이 무엇보다 중요합니다. 예외를 생성할 때 추가 정보를 포함하는 것은 매우 간단하지만 처리되지 않은 예외 또는 외부 예외가 발생하는 정확한 코드 줄을 결정하는 것은 어려울 수 있습니다.
구조를 위한 사용자 정의 클래스 및 매크로
효과적인 해결책 중 하나는 사용자 정의 예외 클래스와 매크로를 활용하는 것입니다. 표준 std::runtime_error를 확장하는 사용자 정의 예외 클래스 my_Exception을 정의할 수 있습니다. 이 클래스 내에서 예외의 파일 이름, 줄 번호 및 원래 오류 메시지를 사용하여 메시지를 초기화합니다.
다음으로 인수를 취하고 적절한 my_Exception을 발생시키는 throw_line() 매크로를 만듭니다. 정보. 이 매크로는 자세한 오류 컨텍스트를 포함하는 예외 발생 프로세스를 단순화합니다.
데모:
다음 예제 코드를 고려해 보겠습니다.
#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; } }
이 코드를 실행하면 출력은 다음과 같습니다.
myFile.cpp:20: Oh no!
보시다시피 정확한 파일 이름, 줄 번호 및 예외 인수가 포함된 자세한 오류 메시지를 제공합니다. 이 정보는 디버깅을 크게 단순화하고 효율적인 근본 원인 분석을 가능하게 합니다.
위 내용은 내 코드에서 처리되지 않은 예외의 원인을 정확히 찾아내려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!