2014-12-24 4 views
1

저는 MinGW로 컴파일하고있는 C++ 프로그램에 전혀 문제가 없습니다. 프로그램의 특정 결정적 지점에서 일부 예외 핸들러가 비활성화되고 나중에 던져지는 예외는 더 이상 처리되지 않습니다. 이 작업을 수행하는 정확한 소스 행을 추적 할 수 있습니다.이 배열은 힙에있는 배열에 대한 부적절한 할당입니다. 포인터가 손상되지 않았거나 경계를 넘어서 쓰고 있습니다. 버그를 유발하지 않으면 서 같은 논쟁의 대부분을 제외하고는 다른 상황에서도 동일한 코드가 호출됩니다. 필자가 코드를 작성하여 값을 항상 0으로 만들면 버그가 발생하지 않습니다. 나는 무슨 일이 일어나고 있는지를 알기가 어렵다. 또한 일부 예외 처리기 만 비활성화합니다. 호출 스택 아래쪽에있는 예외 처리기는 비활성화되고 더 높은 상태의 호출자는 활성 상태로 유지됩니다. 당황 스럽네요.어떻게 MinGW 예외 처리를 디버그합니까?

그럼 어떻게 디버깅해야합니까? 나는 MinGW 버전의 GCC에서 실제로 예외가 어떻게 작동하는지에 대해서는 잘 모른다. 이 이상한 증상을 일으키는 원인은 무엇일까요?

답변

0

마음에 들지 마시고 시간을내어 증상에 대해 생각해 보면 그 답이 좋습니다.

내가 사용중인 끔찍한 라이브러리가 정리 중에 예외를 throw 할 수 있으므로 스택 해제 중에 예외 내에 예외가 발생했습니다.

핸들러가 더 올라가면 호출 스택이 올바르게 작동한다는 것을 깨달았어야합니다. 이봐.

관련 문제