Поиск причины System. AccessViolationException

В нашем приложении возникает странная фатальная ошибка System.AccessViolationException. Мы видим это, поскольку настроили событие AppDomain.CurrentDomain.UnhandledException для регистрации исключения.

Exception: System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
   at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
   at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
   at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
   at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
   at System.Windows.Forms.Application.Run(Form mainForm)
   at Bootstrap.Run() in e:\build-dir\src\Bootstrap.cs:line 25

Само исключение, похоже, не содержит больше информации, чем сообщение «Попытка прочитать или записать защищенную память. Это часто указывает на то, что другая память повреждена ».

  • Какие шаги мы теперь можем предпринять, чтобы найти причину проблемы?
  • Есть ли способ определить недопустимый адрес или значение указателя, вызвавшее сбой?
  • Можем ли мы узнать, какой код встроенной библиотеки вызывал проблему?
  • Можно ли включить дополнительную отладку / трассировку?

ОБНОВЛЕНИЕ

  • Может ли это быть вызвано более ранним небезопасным для потоков использованием WinForms API ?
30
задан Liam 20 September 2019 в 13:16
поделиться

1 ответ

stacktrace ничего не говорит Вам :-(. Можно ли обновить пакеты для наблюдения, если исключения не стало? Я видел Систему. AccessViolationException ни с Одним - Ориентированные на многопотоковое исполнение Com-объекты при доступе к Свойствам от workerthread. Таким образом да, я могу предположить, что исключение вызывается при помощи более ранней неориентированной на многопотоковое исполнение версии от некоторого API.

я справился с ситуацией путем добавления Атрибуты

[HandleProcessCorruptedStateExceptions]
[SecurityCritical]

к Методу, в котором я получаю доступ к этим конфликтующим Свойствам от COM-объекта. Также я должен был добавить

<legacyCorruptedStateExceptionsPolicy enabled="true" />

Установка на мой app.config и был, чем способный поймать эти Исключения и дескриптор мудро.

[еще 119] информация Поврежденные Исключения состояния Документы MS Путем обрабатывания Поврежденных Исключений состояния и не закрывают процесс, Вы оставляющий путь, где "CLR предлагает некоторые довольно сильные гарантии о безопасности правильности и памяти программы".

Кредиты к https://stackoverflow.com/a/4759831/1196586

0
ответ дан 28 November 2019 в 00:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: