2009-02-08 4 views
6

Я ищу общие причины ошибок нарушения доступа в .NET.Общие причины ошибок доступа к ошибкам в .NET.

Вещи, которые я проверил до сих пор -

  • вызова Dispose на всех объектах, реализующих IDisposable
  • Проверьте наличие действительных аргументов в вызовах COM объекты
  • Явное удалить все добавленные вручную обработчики событий
  • DO НЕЗАВИСИМОСТЬ вызова GC.Collect/GC.WaitForPendingFinalizers
  • Добавить и Удалить память при работе с встроенные объекты (Bitmap, и т.д ..) (Добавленных)
  • Проверьте всю PInvoke вызовов для действительных типов аргументов
  • Обеспечить надлежащее использование IntPtr, SafeHandle и HandleRef
  • Threading (Потокобезопасные, реентрантные функции), надлежащее использование waithandles. (Добавлено)
  • Обеспечить применение и библиотеки все ориентируемся на ту же платформу (x86 или x64) (Приложение и DLL файлов должны быть нацелена на ту же платформу, что и COM-объекты.) (Добавлены)

Любые другие предложения?

Редактировать - Перемещенный анализ дампа аварийного ситуации на другой вопрос.

+0

Вы должны стереть часть о захвате дамп и спросить его как новый вопрос. Это не связано с этим, за исключением того, что вы в настоящее время пытаетесь диагностировать ошибку в своей программе. –

ответ

1

Вы генерируете IL во время выполнения или используете компонент, который делает это? Используя небезопасный код C#, делая манипуляции с указателем?

+0

@ SDX2000 - Хорошее мышление. Спасибо за предложения. – user62572

+0

Добро пожаловать. –

3

Любое использование небезопасного или неуправляемого кода может предоставить вам этот тип исключений.

AccessViolationException:

Нарушение прав доступа происходит в неуправляемый или небезопасный код, когда код попытки чтения или записи в память , которая не была выделена, или которой он не имеет доступа. Это обычно происходит потому, что указатель имеет плохое значение . Не все читает или пишет через плохие указатели приводят к доступа нарушений, так что нарушение доступа обычно указывает на то, что несколько читает или записи произошли через плохие указатели, и что память может быть поврежден. Таким образом, нарушения доступа почти всегда указывают на серьезные ошибки программирования . В .NET Framework версии 2.0, AccessViolationException явно идентифицирует эти серьезные ошибки.

В программах, состоящих полностью из проверяемых управляемого кода, все ссылки или действительна или нулевые, и доступ нарушений невозможно. Ошибка AccessViolationException только тогда, когда проверяемый управляемый код взаимодействует с неуправляемым кодом или с небезопасным управляемым кодом.

Рекомендуется:

GFlags и Application Verifier

+0

Yup, который определяет это хорошо. У вас есть предложения относительно того, что нужно искать в вашем коде .NET, чтобы предотвратить или отслеживать эти типы ошибок? – user62572

+0

Привет, конечно, Отредактировал ответ, чтобы включить те (GFlags и Application verifier) –

Смежные вопросы