2012-03-25 5 views
0

내 C++ 프로그램이 std :: logic_error를 종료하고 그 원인이 된 소스 라인을 추적하고 싶습니다. 어떻게해야합니까?std : logic_error의 라인 번호를 얻으십시오

TBH, 디버그 정보를 추가하기 위해 g ++ -g를 사용하여 gdb를 사용하고 있습니다. 내가 얻을 수있는 것은 다음과 같은 메시지입니다.

이 응용 프로그램은 비정상적인 방법으로 종료하도록 런타임을 요청했습니다. 자세한 내용은 응용 프로그램 지원 팀에 문의하십시오. 당신은 디버거를 사용

Catchpoint 1 (exception thrown), 0x0045ffa0 in __cxa_throw() 
(gdb) bt 
#0 0x0045ffa0 in __cxa_throw() 
#1 0x004601e8 in std::__throw_logic_error(char const*)() 
#2 0x00502238 in typeinfo for std::__timepunct<wchar_t>() 
#3 0x004685f8 in std::runtime_error::what() const() 
#4 0xda8 in ??() 
#5 0x002efbcc in ??() 
#6 0x00468734 in std::domain_error::~domain_error()() 
#7 0x00000000 in ??() 
(gdb) 

답변

0

예외 개체에는 원본 정보가 포함되어 있지 않습니다. 그러나 그들은 what() 회원을 통해 접근 가능한 유용한 메시지를 포함하기를 희망합니다. 그 외에는 예외가 발생할 때 중단 할 수있는 디버거를 사용해야하거나 생성자에 중단 점을 std::logic_error으로 설정해야합니다. 예외가 예외적 인 한이 것은 정상적으로 작동합니다. 비 예외적 인 경우에 예외를 throw하는 코드에서는 너무 잘 작동하지 않습니다.

+0

고맙습니다. 귀하의 대답은 사실 맞지만 g ++ 및 gdb를 사용하려고한다는 것을 잊어 버렸습니다. – Mael

2

유효하지 basic_string :: _ S_construct의 널 (null) : 은 '표준 : logic_error' 무엇을()의 인스턴스를 던지는 후에 호출 종료합니다.

디버거 도구를 사용하는 것은 C 및 C++와 같은 컴파일 된 언어로 배우는 데 매우 중요한 기술입니다.

관련 문제