내 Qt 응용 프로그램의 Windows 빌드에 미니 코어 덤프 기능 (__try/__ except 및 MiniDumpWriteDump())을 추가하여 내 응용 프로그램이 충돌 한 경우 .dmp 파일이 쓰여지도록했습니다 나중에 나를보고 디버깅 할 수 있도록 디스크에 저장하십시오.의도적으로 내 Windows 응용 프로그램을 충돌시키는 가장 좋은 방법은 무엇입니까?
잘 작동하지만 테스트를 위해 신뢰할 수있는 방법으로 내 프로그램을 중단하고 싶습니다. 예를 들어 GUI에 "지금 충돌"버튼이있을 수 있으며 사용자가 클릭하면 응용 프로그램이 의도적으로 중단됩니다.
방법 중 하나는해야 할 일이, 물론, 같은 수 있습니다 :
int * badPointer = NULL;
*badPointer = 666;
을 그리고 나를 위해 작동하지만,이 정의되지 않은 동작에 의존하기 때문에 나는 그 방법 좋아하지 않는다 - 특히, C++ 표준은 이 아니기 때문에 위의 코드가 인 경우 충돌이 발생할 수 있으므로 위의 코드가 실행될 때 이후 버전의 컴파일러가 다운되지 않을 수 있습니다 (언어 변호사의 관점에서 볼 수 있음). 더 "공식적인"접근 방식으로
, 나는이 시도 : 프로그램을 종료 않지만, 아니 그래서, MiniCrashDump 핸들러를 트리거 윈도우 구조적 예외가 발생하지 않습니다
abort();
... .dmp 파일이 작성됩니다.
내 질문에 내 프로그램이 중단되는 "공식적인 올바른 방법"이 있습니까? 나는 Windows API가 호출 할 수있는 RaiseException() 함수를 가지고 있지만, 적절한 인수가 무엇인지 잘 모르겠습니다. 그게 가야할 길인가, 아니면 내가 사용하는 것이 더 낫다는 좀 더 구체적인 전화가 있나?
화면을 통해 해머. –
많이 구현 된 키워드와 동작을 사용하고 있으며 언젠가 C++ 사양에서 언젠가는 무엇을 말할지 걱정됩니까 ?? 물론, RaiseException()은 공식적인 방법입니다. –
@HansPassant MSVC 최적화 도구만큼 나에게 걱정스러운 C++ 스펙이 아닙니다. "badPointer가 NULL이라는 것을 알기 때문에 gcc 스타일의 마술 트릭을 시작할 수도 있습니다. NULL 포인터를 역 참조하는 것은 정의되지 않은 동작이므로, 그 쓰레기를 최적화해라. "... 그리고 갑자기 내 충돌 버튼이 더 이상 충돌하지 않는다. :) –