1

갑자기 내 코드가 예외를 throw하기 시작했습니다. First-chance exception at 0x7731c41f in VideoPlayer.exe: Microsoft C++ exception: GenICam::RuntimeException at memory location 0x0018f5dc.. 정확히 어디에서 던져서 찾을 수 없으므로, main 함수와 모든 내용을 모두 main 외부에 주석 처리했습니다. main의 코드가 인 코드 블록을 주석으로 처리하기 시작한 것은입니다. 그 일을하는 동안 나는 함수 (function)가 있다는 것을 알아 차 렸는데 주석이 달렸을 때 예외는 없다는 것을 알아 냈다. 그러나 주석 처리가되지 않았을 때 위의 예외를 throw한다.아무도 함수를 호출하지 않으면 첫 번째 예외가 발생하는 이유는 무엇입니까?

호출되지 않으면 어떻게 예외를 일으킬 수 있는지 이해할 수 없습니다 (중단 점을 넣었고 주 코드가 주석 처리되었습니다)?

+0

프로젝트 속성을 변경 했습니까 ?? –

+0

@IAMHERE, 아니요. – theateist

답변

2

정적 초기화 중에 함수가 사용됩니다. 당신은 단지 그것을 잡아서 처리됩니다 첫 번째 예외를 볼 수 있기 때문에

#include <iostream> 
bool static_func() 
{ 
    std::cout << "Before main" << std::endl; 
    return true; 
} 
static const bool b = static_func(); 
int main() 
{ 
    std::cout << "We are main" << std::endl; 
    return 0; 
} 

: 다음 예제를 가지고 . 예를 들어 팩토리가 자체적으로 구성하는 추상 팩터 리에서 이러한 구성을 보았습니다.
중단 점이 적중되지 않는 이유는 다른 것이어야합니다.

+0

'A' 함수에서 코드를 검사했고 제 3 자 유형 ('BCamera camera;')이 사용되었습니다. 아마'A'가 주석 처리 된 링커 인 경우 최종 코드에서 제외하고 A가 주석 처리되지 않은 링커가 해당 유형을 포함하고 아마도 어딘가에 전역/정적 객체 인스턴스화가있을 것입니다. 그런 것을 디버깅 할 방법이 있습니까? – theateist

0

VS에서 디버그 메뉴의 예외 ... 일치하는 유형에 대해 throw 열을 확인하십시오. 그런 다음 디버깅을 시작하면 어디서 던지기가 중단됩니다. 그리고 그 이유를 둘러 볼 수 있습니다.