Устранение неполадок, связанных с ASP.NET в WinDbg и расширение SOS

ВНИМАНИЕ! Данная статья переведена с использованием программного обеспечения Майкрософт для машинного перевода и, возможно, отредактирована посредством технологии Community Translation Framework (CTF). Корпорация Майкрософт предлагает вам статьи, обработанные средствами машинного перевода, отредактированные членами сообщества Майкрософт и переведенные профессиональными переводчиками, чтобы вы могли ознакомиться со всеми статьями нашей базы знаний на нескольких языках. Статьи, переведенные с использованием средств машинного перевода и отредактированные сообществом, могут содержать смысловое, синтаксические и (или) грамматические ошибки. Корпорация Майкрософт не несет ответственности за любые неточности, ошибки или ущерб, вызванные неправильным переводом контента или его использованием нашими клиентами. Подробнее об CTF можно узнать по адресу http://support.microsoft.com/gp/machine-translation-corrections/ru.

Эта статья на английском языке: 892277
ASP .NET поддержки августовский выпуск

Устранение неполадок, связанных с ASP.NET в WinDbg и расширение SOS

Для настройки данного столбца в соответствии с потребностями, мы хотим пригласить вас Отправьте ваши идеи тем, интересующих вас и проблемы, которые вы хотите увидеть в будущем адресовать статьи базы знаний и поддержка голосовой связи столбцов. Можно отправлять свои идеи и с помощью обратной связи Попросите его форма. Имеется также ссылка на форму в нижней части этого столбца.
Снова Привет и Добро пожаловать в выпуск января 2005 г. поддержка. Опять же я бы хотел поблагодарить Джим как Чеширский, инженер технической поддержки корпорации Майкрософт, поддерживающие [ASP.NET, за его вклад. Джим имеет отличные идеи для столбца поддержка голосовой и хотел, чтобы продолжить их совместного использования. Взносы парикмахерской в прошлом месяце и на следующий месяц или около того и как всегда, присылайте нам ваши предложения для будущих столбцов. Джим Спасибо!

Джим работает с Microsoft в течение шести лет в группах FrontPage, VB и ASP.NET. В это время он написал для центра разработчиков Office на MSDN, и он является автором книги по FrontPage, специальный выпуск с помощью Microsoft Office FrontPage 2003. Джим также имеет веб-узел которой он предоставляет бесплатных надстроек для FrontPage позволяет веб-разработчикам сделать с продуктами корпорации Майкрософт. Вот этот адрес веб-узла. Поэтому Пожалуйста, выдвинуть кресло, начнем обувь и прочитайте нашей статьи об устранении ASP.NET и помните, что можно отправлять свои идеи для нас с помощью ссылки «СПРОСИТЕ для ИТ», включенные в каждый столбец, мы публикации.
Джереми

Устранение неполадок, связанных с ASP.NET в WinDbg и расширение SOS


Хороший стиль разработки будет планировать любые непредвиденные случаи. Естественно часть планирования, разрабатывает некоторых надежных процедур обработки исключений. Многие разработчики ASP.NET будет обрабатывать исключения, предоставление пользователю привлекательное веб-страницы и затем регистрации сведения об исключении для анализа позднее в файле.

Сценарий:

Разработаны и протестированы новое приложение ASP.NET, журналы исключений в файл журнала. Развертывание сборок и страницы ASPX на производственном веб-сервере. Когда люди используют приложения, они видят страницу ошибки, но без регистрации исключения записываются в файлы журнала. Можно также заметить, что многие события ASP.NET в журнале приложений окна просмотра событий, о том, что Aspnet_wp.exe неожиданного.

Это общий тип проблемы, мы видим в поддержки разработчиков, и большая часть наших клиентов действительно не знаем как подходить к ее устранения. Что еще хуже является ужасная «Приложение сервера недоступно» сообщение об ошибке. В этом месяце я покажу способы устранения подобных проблем с средства отладки для Windows.

Отказ от ответственности: При вызове поддержки разработчиков корпорации Майкрософт, мы часто могут попросить отправить нам файл дампа зависает или файла аварийной копии памяти. Анализ файла дампа памяти в этой статье будет достаточно легко и быстро. Во многих случаях причины проблемы не очевидно, и он может занять несколько часов анализа для получения на основную причину. Не позволяйте удобство и прямой forwardness этого анализа файла дампа мошеннических действий в думать, что они являются все настолько просто. Большинство, на самом деле не!

Подготовка

Прежде чем начать, необходимо установить средства отладки для Windows. Даже при наличии установленной копии, убедитесь, что установлена последняя версия, поскольку мы будем использовать расширение для отладки, управляемого состав только самую последнюю версию средства отладки для Windows.

Средства отладки для Windows можно загрузить с веб-узла корпорации Майкрософт: При установке средств отладки для Windows, может потребоваться выполнить выборочную установку в папку C:\Debuggers. Мы будет работать под управлением средства из командной строки, а если путь короткий, он поможет упростить это так для вас. После завершения установки необходимо загрузить образец страницы ASP.NET, произойдет сбой рабочего процесса. Обратите внимание на то, чтобы иметь возможность создать файл дампа памяти с помощью этой страницы, необходимо работать под управлением ASP.NET 1.1 Пакет обновления 1 (SP1) установлен. Без пакета обновления 1 Эта страница будет выполняться без возникновения сбоя.

Необходимо также настроить путь к символам для WinDbg. Символы не являются обязательными для разрешения имени функции в управляемых сборок, но потребуется символы для разрешения функции в машинном коде. Чтобы задать путь к символам в WinDbg:
  1. Откройте WinDbg. Нажмите кнопку Пуск, выделите пунктВсе программыи нажмите кнопку средства отладки для Windows.
  2. В меню файл щелкните Путь SymbolFile.
  3. В диалоговом окне Путь к символам введите путь к символам экран:
    SRV * c:\symbols*. http://msdl.microsoft.com/download/symbols
  4. Закрыть WinDbg, а затем введите Да в ответ на приглашение сохранить сведения о базовой рабочей области.
Теперь вы готовы для создания файла аварийной копии памяти.

Создание файла аварийной копии памяти

В этом пошаговом руководстве кнопки на странице примера приведет к сбою рабочего процесса ASP.NET. Во многих случаях не знать точные шаги для создания сбоя. На самом деле может произойти сбой производственного приложения через некоторое время случайных. Как вы скоро увидите, не важно, происходит сбой предсказуемо или случайным образом. Создание файла дампа довольно просто с помощью Adplus файл VBScript, который автоматизирует весь процесс.

Чтобы создать файл дампа памяти, необходимо сначала перейдите на страницу образца. (Не нажимайте кнопку!) После страницы успешно доставлено, вы знаете, запускается процесс Aspnet_wp.exe (или W3wp.exe процесса в Windows Server 2003). Теперь можно присоединить отладчик к рабочему процессу, таким образом, можно сохранить файл дампа памяти при сбоях.

Чтобы создать файл дампа:
  1. Откройте новую командную строку на веб-сервере и thenchange каталог, где установлены средства отладки для Windows.
  2. Выполните следующую команду:
    Cscript adplus.vbs-crash -o c:\crashdump - pn aspnet_wp.exe
    Если вы используете Microsoft Windows Server 2003, выполните команду экран:
    Cscript adplus.vbs-c:\crashdump -o - pn w3wp.exe аварийно завершить работу
Я не буду углубляться в очень подробно на Adplus.vbs здесь, но если вы хотите Дополнительные сведения, можно просмотреть следующие статьи базы знаний Майкрософт:
286350 Использование средства ADPlus устранения «зависаний» и «зависает»
После выполнения этой команды появится несколько диалоговых окон. Нажмите кнопку ОК в каждом диалоговом окне. Теперь вы увидите кнопку на панели задач, чтобы отладчик CDB, имя приложения для отладчика. Тем не менее он может отличаться в окне.

Примечание На консоли на веб-сервере должен быть при запуске Adplus в режиме сбоя. Невозможно удаленно запустить средство Adplus в режиме сбоя.

Теперь вы готовы создать сбой! Нажмите кнопку на странице сбой рабочего процесса. Если JIT-отладка включена в Visual Studio .NET по, диалоговое окно будет отображаться позволить вам знать, что произошло исключение, но присоединенному отладчику не удалось обработать его. Если нет JIT-отладка включена, будут создавать файл дампа не будут отображаться диалоговые окна. В любом случае после просмотра исчезает из панели задач кнопки CDB , файл дампа закончена, и вы готовы перейти к следующему шагу.

Извлечение файла дампа

  1. Запустите WinDbg.
  2. В меню файл выберите Открыть аварийный дамп для открытия файла дампа памяти. (Не нажимайте кнопку Открытьна панели инструментов.)
  3. Перейдите к папке C:\Crashdump. В том, что папка, вы willsee другую папку с длинным именем, начинается с Crash_Mode_Date. Adplussaved дамп файлы в этой папке. (Должен быть несколько выгруженных файлов в папке.) Файл дампа, которую требуется открыть в WinDbg является файл дампа 2ndchance исключение. Должно быть очевидно, имя файла whichdump файлом является файл дампа исключения второй шанс.
После открытия файла дампа WinDbg начнется загрузка символов. В зависимости от скорости подключения к Интернету этот процесс может занять несколько минут. После завершения появится в командной строке отображаются в WinDbg, как показано на следующем рисунке.
 Окно WinDBg
Рисунок 1: WinDbg - "0:000 настроек" в командной строке указывает, что текущий поток, поток 0.

Можно просмотреть этот стек, введя в командной строке команду KB . Вот вывод дампа:
0:000> kbChildEBP RetAddr  Args to Child              00771018 791b6173 00000643 00000000 00b59bc0 mscorwks!_EH_prolog+0x200771928 791b60c0 00771a04 00000000 00000000 mscorwks!EEClass::DoRunClassInit+0xbe0077193c 791d75a7 00771a04 00771a50 00b59bc0 mscorwks!MethodTable::CheckRunClassInit+0x1d00771a14 791d7746 00000000 0086fb88 00771a50 mscorwks!MethodDesc::DoPrestub+0x28e00771a2c 00a92f76 00771a50 0180f154 00ee5cd4 mscorwks!PreStubWorker+0x42WARNING: Frame IP not in any known module. Following frames may be wrong.00773a38 0337f2bc 00f8463c 00eb593c 00ee5cc8 0xa92f7600773a64 031cd7e4 00eb593c 0180ea7c 00f84560 0x337f2bc00773aac 033a3299 00000000 00eb593c 0180ea7c 0x31cd7e400773b50 033a3031 00000001 00000000 0180e238 0x33a329900773bec 0332ee47 00edb274 0180df00 00f8463c 0x33a303100773c28 0332e71b 0180df00 033a35c5 0180d870 0x332ee4700773cc4 033a3031 00000001 00000000 0180d2b4 0x332e71b00773d60 0332ee47 00edb274 0180cf7c 00f8463c 0x33a303100773d9c 0332e71b 0180cf7c 033a35c5 0180c8ec 0x332ee4700773e38 033a3031 00000001 00000000 0180c330 0x332e71b00773ed4 0332ee47 00edb274 0180bff8 00f8463c 0x33a303100773f10 0332e71b 0180bff8 033a35c5 0180b968 0x332ee4700773fac 033a3031 00000001 00000000 0180b3ac 0x332e71b00774048 0332ee47 00edb274 0180b074 00f8463c 0x33a303100774084 0332e71b 0180b074 033a35c5 0180a9e4 0x332ee47


Примечание Если выполняется на многопроцессорной системе (или системы с многопоточной), вы увидите вызовы функции в mscorsvr вместо библиотеки mscorwks.

Имена функций в Mscorwks.dll можно увидеть, поскольку WinDbg загрузить символы для библиотеки mscorwks. Тем не менее следующие вызовы библиотеки mscorwks см не имена модулей и не имена функций. Это управляемый код (код, который выполняется в среде CLR) выглядит в WinDbg по умолчанию, и не очевидно, что полезные выходных данных. Чтобы узнать, что случилось в управляемом коде, необходимо использовать расширение SOS для WinDbg.

Расширение SOS

SOS является расширением для WinDbg, предназначенное для отладки управляемого кода. SOS добавляет много команд WinDbg, все из которых находятся в фокусе отладки управляемых приложений и многие зависят от ASP.NET. DLL-файл, называемый Sos.dll имеет расширение и находится в папке Clr10 в папке установки средства отладки для Windows.

Чтобы загрузить расширение SOS введите следующую команду в командной строке WinDbg:
.Load clr10\sos
Не пропустите точку в начале команды! Если все сделано правильно, вы будете перенаправлены обратно в командную строку. Если возникает ошибка, убедитесь, что последнюю версию средства отладки для Windows установлен.

Мы обсудим некоторые из команд SOS для отладки файла аварийной копии памяти, но вы можете изучить другие команды SOS режиме. Можно использовать ! help команду, чтобы получить список команд и краткое описание каждого из них.

Изучение причины

Теперь, после загрузки SOS, давайте взглянем на некоторые из команд, которые могут быть полезны при устранении неполадок файла аварийной копии памяти.

Давайте взглянем на управляемого стека для текущего потока, поток 0. Мы сделаем это с помощью ! clrstack команды. Тип ! clrstack в командной строке. WinDbg начинается формирование дампа стека. Обычный стека следует дампа полностью через несколько секунд. В этом случае вывод кажется перейти навсегда. Продолжим и нажмите клавиши CTRL + BREAK (или нажмите кнопку Прервать в меню отладкив WinDbg) и рассмотрим его. Ниже приведен фрагмент стека.
Void System.Web.HttpServerUtility.ExecuteInternal(String,Class System.IO.TextWriter,Boolean)Void System.Web.HttpServerUtility.Transfer(String,Boolean)Void ASP.crash_aspx.btnCrash_Click(Object,Class System.EventArgs)Void System.Web.UI.WebControls.Button.OnClick(Class System.EventArgs)Void System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String)Void System.Web.UI.Page.RaisePostBackEvent(Class System.Web.UI.IPostBackEventHandler,String)Void System.Web.UI.Page.RaisePostBackEvent(Class System.Collections.Specialized.NameValueCollection)Void System.Web.UI.Page.ProcessRequestMain()Void System.Web.UI.Page.ProcessRequest()Void System.Web.UI.Page.ProcessRequest(Class System.Web.HttpContext)Void System.Web.HttpServerUtility.ExecuteInternal(String,Class System.IO.TextWriter,Boolean)Void System.Web.HttpServerUtility.Transfer(String,Boolean)Void ASP.crash_aspx.btnCrash_Click(Object,Class System.EventArgs)Void System.Web.UI.WebControls.Button.OnClick(Class System.EventArgs)Void System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String)Void System.Web.UI.Page.RaisePostBackEvent(Class System.Web.UI.IPostBackEventHandler,String)Void System.Web.UI.Page.RaisePostBackEvent(Class System.Collections.Specialized.NameValueCollection)Void System.Web.UI.Page.ProcessRequestMain()Void System.Web.UI.Page.ProcessRequest()Void System.Web.UI.Page.ProcessRequest(Class System.Web.HttpContext
Если внимательно, вы увидите здесь шаблон. Мы начинаем обработку запроса и обратный вызов. Затем запускается событие OnClick для кнопки. Результаты в Server.Transfer. Server.Transfer кажется весь процесс все начинать. В этом случае каждый раз, когда выполняется этот цикл объектов помещается в стек. В конце концов системе не хватает места стека и возникает StackOverflowException.

Чтобы выяснить, что произошло здесь, можно получить более подробные данные из стека, запустив ! clrstack -s команды. Это дает полный стек. Вот некоторые из выходного файла. Для полного вывода из этой команды Создание файла дампа памяти с помощью образца страницы и затем выполнить команду. Мне было изменено его здесь из-за очень подробный вывод.
0:000> !clrstack -sThread 0System.Web.HttpServerUtility.ExecuteInternal(String,Class System.IO.TextWriter,Boolean)    ESP/REG  Object   Name    00773ac4 0180e7f4 System.EventArgs    00773ac8 00f86c14 System.Web.HttpServerUtility    00773acc 0180e238 System.Web.UI.WebControls.Button    00773ad0 0180eac0 System.Object[]    00773ad4 0180ea7c System.String    /crash.aspx    00773ad8 00eb593c System.String    c:\inetpub\wwwroot\crash.aspx    00773ae4 00f84754 System.Web.HttpResponse    00773ae8 00f846bc System.Web.HttpRequest    00773b00 00f86bec System.String    crash.aspx    00773b04 00f86c14 System.Web.HttpServerUtility    00773b2c 00eef57c System.String    btnCrash    00773b34 00eef57c System.String    btnCrash 00773b38 0180e2e4 System.Collections.Specialized.ListDictionary/DictionaryNode    00773b44 00f797d8 System.String    CausesValidation    00773b4c 0180e2e4 System.Collections.Specialized.ListDictionary/DictionaryNode00773b60  033a3031 [DEFAULT] [hasThis] Void System.Web.HttpServerUtility.Transfer(String,Boolean)    ESP/REG  Object   Name    00773b60 0180e238 System.Web.UI.WebControls.Button00773b6c  03360398 [DEFAULT] [hasThis] Void ASP.crash_aspx.btnCrash_Click(Object,Class System.EventArgs)    ESP/REG  Object   Name    00773b70 0180e7f4 System.EventArgs00773b74  033a2fc5 [DEFAULT] [hasThis] Void System.Web.UI.WebControls.Button.OnClick(Class System.EventArgs)    ESP/REG  Object   Name    00773b74 0180df00 ASP.crash_aspx    00773b78 0180e238 System.Web.UI.WebControls.Button    00773b7c 00f8601c System.Web.HttpValueCollection    00773b80 0180e314 System.ComponentModel.EventHandlerList00773b88  033a2da2 [DEFAULT] [hasThis] Void System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String)
Можно сказать, из этого вывода, вызов Server.Transfer передается как параметр crash.aspx. Как можно узнать? Один указывает, что страницу, которая выполняется после вызова crash.aspx. Тем не менее также можно определить, просмотрев объект HttpRequest.

Давайте взглянем на, чтобы увидеть, что было передано из этого запроса можно увидеть объект HttpRequest в этом стеке. Мы сделаем это, используя команду дампа объекта ! вы. Эта команда принимает один параметр: адрес объекта для помещения в дамп. В результатах предыдущего адрес является второе шестнадцатеричное число в выходных данных.

Вот вывода объекта HttpRequest. Этот вывод для краткости измененный.
0:000> !do 00f846bc Name: System.Web.HttpRequestMethodTable 0x03089170EEClass 0x02e9a1ccSize 152(0x98) bytesmdToken: 02000072  (c:\windows\assembly\gac\system.web\1.0.5000.0__b03f5f7f11d50a3a\system.web.dll)FieldDesc*: 030888b0      MT    Field   Offset                 Type       Attr    Value Name03089170  4000626       14                CLASS   instance 00f8457c _path03089170  4000627       8c       System.Boolean   instance 0 _computePathInfo03089170  4000628       18                CLASS   instance 00f8457c _filePath03089170  400062e       2c                CLASS   instance 00f845a4 _pathTranslated03089170  400062f       30                CLASS   instance 00e6703c _baseVirtualDir03089170  4000630       34                CLASS   instance 00edce64 _contentType03089170  4000631       88         System.Int32   instance 85 _contentLength03089170  400063c       60                CLASS   instance 00f8601c _form
В эти выходные данные можно просмотреть объект _filePath. Если дамп, при помощи ! сделать команду, вы увидите, что это строка, содержащая "/ crash.aspx". Это подтверждает, что рекурсия вызвана crash.aspx загрузка рекурсивно. Почему, происходит хотя? Давайте углубленному анализу.

Взглянуть на результаты ! clrstack. Если вы посмотрите внимательно, вы увидите, что событие Click для кнопки активируется каждый раз при загрузке страницы. Это говорит о том, что в каждой обратной передачи состояния, время загрузки страницы. Можно также определить из стека, Server.Transfer вызывается, событие Click . Таким образом чтобы запретить сбой при загрузке этой страницы ASP.NET, необходимо запретить это каждый раз, когда страница загружается из-за Server.Transfer выполняется обратная передача.

Примечание Если вы Server.Transfer в ASP.NET Framework 1.1 с SP1 установлен и сохранять данные формы, всегда вызывает данную проблему. Для получения дополнительных сведений щелкните следующий номер статьи базы знаний Майкрософт:
839521 Исправление: Метод Server.Transfer вызовет переполнение стека и рабочий процесс ASP.NET перестает отвечать на запросы
Server.Transfer метод с двумя параметрами; Во-первых, URL-адрес, к которому следует перенести выполнение, а второй — логическое значение, указывающее ли данные формы должны быть сохранены. Что произойдет, если мы сохранить данные формы? Во-первых, ASP.NET будет рассматривать обратной передачи. Таким образом, можно остановить этот сбой, второй параметр в вызове Server.Transfer значение false.

Подводя итоги

В данной статье представлен краткий пример того, как можно использовать WinDbg и SOS для отладки приложений ASP.NET. Эта статья была для ознакомления с некоторыми основными понятиями и терминологией при отладке в пользовательском режиме. Это другой навыков чем отладку исходного кода, и получение хорошо она требует значительных затрат времени инвестиции. Это навык, полученные опыт.
Дополнительные возможности рекомендуется загрузить приложение ASP.NET при разработке или в тестовой среде и захватить некоторые файлы дампа зависает в разное время. Для этого выполняется Adplus в режиме зависания, используя следующую команду:
Cscript adplus.vbs-зависание -o c:\aspnet_dump - pn aspnet_wp.exe

Эта команда будет немедленно дамп процесса aspnet_wp.exe и создать файл дампа памяти в папке C:\Aspnet_dump. Файл дампа зависает подобных запускается из удаленного подключения.

Корпорации Майкрософт группа шаблонов и практических рекомендаций (PAG) также внес некоторые превосходной и подробные статьи по отладке приложений .NET с помощью WinDbg. Посетите следующий веб-узел корпорации Майкрософт для просмотра этих статей: В самом деле одной из моих целей в написании этой статьи было предоставить вам необходимо воспользоваться прекрасным статей, которые предоставила PAG foundation. Я настоятельно советую их использования.
Встретимся здесь обратно в следующем месяце, когда я расскажут как использовать WinDbg и расширение SOS анализировать файлы аварийного дампа. До следующей встречи

Как Чеширский Джим
Инженер службы поддержки
Поддержка разработчиков Майкрософт

Всегда, не стесняйтесь отправить идеи по разделам требуется в дальнейшем адресована столбцов или с помощью базы знаний Попросите его форма.

Внимание! Эта статья переведена автоматически

Свойства

Номер статьи: 892277 — последний просмотр: 01/09/2016 08:19:00 — редакция: 6.0

Microsoft ASP.NET 1.1, Microsoft ASP.NET 1.0

  • kbhowto kbasp kbmt KB892277 KbMtru
Отзывы и предложения