>  기사  >  백엔드 개발  >  C에서 처리되지 않은 예외의 원인을 정확히 찾아내는 방법은 무엇입니까?

C에서 처리되지 않은 예외의 원인을 정확히 찾아내는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-16 17:48:03265검색

How to Pinpoint the Origin of Unhandled Exceptions in C  ?

처리되지 않은 예외의 원인 확인

예외 처리에서는 예외의 원인을 정확히 찾아내기 위해 줄 번호와 소스 파일 이름을 포함하는 것이 일반적입니다. 예외. 예외가 수동으로 생성되면 이 정보를 쉽게 추가할 수 있습니다. 그러나 처리되지 않은 예외와 명시적으로 발생하지 않은 예외는 문제가 될 수 있습니다.

매크로와 함께 사용자 정의 예외 클래스 사용

이러한 제한을 극복하기 위한 보다 강력한 솔루션은 다음과 같습니다. 사용자 정의 예외 클래스와 매크로를 사용합니다. 다음 C 코드는 이를 달성하는 방법을 보여줍니다.

#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:255: Oh no!

예외가 발생한 파일과 줄 번호를 명확하게 식별하여 문제 디버깅 및 해결을 위한 귀중한 정보를 제공합니다.

위 내용은 C에서 처리되지 않은 예외의 원인을 정확히 찾아내는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.