누군가이 오류를 일으킬 수있는 것에 대해 누군가를 깨달을 수 있기를 바랍니다.
보호 된 메모리를 읽거나 쓰려고했습니다. 이것은 종종 다른 메모리가 손상되었음을 나타냅니다.
이 오류는 응용 프로그램의 임의의 영역에서 발생하는 것으로 보이므로 실제로 코드를 게시 할 수 없습니다. 응용 프로그램은 오류가 발생하기 전에 12-48 시간 동안 실행됩니다. 때로는 겉보기에 임의의 지점에서 멈추고 위의 오류가 발생합니다. 다른 경우 전체 응용 프로그램이 중지되고 “치명적인 오류가 발생했습니다 … ‘라는 줄에 오류가있는 화면이 나타납니다. CLR의 버그 또는 … “PInvoke 또는 기타 관련이없는 정보에 관한 정보. 이 경우 모든 스레드가 종료 된 것으로 표시되고 사용 가능한 디버깅 정보가 없습니다.
간단히 말해서 이것은 응용 프로그램이하는 일입니다.
C #으로 작성된 멀티 스레드 서버 응용 프로그램입니다. 클라이언트는 소켓을 통해 서버에 연결됩니다. 서버는 클라이언트가 서로 및 환경과 상호 작용할 수있는 가상 환경을 실행합니다. 꽤 많은 메모리를 소비하지만 누수가 보이지 않습니다. 일반적으로 약 1.5GB를 소비합니다. 메모리 사용량이 응용 프로그램이 실행되는 동안 전체적으로 상대적으로 일정하기 때문에 누수가 있다고 생각하지 않습니다. 클라이언트가 아무것도하지 않더라도 환경을 유지하기 위해 지속적으로 코드를 실행합니다. 타사 소프트웨어 나 다른 API를 사용하지 않습니다. 이 응용 프로그램에서 사용하는 유일한 외부 리소스는 소켓 연결 및 SQL 데이터베이스 연결입니다. 64 비트 서버에서 실행 중입니다. VS2008 및 VS2010에서 .net 2.0, 3.5 및 4를 사용하여 디버깅하려고했습니다.
컴파일러 최적화와 여러 Microsoft 핫픽스를 끄려고했습니다. 이 문제가 사라지는 것은 없습니다. 가능한 원인 또는 문제를 일으키는 원인을 식별 할 수있는 방법을 아는 사람이 있다면 감사하겠습니다.
답변
VS 2013 .NET 4.5에서 MapInfo DLL을 사용 하여이 문제에 직면했습니다. 문제는 내가 빌드 플랫폼을 x86에서 모든 CPU로 변경 했으며이 오류를 발생시키기에 충분하다는 것이 문제였습니다. 다시 x86으로 변경하면 트릭이되었습니다. 누군가를 도울 수 있습니다.
답변
또한 Visual Studio (VS) 2010에서이 문제에 직면했습니다. 더 흥미롭게도 솔루션 (콘솔 응용 프로그램, WPF 응용 프로그램, Windows Forms 응용 프로그램)에 여러 프로젝트가 있었지만 “콘솔 응용 프로그램”유형을 설정하는 경우에만 실패했습니다. 솔루션의 시작 프로젝트로 프로젝트의 프로젝트 (문자 그대로 코드가 없거나 프로젝트 템플릿 자체와 함께 제공되는 기본 어셈블리와 별도로 참조되는 추가 어셈블리의 경우).
콘솔 응용 프로그램 프로젝트의 프로젝트 속성으로 이동 (또는 솔루션 탐색기에서 프로젝트 파일을 선택하고 Alt+ Enter키 조합을 누름 )-> Debug
탭으로 이동 -> Enable Debuggers
오른쪽 창에서 섹션으로 이동 -> 확인 Enable unmanaged code debugging
아래의 스냅 샷과 같이 체크 박스 -> 클릭하여 Floppy프로젝트 속성을 저장하려면 도구 모음에서 버튼을 누릅니다. 왜 그런 일이 있었는지 근본 원인은 아직 알려지지 않았습니다. 내가 관찰 한 유일한 것은 전날 밤 내 컴퓨터에 많은 Windows 업데이트가 설치되어 사무실 업데이트와 OS 업데이트로 구성되었다는 것입니다 (12KB 이상의 기사).
업데이트 : VS 2017 이후 설정 이름이 아래 스크린 샷과 같이 변경되었습니다.
답변
마지막으로 WinDBG 및 SOS의 도움으로이를 추적했습니다. 알 수없는 DLL에 의해 액세스 위반이 발생했습니다. “Nvidia Network Manager”라는 소프트웨어가 문제를 일으키는 것으로 나타났습니다. 방화벽이나 바이러스 백신으로 인해이 문제가 발생할 수있는 방법을 셀 수없이 많이 읽었으며 어느 것도 사용하지 않으므로이 아이디어를 무시했습니다. 또한 다른 하드웨어를 사용하는 둘 이상의 서버에서 발생하기 때문에 환경이 아니라고 가정했습니다. 이 컴퓨터에서 테스트 한 모든 컴퓨터가 “NVidia Network Manager”를 실행하고있었습니다. 나는 그것이 다른 마더 보드 드라이버와 함께 설치된다고 생각합니다.
이 문제가 오랫동안 내 응용 프로그램을 괴롭 혔기 때문에 누군가에게 도움이되기를 바랍니다.
답변
프로젝트의 혼합 빌드 플랫폼 DLL로 인해 문제가 발생할 수 있습니다. 즉, 프로젝트를 모든 CPU에 빌드하지만 x86 플랫폼 용으로 이미 빌드 된 일부 DLL이 프로젝트에 있습니다. 32 비트 및 64 비트 아키텍처의 서로 다른 메모리 매핑으로 인해 임의 충돌이 발생합니다. 모든 DLL이 하나의 플랫폼에 구축 된 경우 문제를 해결할 수 있습니다.
답변
답변
이 오류는 관리 코드에서 발생하지 않아야합니다. 이 문제를 해결할 수 있습니다.
이 예외를 무시하려면 Visual Studio Debugger로 이동하십시오.
Tools menu ->Options -> Debugging -> General -> Uncheck this option "Suppress JIT optimization on module load"
그것이 도움이되기를 바랍니다.
답변
나는 오늘이 예외에 대한 해결책을 찾았다. 추상 클래스에서 가상 메소드를 호출 한 단위 테스트 (NUnit)를 디버깅하려고 할 때 발생했습니다.
.NET 4.5.1 설치에 문제가있는 것 같습니다.
.NET 4.5.2를 다운로드하여 설치했는데 (프로젝트는 여전히 .NET 4.5.1을 참조합니다) 문제가 해결되었습니다.
솔루션 소스 :