Расследование сбоя в библиотеке DLL смешанного режима (C /CLI)

#garbage-collection #c -cli #clr #access-violation #mixed-mode

Вопрос:

У меня есть библиотека DLL смешанного режима (C /Cli) , на которую ссылается приложение на C#. Он вылетает с ошибкой: name_here.dll вызвала исключение нарушения доступа(0xC0000005) при попытке чтения из ячейки памяти 0x00000000 в потоке 243.

Я запустил DebugDiag на crashdump, и он показывает эту ошибку вместе со следующей информацией: в этом процессе выполняется GC. Поток, запустивший GC, равен 274.

Затем в отчете DebugDiag отображается следующее предупреждение: следующие потоки ожидают завершения сборки мусора .net. Поток 274 запустил сборку мусора.Поток сборщика мусора не начнет выполнять свою работу до тех пор, пока не завершатся выполнение потоков, у которых отключен упреждающий сборщик мусора. В следующих потоках отключена упреждающая GC 274.

Затем есть еще одно предупреждение о начальном потоке, который вызывает нарушение доступа, поток 243: Обнаружена возможная блокировка или утечка критического раздела в lt;адрес_хереgt;, принадлежащем потоку 243.

Не совсем уверен, как подойти к этому или что я могу делать не так. У кого-нибудь была эта проблема. Вызывает ли поток 274 сам по себе тупиковую ситуацию? Любая идея была бы очень признательна.

Комментарии:

1. Сначала вам нужно уметь воспроизвести проблему. Затем вам нужно запустить с подключенным отладчиком.

2. @MarkBenningfield, Спасибо тебе, Марк, что нашел время ответить. Это находится в производстве и его трудно воспроизвести. Что общего с случаями этого сбоя, так это то, что выполняется GC и ошибки предупреждения, которые я опубликовал. Я надеялся, что кто-то, возможно, видел то же самое.