문제

내가 있는 응용 프로그램을 던지는 것을 보 예외한 후에만 프로그램에는 폐쇄되었습니다.그리고 그것은 매우 일관성이 없습니다.(우리 모두 알고 얼마나 재미있는 일관성이 없는...)

내 생각 중에 오류가 깨끗한 과정입니다.하지만 이러한 메모리 읽기/쓰기 오류를 것을 나타내는 뭔가 잘못된 내"안전하지 않은"코드를 사용 현황(점?).

내가 무엇에 흥미있는 가장 좋은 방법은 무엇입하는 디버그 이러한 상황?
당신은 어떻게 디버깅하는 프로그램이 이미 닫혔습니까?
내가 찾는 것은 시작점을 분해하는 더 큰 문제입니다.

이러한 오류는 것을 현재에서 자신 여러 가지 방법(일부는 실행 시간,일부 디버그):

1: .NET-BroadcastEventWindow.2.0.0.0.378734a.0:  Application.exe - Application Error
The instruction at "0x03b4eddb" referenced memory at "0x00000004". The memory could not be "written". 2: Application.vshost.exe - Application Error
The instruction at "0x0450eddb" referenced memory at "0x00000004". The memory could not be "written". 3: Application.vshost.exe - Application Error
The instruction at "0x7c911669" referenced memory at "0x00000000". The memory could not be "read". 4: Application.vshost.exe - Application Error
The instruction at "0x7c910ed4" referenced memory at "0xfffffff8". The memory could not be "read".
도움이 되었습니까?

해결책

면 멀티-스레드 받을 수 있 오류를 에서 worker threads 지 않는 제대로 종료되고에 액세스하려고 폐기 개체입니다.

다른 팁

나는 이를 사용하여 문제 AcrobarReader COM 구성 요소입니다.모든 이제 다음 후 응용 프로그램을 종료했던"Application.vshost.exe -응용 프로그램 오류""메모리의 읽을 수 없습니다".GC.수()및 WaitForPendingFinalizers()는 도움이 되지 않았습니다.

Google 푸에 저를 이끌어 낼 페이지: http://support.microsoft.com/kb/826220.나는 수정된 방법을 위해 3 을 수도 있습니다.

프로세스를 사용하여 탐색기에 내가 발견 AcroPDF.dll 지 않을 발표하기 전에 마지막 라인에서 주요 기능입니다.그래서 여기 오는 API 를 호출합니다.

DLLImports(DLLImport 에서는 시스템입니다.런타임입니다.InteropServices 네임스페이스):

<DllImport("kernel32.dll", EntryPoint:="GetModuleHandle", _
       SetLastError:=True, CharSet:=CharSet.Auto, _
       CallingConvention:=CallingConvention.StdCall)> _
Public Overloads Shared Function GetModuleHandle(ByVal sLibName As String) As IntPtr
End Function

<DllImport("kernel32.dll", EntryPoint:="FreeLibrary", _
    SetLastError:=True, CallingConvention:=CallingConvention.StdCall)> _
Public Overloads Shared Function FreeLibrary(ByVal hMod As IntPtr) As Integer
End Function

와 전에 다음 응용 프로그램 종료:

Dim hOwcHandle As IntPtr = GetModuleHandle("AcroPDF.dll")
If Not hOwcHandle.Equals(IntPtr.Zero) Then
    FreeLibrary(hOwcHandle)
    Debug.WriteLine("AcroPDF.dll freed")
End If

이 절차를 수정할 수 있습니다 다른 ill-behaved dll.나는 그냥 그것을 희망하지 않을 소개하는 어떤 새로운 버그가 있습니다.

본 plently 의 오류를 다음과 같이 최근에 있습니다.내 문제가 있었 releated 하는 방법에는 CRT(C 런타임)intereacting 다.NET runtime 정 닫는 과정입니다.내 응용 프로그램은 복잡하여 C++,하지만 할 수 있습 COM 추가 기능을 로드 중 일부는 C#으로 작성되어 있습니다.

디버깅하는 이에,나는 당신이해야 할 것을 사용하여 디버깅할 수 있습니다.Visual Studio(설정을 혼합 모드를 디버깅)또는 WinDbg.찾는 방법을 사용하여 Microsoft 공용 상징 서버를 다운로드 Pdb windows 구성 요소는 당신 그 기호입니다.

우리의 많은 문제가 되었다.NET s(끔)COM 클라이언트를 지원합니다.말 끔하지 않기 때문에 참조 횟수를 올바르게(없이 많은 작업에서 개발자의 끝).COM 물체들이 참조되지 않 계산 제기까지의 쓰레기를 수집이 이루어졌다.이것은 종종 설치 이상한 타이밍 문제를 종료하는 동안-COM 체 청소까지 오랜 후에 그들은 해야 합니다.

애호가의 단어"일치하지 않은""비정하고 있습니다." 그리고 무슨 일이 임니다.NET 습니까?체 파괴.

때이 나에게 일어난,범인 클래스에서는 내가 쓴 감싸 안전하지 않은 통화를 외부 API 를 사용합니다.나는 정리 코드 클래스에서의 소멸을 기대하는 코드를 호출할 때는 객체의 범위가 있습니다.하지만 그의하지 않는 방법 개체 파괴에서 작동.NET,할 때는 객체가 범위에 배치 종료자의 큐,그리고 그것의 소멸하지 않을 얻을 호출될 때까지 종료자 얻을 수 있습니다.그것은 할 수 없습니다 이 때까지 후 프로그램을 종료됩니다.이런 경우,그 결과 많이 보이는 것과 같은 무엇이 당신을 설명하는 여기에.

나는 나의 구현하는 클래스 IDisposable, 고,명시적으로 호출 Dispose() 체에었을 때 그것으로 완료되면,문제는 떨어져 갔다.(의 또 다른 장점을 구현하 IDisposable 는 인스턴스화할 수 있는 객체의 시작에 using 블록고 자부하는 폐기()얻을 것이 때 잎을 차단합니다.)

이 시도하는 강제로 버그를 발생하는 동안 프로그램을 제어

   //set as many statics as you can to null;
   GC.Collect();
   GC.WaitForPendingFinalizers();
} //exit main

에 오류가 정지 후 나타나는 것을 사용하여 제안된 코드:

GC.Collect(); 
GC.WaitForPendingFinalizers(); 
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top