Повторення аварії: "Невиправний виняток win32 стався в mscorsvw.exe". Як діагностувати / виправити?


3

Нещодавно я отримав новий комп'ютер на роботі, і мені довелося перевстановити інструменти розробки, тощо. ПК працює під керуванням Windows XP (blech), і у мене встановлено Visual Studio 2010 і. пакети та виправлення. Сама Windows XP також є актуальною (якщо можна сказати, що :-)

Однією з повторюваних проблем, які я помітила, є наступне діалогове вікно, яке має тенденцію виникати після того, як машина була бездіяльний трохи:

Visual Studio Just-In-Time Debugger: An unhandled win32 exception occurred in mscorsvw.exe ... Do you want to debug using the selected debugger?

Я підозрюю, що аварія пов'язана з тим, що .NET Framework виконує Ngen-компіляцію системних збірок у фоновому режимі, і збій, коли він досягає однієї збірки, зокрема.

Я знайшов інша згадка цієї проблеми на форумах MSDN, і одним із запропонованих обхідних шляхів є налаштування функції запобігання виконанню даних Windows XP "Увімкніть DEP лише для основних програм і служб Windows" . Однак, це вже налаштування на моєму ПК.

Як далі можна діагностувати? Коли я намагаюся приєднатися до процесу, це вже пішло.

Чи є інші запропоновані або ймовірні виправлення?


ОНОВЛЕННЯ:

Я знайшов дещо більше інформації про ngen тут і тут .

У командному рядку я виконав такі дії: ngen executequeueditems .. це тепер дозволяє мені надійно відтворити проблему замість того, щоб чекати, поки фоновий режим ngen виконується.

Тому, коли ngen.exe отримав наступний запис:

Compiling assembly Microsoft.SqlServer.Management.MultiServerConnection, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91 (CLR v2.0.50727) ...
WARNING: Cannot hardbind to mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 because dependency does not have a native image (check FusLogVw for reason)
Failed to generate native code for dependent image Microsoft.SqlServer.Management.MultiServerConnection, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91 because of the following error: The remote procedure call failed. (Exception from HRESULT: 0x800706BE)

... результатом цього діалогу була помилка:

.NET Runtime Optimization Service has encountered a problem and needs to close.

У той час як інші збірки, які зазнали невдалої генерації образів, насправді не викликали крах , лише повідомлення про помилку.

Отже, специфічна збірка, на яку це не вдається, це: Microsoft.SqlServer.Management.MultiServerConnection .

Що ще я можу зробити? Я не особливо дбаю, якщо він може бути ngen'd або не в цей момент; Я просто хочу, щоб зупинити це дратівне повторення помилки діалогу зверху. Я вже намагався:

ngen uninstall Microsoft.SqlServer.Management.MultiServerConnection,

... але в ньому написано "ПОМИЛКА: вказана збірка не встановлена".

Чи є спосіб видалити збірки з ngen черга , так ngen навіть не намагатиметься створити для нього рідний образ?


Яку інформацію надає журнал подій? Тому що ви могли б вирішити це, якщо ви знали, чому "Віддалений виклик процедури не вдалося. Чи є якісь аварійні звалища?
Tom Wijsman

Відповіді:


3

NGen збірки SQL Server не працює тому що попередня спроба ngening збірки .Net Framework 2.0 mscorlib не вдалася . Це не має нічого спільного з .Net 4 взагалі, тому я пропоную вам перестати дивитися на його ngen послуги (2 і 4 використовувати свої власні послуги).

Що ж стосується того, чому це не вдалося - добре, що тут немає величезної кількості в мережі. Я знайшов на форумах MSDN хоча - там щось підтверджує, чи правильно mscorlib був nGen'd - я перевірю це.

Цікаво, що на цьому потоці згадується і SQL Server; Хоча це 2005 рік, і я думаю, що збірки версії 10, про які ви говорите, є Sql 2008 року.

Але, зрештою, якщо б це була моя машина, я б

  • Видаліть .Net 2.0 і 3.0 і 3.5 (якщо ви також відчуваєте себе відважним, видаливши 4.0)

  • Видаліть будь-який компонент Sql Server, який містить збірку, яка не виконує nGen.

  • Встановіть .Net 3.5 sp1 redist; переконавшись, що ви також отримали виправлення на яку також посилається далі.

  • Зачекайте, доки все nGening завершиться, перш ніж продовжити.

  • Якщо ви видалили .Net 4, переінсталюйте її тепер.

  • Перевстановіть компонент Sql Server, видалений на кроці 2.

Так, я знаю, начебто "вимкніть і знову" відповідь - але я думаю, що це краще, ніж намагатися обійти проблему. Якщо mscorlib 2.0 не nGen'd правильно, то tbh .Net 2.0 дійсно не можна використовувати у своєму поточному стані. І оскільки це компонент SQL Server, який намагається nGen - з ним працюватиме тільки nGen'd mscorlib v2 (nGen'd mscorlib v4 не буде).


+1, прийнято, а нагороду нагороджено. Видалення та перевстановлення обох версій .NET 2.0 та .NET 4.0, як описано вище, вирішили проблему. Немає більше збоїв, немає більше повідомлень про помилки ngen у журналі подій, і чергу ngen зараз порожня. Дякую!
Chris W. Rea

@Chris W. Rea - відмінні новини, раді допомогти :)
Andras Zoltan

3

mscorsvw.exe можна розглядати як програму Microsoft і все ще отримувати прибуток від DEP, ви можете перевірити, чи дійсно він вимкнений Process Explorer . Або шляхом додавання колонки DEP або перевірки властивостей процесу.

Visual Studio (принаймні для мене) не дуже зручно для налагодження збоїв, вам краще отримати дамп, щоб ми могли спробувати подивитися на можливі причини. Ви можете встановити за замовчуванням відладчик за допомогою drwtsn32.exe -i. Або якщо ви хочете дізнатися, що ви можете використовувати WinDBG , що дозволяє більш детально аналізувати розбиті програми. Хоча це, мабуть, речі, якщо ви не зацікавлені в цьому ...

Я підозрюю, що аварія пов'язана з тим, що .NET Framework виконує Ngen-компіляцію системних збірок у фоновому режимі, і збій, коли він досягає однієї збірки.

Не буде ngen.exe крах замість цього? Ви можете це підтвердити ngen.exe працює?

Ви можете налаштувати Процес монітора так що він показує тільки початок / зупинка процесу / потоку, щоб ви могли бачити, що відбувалося, просто залиште його на деякий час і зверніться назад, як тільки ви отримаєте це вікно відладки.


1
Тепер я можу відтворити проблему ngen executequeueditems; див. моє оновлення вище у запиті.
Chris W. Rea

1
p.s. Дякуємо за пораду про WinDBG; Я додаю це до мого списку речей, які я не знаю, але повинні дізнатися більше. :-)
Chris W. Rea

2

"Увімкніть DEP лише для важливих програм і служб Windows".

Оскільки mscorsvw.exe це послуга, це насправді не впливає на нього.

Як далі можна діагностувати?

Перегляньте файли журналів ngen. Вони, ймовірно, розташовані в різних папках, таких як C: Windows Microsoft.NET Framework v4.0.30319 або будь-яка інша версія, яку ви встановили.


Дякуємо, файл журналу корисний. +1. Я все ще залишився з проблемою, хоча тепер, принаймні, я знаю, яка збірка викликає ngen до краху.
Chris W. Rea

Як я розумію, список елементів, які повинні бути ngen-ed, зберігається в реєстрі HKEY_LOCAL_MACHINE SOFTWARE Wow6432Node Microsoft NETFramework v2.0.50727 NGENService Roots. Таким чином, можна видалити запис звідти. Тим не менш, я не можу не відчувати, що уникаючи ngen-ing цієї DLL просто збирається уникнути цієї помилки, але ви можете отримати помилку, коли ви намагаєтеся використовувати цю DLL.
sgmoore

Що я прочитав, що, якщо збірка не ngen'd, то CLR буде просто виконати його за допомогою традиційної компіляції JIT. Скоріше за все, відбудеться покарання продуктивності за допомогою JIT замість рідного зображення. Але я б не обов'язково очікувати, що він зірветься, якщо компіляція JIT буде достатньо іншою від власного генератора зображень.
Chris W. Rea

Що я маю на увазі, я підозрюю, що може бути корупція з цією DLL (або щось вона використовує), яка викликає NGG до аварії, і якщо так, то проблема все одно залишиться незалежно.
sgmoore

1

Від Що таке mscorsvw.exe? як відключити його від запуску :

Mscorsvw .exe - це процес, пов'язаний з   Microsoft .NET framework. Mscorsvw   Процес використовується для попередньої компіляції .Net   каркасні збірки в Росії   фону.

Процес Mscorsvw.exe запускається тільки в   фон, якщо він повинен компілюватися   пріоритетні збори після   встановлення .NET framework   перерозподіляється і додаток   використовує .NET framework   складені його збори.

Зазвичай попередня компіляція високого пріоритету   збори будуть виконувати   Процес mscorsvw.exe з від 5 до 10   хвилин, а потім він спробує   процеси низькопріоритетних зборів, коли   комп'ютер неактивний.

Вимкнення або зупинка mscorsvw.exe

  1. Перейдіть до C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 у провіднику Windows.
  2. Відкрийте командний рядок, набравши cmd у вікні виконання і натисніть клавішу enter.
  3. Тепер нам потрібно вказати вищевказаний шлях в команді і тепер введіть
    ngen.exe executequeueditems
    і натисніть enter.
  4. Тепер почекайте, поки процес перекомпілювати всі збірки, після   Пару хвилин це буде   завершено.

Тепер ви спостерігаєте не буде   Процес mscorsvw.exe працює в задачі   менеджера.

Ви також можете скористатися цією командою в будь-який час, щоб побачити, чи є в черзі все, що очікує на виконання:

ngen queue status

а також :

ngen display

Щоб очистити всі елементи в черзі, виконайте такі дії:

ngen /delete *

Щоб дізнатися, які збірки викликають проблему, файли журналів, які можуть допомогти відповісти на це:

C:\Windows\Microsoft.NET\Framework\<version>\ngen.log
C:\Windows\Microsoft.NET\Framework\<version>\ngen_service.log

З іншого боку, вам не потрібні .NET Frameworks 2.0 і 3.5, так як 4.0 має замінити всі.


+1 для ngen.exe executequeueditems .. мене, щоб відтворити проблему за межами вільного фонового контексту. Потім, ngen queue status просто звіти "Ім'я служби: clr_optimization_v4.0.30319_32 .. Служба оптимізації .NET Runtime працює." Насправді це не показує, чи є щось у черзі, але ngen.exe executequeueditems завжди здається, що потрібно працювати.
Chris W. Rea

Можна спробувати вимкнути службу "Microsoft .NET Framework NGEN v4.0.30319_X86". Це може завадити компіляції у фоновому режимі.
harrymc

@harrymc Важкий обхідний шлях. Я б краще зберігати службу, і видаляти з черги тільки одну збірку, що викликає проблему.
Chris W. Rea

Я додав більше інформації.
harrymc

1
@Chris W. Rea: Можливо, що (не) установка поставила в чергу неіснуючу збірку. Саме тому рекомендується зупинити ngen-службу під час (не) встановлення виробу, що містить збірки. Чи намагалися ви очистити чергу за допомогою ngen /delete * ?
harrymc
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.