Windows 모바일 장치에서 매우 간헐적 인 액세스 위반 문제를 해결하는 기술은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/402957

문제

대부분의 경우 매우 잘 작동하는 큰 소형 프레임 워크 v2.0 응용 프로그램이 있습니다. 하루에 한 번 정도의 특정 장치에서 사용자는 표준 관리 트라이/캐치 블록으로 잡히지 않는 기본 오류 0xc0000005를받습니다.

내 응용 프로그램은 고정 간격으로 ASMX 호출을 통해 서버와 동기화됩니다. 동기화 중에 문제가 발생하는 것으로 보입니다. 동기화 시점에 발생하는 ASMX 호출 외에 상당한 비즈니스 로직이 있지만 그 중 98%는 관리 코드입니다. 모든 P/호출 및 응용 프로그램 기본 C ++ 라이브러리를 검토 했으며이 시점에서 문제가없는 곳이 아닌 약 95% 확신합니다.

이것은 특정 장치에서만 발생하고 매우 드물게 (하루에 한 번 미만) 격리하기가 매우 어렵 기 때문입니다. 내 코드를 내 코드에 도착했는데 마치 응용 프로그램 내의 임의의 장소에서 발생하는 것처럼 보이므로 무언가가 메모리를 손상시키는 것으로 생각됩니다.

이 문제를 해결하는 방법에 대한 모든 생각은 감사 할 것입니다.

도움이 되었습니까?

해결책 2

내 기본 C ++ 예외 처리에는 비동기 예외가 포함되어 있지 않았으므로 액세스 위반 예외를 포착하지 못했습니다.

이것은 내 문제에 도움이 될 수 있지만 다른 사람들에게 도움이 될 수 있습니다.

이 링크에 문서화 된 /eha 스위치를 사용하면 이러한 유형의 예외를 포착 할 수 있습니다.

http://msdn.microsoft.com/en-us/library/1deeycx5.aspx

다른 팁

0xc0000005는 액세스 위반이므로 액세스 권한이없는 주소를 읽거나 쓰려고합니다. 이것들은 실제로 찾기가 어렵고 경험은 최고의 도구 중 하나입니다 (Well Platform Builder의 디버거도 정말 도움이되지만 디버깅의 전체 도로이며 이미 가지고 있지 않은 경험이 필요합니다. 시도해 보았습니다). 로깅은 할인 된 상태에서 P/호출 통화를 제거하는 것보다 더 유용하지 않은 경향이 있음을 알았습니다.

관리되는 앱의 액세스 위반은 일반적으로 이러한 이유 중 하나로 발생합니다.

  • 당신은 p/핸들을 통과하는 기본 API를 관리되는 객체로 호출하고 기본 API는 해당 핸들을 사용합니다. 기본 API가 실행되는 동안 수집 및 압축이 발생하면 관리되는 객체가 움직일 수 있고 포인터가 유효하지 않습니다.
  • 당신은 당신이 통과하는 크기보다 너무 작거나 작은 버퍼로 무언가를 호출하고 API가 읽기 또는 쓰기를 오버런합니다.
  • P/호출 호출로 전달되는 포인터 (intptr 등)는 유효하지 않으며 (-1 또는 0), 원본은 사용하기 전에 확인하지 않습니다.
  • 당신은 기본 통화를 호출하고 기본 코드가 메모리가 부족하여 (일반적으로 가상)가 실행되며 실패한 할당을 확인하지 않고 잘못된 주소를 읽고 읽습니다.
  • 초기화되지 않았거나 어떻게 든 이미 완료되고 수집 된 객체를 가리키는 gchandle을 사용합니다 (따라서 물체를 가리키지 않으면 객체가 있었던 주소를 가리키고 있습니다).
  • 앱은 수면/깨우기에 의해 무효화 된 손잡이를 사용합니다. 이것은 더 난해하지만 확실히 발생합니다. 예를 들어, 스토리지 카드에서 응용 프로그램을 실행하는 경우 전체 앱이 RAM에로드되지 않습니다. 사용중인 조각은 실행을 위해 수요가 있습니다. 이것은 모두 잘하고 좋습니다. 이제 장치에 전원을 공급하면 운전자가 모두 종료됩니다. 전원 백업하면 많은 장치가 저장 장치를 다시 마운트합니다. 앱이 더 많은 프로그램에서 요구 사항을 요구하는 경우 더 이상 어디에 있지 않으며 죽습니다. 장착 된 매장의 데이터베이스에서도 비슷한 동작이 발생할 수 있습니다. 데이터베이스에 열린 핸들이있는 경우 수면/웨이크 사이클 후 연결 핸들이 더 이상 유효하지 않을 수 있습니다.

여기서 거의 모든 것이 P/호출이며 우연이 아니라는 추세에 주목할 것입니다. 관리 코드가 자체적으로 수행하도록하는 것은 매우 어렵습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top