2010-03-05 3 views
3

Я поддерживаю приложение .NET 2.0 Winforms, которое довольно широко используется. В редких случаях мы получаем запрос поддержки от клиента, в котором приложение возвращает исключение среды выполнения .NET AS SOON при попытке запустить приложение.Отладка приложения .NET 2.0 Winforms с помощью инструментов отладки для Windows

В прошлом мы помогли клиенту переустановить инфраструктуру .net, и очень часто это работает ... но иногда нет.

В такой ситуации можно использовать Windows Debugging Tools, чтобы определить причину проблемы. Если это так, вы должны загрузить отладочные символы на целевой компьютер (хотите избежать, так как это может быть несколько сотен МБ материала для загрузки на цель.)

Является ли это излишним для приложения .net? Любые альтернативы. Как вы собираетесь отлаживать это. Было бы полезно оценить неспецифический шаг за шагом. Конечно, это приложение скомпилировано как конфигурация RELEASE на целевой машине. У клиента, скорее всего, не будет установленных инструментов разработчика или отладки. Обычно у нас есть доступ к компьютеру с дистанционным управлением. Повторить. Это происходит ТАК КАК клиент пытается запустить приложение, и он немедленно сработает.

Каков самый быстрый путь к решению этой проблемы для клиента?

Приведен пример недавней ошибки в Журнале событий.
EventType clr20r3. .exe P2 2010.1.0.0, p3 4B857AFD P4 BLAH BLAH system.invalidoperation, P10 NIL.

Источник: Ошибка .NET Runtime 2.0. EventID: 5000

Заранее спасибо.

Сет

ответ

6

Почему бы не использовать это?

Для машины клиентов вы не сможете удаленной отладки. Поэтому рекомендуется записывать аварийный дамп для сбоев и зависаний для проблем с зависанием, а WinDbg или ADPlus.exe здесь очень полезен.

Попросите ваш конечный пользователь, чтобы запустить приложение в WinDbg, и выполнить

.dump /f path 

сохранить аварийный дамп, то вы можете задать для файла дампа и анализ аварии.

На целевой машине символ не требуется. Символы полезны при анализе дампа сбоя на вашей собственной машине, и в этом случае полезны такие вещи, как SOS.

Конечно, есть и другие способы получить аварийные дампы,

http://blogs.msdn.com/lexli/archive/2009/08/23/when-the-application-program-crashes-on-windows.aspx

+0

+1 для использования adplus.vbs в аварийном режиме. Средства отладки - это простая, небольшая установка, и вы можете написать им пакетный файл для запуска adplus в аварийном режиме. Мы используем это для клиентов, у которых есть проблемы, которые мы не можем воспроизвести на дому. –

+1

Adplus.vbs устарел. Перейдите в файл ADPlus.exe в той же папке. –

+0

Lex Спасибо за ваш ответ. Это именно тот ответ, на который я надеялся. Вы сказали: «Попросите вашего конечного пользователя запустить ваше приложение в WinDbg и выполнить .dump/f path» Является ли это очевидным, как это сделать? Как легко? Можете ли вы дать краткий шаг за шагом? Я считаю, что «путь» - это путь к файлу дампа. В любом случае, идеальный ответ. Посмотрите сейчас. Seth –

0

Я не думаю, что вы хотите "Windows Debugging Tools". Отладочные символы предназначены для ОС, а не для .NET Framework. (Напоминание, ваше приложение Windows.Forms живет в .NET Framework, а не в ОС.)

Удаленная помощь «Удаленная отладка» на http://msdn.microsoft.com/en-us/library/y7f5zaaa.aspx?

Обычно я включаю «StopSwitch», но это не обязательно для включения JIT. (См. «StopSwitch Stop Execution for Just-In-Time Debugging» в http://missico.spaces.live.com/blog/cns!7178D2C79BA0A7E3!309.entry). Это позволяет мне включить коммутатор, а затем подключиться к запущенному приложению, когда он попадает в оператор остановки отладчика.

Вы можете отлаживать сборку «выпуска». Выпуск pdb полезен для отслеживания стека.

У меня была эта проблема раньше. Я включаю StopSwitch, проверка была первой строкой, но JIT не запускался, потому что возникла проблема до того, как .NET Framework даже загрузила мое приложение.

+0

WinDbg на самом деле можно прекрасно использовать для отладки .Net приложений. Особенно с расширением sos. См. Http://msdn.microsoft.com/en-us/library/bb190764.aspx –

2

Редактировать: Просто увидел, что «происходит сразу при запуске». Indeed WinDBG can help.

Хотя средства отладки для Windows в основном предназначены для собственных приложений, они также полезны для управляемых приложений. Не только управляемые приложения «родные» в конце, когда они выполняются, но есть и, в частности, SOS extension для WinDBG или CDB (если вы предпочитаете командную строку).

Особенно (мини-) отвалы разбитых приложений можно довольно хорошо проанализировать с расширением SOS.Если ваше приложение выполняется в режиме выпуска или отладки, это не имеет большого значения, если у вас есть соответствующие файлы символов (.PDB) под рукой при анализе дампа.

Существует много информации о том, как много говорить в этом ответе, но ваш лучший выбор - поиск «windbg sos».

Что касается примера вы дали

типСобытия clr20r3. .exe P2 2010.1.0.0, p3 4B857AFD P4 BLAH BLAH system.invalidoperation, P10 NIL.

это может быть что-то другое, но для меня это выглядит как неперехваченное исключение в приложении .NET - в этом случае исключение System.InvalidOperationException.

Если вы можете получить мини-накопитель разбитого приложения (посмотрите на инструмент ADPlus, который является частью инструментов отладки, чтобы получить дамп «по требованию» или «on event»), тогда вы можете загрузить его в WinDBG и используйте расширения SOS (команды! clrstack,! dumpstack,! threads и т. д.), чтобы понять, откуда взялось это неперехваченное исключение.

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

  • Нет связанных вопросов^_^