2010-08-13 2 views
3

메신저에 약간의 초보자가 있으므로 여기에 있습니다 :Gdb는 간단한 std :: string 캐치되지 않는 예외에 스택을 제공하지 않습니다.

Im 현재 cpp 유닛 테스트 작업을하고 있습니다. null_char와 같은 잘못된 매개 변수를 사용하여 문자열 객체를 생성하려고 시도하지만 프로그램에서 예외를 제공합니다. :). 내가 gdb를 사용하여 응용 프로그램을 디버깅하려고하면 충돌 후 bt를 입력했지만 스택 메시지가 표시되지 않습니다. 그 이유는 무엇입니까? 미리 감사드립니다.

+1

'-g'로 컴파일 했습니까? – David

+0

릴리스 또는 디버그 빌드로 코어 파일을 디버깅 하시겠습니까? – DumbCoder

+0

기본적으로 디버그 모드로 프로젝트를 빌드하는 빌드 스크립트를 사용하고 있습니다. – LostMohican

답변

1

디버거 기호를 추가하려면 컴파일러 명령 줄에 -g 옵션을 추가하십시오. 그건 gdb으로 많은 도움이됩니다.

+1

및 -O0도 많은 도움이됩니다. 때로는 최적화로 인해 디버깅에서 볼 수있는 코드 경로가 "야생"이됩니다. =) – rasjani

+0

팁을 제공해 주셔서 감사합니다. –

+0

나는 단계별로 코드 단계에 들어가서 디버깅 모드에 있다고 생각해서 최적화가 없다고 생각합니다. – LostMohican

2

아마도 예외가 잡히지 않기 때문에 스택이 유용하지 않을 수 있습니다. 예외가 발생하면 gdb의 캐치 포인트에 유의하십시오.

catch throw 

중단이 발생합니다.

catch catch 

예외가 발생하면 중단됩니다.

관련 문제