5

C# 응용 프로그램에서 APPCRASH가 발생합니다. 런타임에 "이 응용 프로그램이 비정상적으로 종료되도록 런타임을 요청했습니다."라는 오류 메시지가 나타납니다. 그런 다음 확인을 클릭하면 일반적인 "솔루션 온라인 확인", "프로그램 닫기"및 "디버그 프로그램"옵션을 사용하여 "MyApplication has working working"메시지가 나타납니다. "추가 세부 정보"를 클릭하면 APPCRASH 서명이 나옵니다. 많은 추가 정보가 있습니다. 그것의 일부는 사람이 읽을 수있는 것이고, 그 중 일부는 16 진수입니다. "예외 코드"는 40000015입니다. "추가 정보"라인도 있습니다. 내 질문은 : 우주에있는 사람이 APPCRASH 메시지의 정보가 무엇을 의미하는지 알고 있습니까?APPCRASH 메시지의 세부 사항은 무엇을 의미합니까?

메시지가 원인을 밝힐 수있는 누군가에 의해 읽히기 시작한 것 같습니다. 답변을 검색 할 때 나는 정확히 같은 형식의 메시지를 게시하는 많은 사람들을 발견했습니다. 불행히도, 나는이 정보가 무엇을 의미하는지에 대한 설명을 발견하지 못했습니다.

또한 "디버그 프로그램"옵션을 시도했지만 도움이되지 않습니다. 그것은 단지 호출 스택 위로 아무 곳으로도 내 코드가없는 시스템 dll에 나를 둔다. 조사한 결과이 시스템 코드에서 오류가 발생하지 않습니다.

다른 DLL을 "오류 모듈"(이 코드는 많은 외부 DLL을 사용함)로 명명 한 APPCRASH 메시지는 치명적인 오류가 발생할 수 있습니다. 그러나 외부 DLL에 나쁜 호출을하는 (또는 나쁜 상태에 놓는) 코드에서 해당 위치를 찾아야하기 때문에이 정보는별로 도움이되지 않습니다. 슬프게도, "내 코드"라고 말할 때, 나는 단지 내가 작업하고있는 코드를 의미합니다. 몇 년 동안 수십명이 작성한 거대한 코드베이스이기 때문에 치명적인 호출을할만한 장소를 추측 할 수는 없습니다. 그래서 APPCRASH 메시지에서 더 많은 정보를 얻을 수 있기를 바랍니다. 그래서 내가 세부적인면에서 아주 인색 한 이유이기도합니다. 모든 것은 빨간 테이프가 많은 매우 독점적입니다. 그래서 APPCRASH 메시지 내용을 게시하지 않은 이유이기도합니다.

분명히하기 위해 제 문제를 디버깅하지 않을 것입니다. 나는 당신에게 오류의 재현 가능한 사례를 줄 수있는 방법이 없으며, 누구에게도 내 구체적인 경우에 오류의 원인을 말하도록 요구하지 않습니다. 이 16 진수를 해석하는 법을 알고 싶습니다. 그리고 어떤 문서도 찾을 수 없었습니다.

+0

네이티브 C 또는 C++ 코드가 abort() 함수를 호출 할 때 사용되는 예외 코드입니다. 우리는 당신을 찾을 수 없지만 분실 된 "시스템 dll"에 분명히 있습니다. –

+0

디버거가 나를 넣은 시스템 코드에는 예외가 발생하지 않습니다. 하지만 예외가 다른 외부 dll에서 발생하는 것 같습니다. 이것이 abort() 호출에서 나온 것이라면, 관리되지 않는 땅의 어딘가에서 죽어 가고 있습니다. – user1646801

+1

비 관리 코드에 문제가있는 것 같습니다. 문제를 분리하기 위해, 나는 당신의 코드에서 [DllImport]가 모의하려고하는지 점검하고, 주석을 달고, 문제가 적은지 확인하려고한다. 다른 생각은 잘못된 관리되지 않는 호출을 포함 할 수있는 타사 구성 요소가있는 경우입니다. 마지막으로, WinDBG를 시도하고 문제를 찾으십시오. 필자는 전문가가 아니기 때문에 WinDBG가 나의 마지막 리소스가 될 것이고, 이것은 매우 어려운 하드 코어 디버깅 방법이다. –

답변

1

즉, 처리되지 않은 예외가 발생하여 응용 프로그램이 충돌하고 있음을 의미합니다.

디버그 모드에서 작동하는 경우 릴리스 버전과 다른 점을 확인해야합니다. 모든 도서관이 있습니까? app.config 설정이 있습니까?

자세한 정보는 Windows 로그 -> 응용 프로그램에서 이벤트 표시기를 점검하십시오.

예외 처리기를 설정하면 스택 추적과 같은 훨씬 좋은 정보를 얻을 수 있습니다.

+0

안녕하세요, 응답 해 주셔서 감사합니다. 불행히도, 나는 모든 일반적인 속임수를 시도하고 나는 아주 멀리 얻지 않았다. 현재 디버그 모드에서 실행 중이며 중단됩니다. 디버거가 처리되지 않은 예외를 깨기 위해 설정되어 있고 어떤 것도 잡을 수 없습니다. 이벤트 표시기의 정보는 appcrash 메시지보다 자세하지 않습니다. – user1646801

+0

@dmck - AppDomain 상태를 손상시키는 나쁜 엉덩이 예외 (예 : StackOverflowException 또는 OutOfMemory 예외)가 있습니다. 이러한 예외는 실제 발생할 때 기록되거나 캐시 될 수 없습니다 –

0

사실 후에 분석 할 수있는 크래시 덤프를 생성해야합니다. 레지스트리를 일부 변경해야하며 Visual Studio를 사용하여 덤프 파일을 분석 할 수 있습니다. 다행히 실패하면 특정 기능과 같은 더 많은 단서를 얻을 수 있습니다. 당신은 DebugDiag, Microsoft에서 도구를 설정됩니다 http://blog.functionalfun.net/2013/05/how-to-debug-silent-crashes-in-net.html

:

은 자세한 내용은이 웹 사이트를 참조하십시오.

어떻게되는지 또는 더 나은 도구를 찾으면 알려주세요.

감사합니다,

데이브 여기

8

이 앱 충돌 메시지의 예입니다 : 타임 스탬프 그대로

Problem signature: 
Problem Event Name: APPCRASH 
Application Name: WINWORD.EXE 
Application Version: 12.0.4518.1014 
Application Timestamp: 45428028 
Fault Module Name: StackHash_7ae5 
Fault Module Version: 6.0.6000.16386 
Fault Module Timestamp: 4549bdc9 
Exception Code: c0000374 
Exception Offset: 000af1c9 
OS Version: 6.0.6000.2.0.0.256.4 
Locale ID: 1033 
Additional Information 1: 7ae5 
Additional Information 2: 4cf2e59e469447e0692da79a5a9446de 
Additional Information 3: 333f 
Additional Information 4: 583336399425ab3efc33bdfbb60895ee 

응용 프로그램 이름 및 응용 프로그램 버전은 간단합니다 (이 변경된 날짜 파일 탐색기에서 32 비트 유닉스 타임 스탬프 값으로 인코딩 됨). 오류 모듈은 일반적으로 dll 이름이며 예외 오프셋은 오류를 일으킨 DLL의 하드웨어 명령 오프셋 주소입니다. 이 경우 유효한 모듈을 검색 할 수없는 내부 런타임 오류 였기 때문에 실제 값 대신 StackHash를 얻었습니다. 버전은 Windows에서 실행 파일의 일반 PE 버전 문자열입니다. 로케일 ID는 사용되는 세계화 설정 뱅크입니다. 1033은 en-US입니다.

예외 코드는 here으로 해석 할 수 있습니다. 이 예에서 오류는 STATUS_HEAP_CORRUPTION입니다.

추가 정보 필드는 불투명 한 데이터이며 예외 코드의 내용을 기반으로합니다. 나는 그 분야에 대한 유용한 정보를 모른다. 아마도 그럴 가능성이 없다. 그리고 그 분야는 의도적으로 문서화되지 않았기 때문에 Microsoft는 필요에 따라 정보를 변경할 수있다. 이러한 필드는 대개 많은 정보가 포함 된 md5 해시입니다. 기본적으로 hashcode를 통해 많은 정보를 동일/다른 것으로 빠르게 비교할 수 있으므로 오류가 동일한 실행 상태로 인해 발생하는지 여부를 알 수 있습니다 .

0

비주얼 스튜디오 예외를 구성 할 수 있습니다 네이티브 및 관리 코드의 상호 운용 MSDN article about using it here

MDA에 의해 던져진 예외를 해결하는 .NET에서 좋은 기능, 관리 디버거 도우미는 창을 볼 수 있습니다.

관련 문제