2009-08-13 3 views
1

내 프로그램을 실행하려고 시도하면 main() 함수가 실행되지 않고 중단됩니다. 그래도 내 프로그램은 ntdll.dll을 여러 번 호출 한 후 스택에서 첫 번째 호출로 내 클래스 중 하나에서 예외를 throw합니다. 예외는 내 프로그램이 "< bad ptr>"으로 응답하지 못하게하는 요인 인 것 같습니다. 내가 설정 한 중단 점을 트리거 할 수 없으므로 문제가 발생한 지점을 찾기가 더 어려워집니다.ntdll.dll 실행시 C++ 프로그램이 응답하지 않는다

+1

더 많은 정보를 추가합니다. 즉, 스택 덤프시 스택 덤프, 커널에 호출되는 API 호출 및 충돌 주변 소스입니다. –

+0

ntdll 지점은 스레드가 커널로 전환 될 때 사용됩니다. 전체 스택을 추가하십시오. –

답변

3

충돌을 일으킨 시스템 호출을 파악해야합니다. 일반적으로 이러한 종류의 문제는 일부 Windows API에 가비지를 전달한 결과입니다.

디버거를 사용하고 호출 스택을 살펴보십시오. 코드 안에있는 마지막 항목이 문제의 원인 일 수 있습니다. 아마도 제대로 처리되지 않는 나쁜 데이터가있을 것입니다.

1

글로벌 개체/싱글 톤을 사용하는 것처럼 들립니다. 이들 중 하나가 서로에 의존하면 문제가 발생합니다. 나는 당신의 모든 전역을 찾고 각각의 생성자에 중단 점을 넣을 것입니다. 한 글로벌이 다른 글로벌을 사용하고 있지만 두 번째 글로벌은 아직 구축되지 않은 것처럼 보입니다.

마지막으로 이것이 원인이 아니며 응용 프로그램이 타사 DLL을로드하는 경우 충돌 할 수 있습니다. 한 번 orbix 및 ms 메시지 대기열 dll이 하나의 클래스로 분류되는 것이 다른 하나보다 먼저로드 된 것을 기억합니다. 다른 방법으로로드 된 경우 모든 것이 작동했습니다. 결국이 문제를 발견하기 전까지 빈 메인으로 남았을 때까지 모든 것을 제거한 다음 문제를 발견 할 때까지 하나씩 추가하기 시작했습니다.

관련 문제