How to enable Just In Time Debugger in Visual Studio 2017?
I haven’t Just-In-Time in Options:
I found to solve this with options of Internet :
But when I’m rebuilding solution I get this exception:
How to solve this issue?
1 Answer 1
How to enable Just In Time Debugger in Visual Studio 2017?
First, please make sure you have installed the component Just-In-Time debugger in the installer:
Then restart your Visual Studio, you will get that Just-In-Time in Options.
If you still have issue after install the component Just-In-Time debugger, you can try to update your Visual Studio to latest version.
This also could have happened when installing VS2017 on a machine that once had a previous version of VS installed (the JIT debugger does not uninstall with VS for backward compatibility reasons).
To work around these issues until the fixes are released, run repair to register the JIT debugger (assuming it was selected to be installed) or uninstall and reinstall making sure to select the JIT debugger.
Once VS2017 is repaired/installed, start VS as administrator and go to the JIT options page. Check all checkboxes and click OK.
Jit отладчик visual studio что это
JIT-отладка автоматически запускает Visual Studio при возникновении ошибок или сбоев в приложении, запущенном вне Visual Studio. С помощью JIT-отладки можно тестировать приложения за пределами Visual Studio и открыть Visual Studio, чтобы начать отладку в случае проблемы.
JIT-отладка работает для классических приложений Windows. Она не работает для универсальных приложений Windows или управляемого кода, размещенного в приложении машинного кода, например для визуализаторов.
[!TIP] Если вы просто хотите запретить отображение диалогового окна JIT-отладчика, но у вас не установлена Visual Studio, см. раздел Отключение JIT-отладчика. Если набор средств Visual Studio был ранее установлен, но теперь его нет, придется отключить JIT-отладку через реестр Windows.
Включение или отключение JIT-отладки в Visual Studio
[!NOTE] Чтобы включить или отключить JIT-отладку, необходимо запустить Visual Studio от имени администратора. Включение или отключение JIT-отладки устанавливает раздел реестра. Для его изменения требуются права администратора. Откройте Visual Studio с правами администратора, щелкнув приложение Visual Studio правой кнопкой мыши и выбрав Запуск от имени администратора.
JIT-отладку можно настроить в диалоговом окне Visual Studio Сервис > Параметры (или Отладка > Параметры).
Включение или отключение JIT–отладки
В меню Сервис или Отладка выберите Параметры > Отладка > JIT.
В поле Включить JIT-отладку для этих типов кода выберите типы кода, которым требуется JIT-отладка: Управляемый, Собственный и (или) Скрипт.
Нажмите кнопку ОК.
Если вы включили JIT-отладчик, но он не открывается при сбоях или ошибках приложения, см. раздел Устранение неполадок с JIT-отладкой.
Отключение JIT-отладки из реестра Windows
JIT-отладка может оставаться включенной даже после удаления Visual Studio с компьютера. Если Visual Studio больше не установлена, JIT-отладку можно отключить, отредактировав реестр Windows.
Отключение JIT-отладки путем редактирования реестра
В меню Windows Пуск запустите редактор реестра (regedit.exe).
В окне редактора реестра для компьютеров с 64-разрядной версией ОС найдите и удалите следующие записи реестра:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\DbgManagedDebugger
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger
. image type=»content» source=»../debugger/media/dbg-jit-registry.png» alt-text=»Раздел реестра JIT» border=»true».
Если имеются указанные ниже записи реестра или на компьютере установлена 32-разрядная версия операционной системы, удалите следующие записи:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\DbgManagedDebugger
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger
Будьте внимательны, чтобы не удалить или не изменить другие разделы реестра.
Закройте окно Редактор реестра.
Включение JIT-отладки для приложений Windows Forms
По умолчанию в приложениях Windows Forms есть обработчик исключений верхнего уровня, который позволяет приложению продолжить работу, если оно может быть восстановлено. Если приложение Windows Forms выдает необработанное исключение, отображается следующее диалоговое окно:
Чтобы включить JIT-отладку вместо стандартной обработки ошибок Windows Forms, добавьте следующие параметры.
В разделе system.windows.forms файла machine.config или <app name>.exe.config установите для параметра jitDebugging значение true :
Для приложений Windows Forms, написанных на языке C++, в файле CONFIG или коде также задайте для параметра DebuggableAttribute значение true . Если компиляция выполняется с атрибутом /Zi, но без /Og, компилятор автоматически задаст этот атрибут. Однако если требуется выполнить отладку неоптимизированной сборки выпуска, то необходимо задать DebuggableAttribute , добавив следующую строку в файл AssemblyInfo.cpp приложения:
Для получения дополнительной информации см. xref:System.Diagnostics.DebuggableAttribute.
В этом примере рассматривается JIT-отладка, когда приложение выдает ошибку.
Для выполнения инструкций необходимо установить Visual Studio. Если у вас нет Visual Studio, вы можете скачать бесплатный выпуск Visual Studio Community.
Убедитесь, что JIT-отладка включена в разделе Сервис > Параметры > Отладка > JIT.
В этом примере вы создадите консольное приложение C# в Visual Studio, которое создает исключение NullReferenceException.
В Visual Studio создайте консольное приложение C# (Файл > Создать > Проект > Visual C# > Консольное приложение) с именем ThrowsNullException. Сведения о создании проектов в Visual Studio см. в разделе Пошаговое руководство. Создание простого приложения.
Когда проект откроется в Visual Studio, откройте файл Program.cs. Замените метод Main() следующим кодом, который выводит строку на консоль, а затем создает исключение NullReferenceException:
Чтобы выполнить сборку решения, выберите конфигурацию Отладка (по умолчанию) или Выпуск, а затем нажмите Сборка > Перестроить решение.
- Выберите конфигурацию Отладка для полной отладки.
- Если выбрана конфигурация Выпуск, необходимо отключить функцию Только мой код. В разделе Сервис > Параметры > Отладка снимите флажок Включить только мой код.
Дополнительные сведения о конфигурациях сборки см. в разделе Общие сведения о конфигурациях сборки.
Откройте созданное приложение ThrowsNullException.exe в папке проекта C# ( . \ThrowsNullException\ThrowsNullException\bin\Debug или . \ThrowsNullException\ThrowsNullException\bin\Release).
Вы увидите следующее окно команд:
Откроется диалоговое окно Выбор JIT-отладчика.
В разделе Доступные отладчики выберите параметр Новый экземпляр <your preferred Visual Studio version/edition> , если он еще не выбран.
Нажмите кнопку ОК.
Проект ThrowsNullException открывается в новом экземпляре Visual Studio, а выполнение остановлено в строке, вызвавшей исключение:
Теперь можно начать отладку. При отладке реального приложения необходимо выяснить, почему код создает исключение.
[!CAUTION] Если приложение содержит ненадежный код, появляется диалоговое окно предупреждения системы безопасности, позволяющее решить, следует ли продолжить отладку. Перед продолжением отладки решите, доверяете ли вы данному коду. Этот код написан вами самостоятельно? Если приложение выполняется на удаленном компьютере, узнаете ли вы имя процесса? Если приложение выполняется локально, учитывайте возможность выполнения такого вредоносного кода на вашем компьютере. Если вы решили, что код заслуживает доверия, нажмите ОК. В противном случае нажмите кнопку Отмена.
Устранение неполадок с JIT-отладкой
Если JIT-отладка не запускается при сбое приложения, даже если она включена в Visual Studio:
Отчеты об ошибках Windows могут взять на себя обработку ошибок на компьютере.
Чтобы устранить эту проблему, используйте редактор реестра, чтобы добавить значение DWORD Отключено с параметром Данные значения, равным 1, для следующих разделов реестра:
HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Windows\Windows Error Reporting
(Для компьютеров с 32-разрядной версией ОС) HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Windows Error Reporting
Дополнительные сведения см. в разделе Параметры .WER.
Известная проблема Windows может привести к сбою JIT-отладчика.
Исправление состоит в том, чтобы добавить значение DWORD из раздела Видимые с параметром Значение данных, равным 1, в следующие разделы реестра.
HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug
(Для компьютеров с 32-разрядной версией ОС) HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug
Во время JIT-отладки могут отображаться следующие сообщения об ошибках.
Не удалось подключиться к аварийному процессу. Указанная программа не является программой Windows или MS–DOS.
Отладчик попытался подключиться к процессу, выполняющемуся под именем другого пользователя.
Чтобы обойти эту проблему, запустите Visual Studio, откройте диалоговое окно Отладка > Присоединение к процессу (или нажмите сочетание клавиш CTRL + ALT + P) и найдите процесс, для которого требуется выполнить отладку, в списке Доступные процессы. Если имя процесса неизвестно, найдите идентификатор процесса в диалоговом окне JIT-отладчик Visual Studio. Выберите процесс в списке Доступные процессы и щелкните Присоединить. Выберите Нет, чтобы закрыть диалоговое окно JIT-отладчика.
Не удалось запустить отладчик, так как пользователь не вошел в систему.
В консоли нет пользователей, выполнивших вход, а также отсутствует сеанс пользователя, в котором следовало бы отображать диалоговое окно JIT-отладки.
Для решения этой проблемы необходимо войти в компьютер.
Класс не зарегистрирован.
Отладчик пытался создать класс COM, который не зарегистрирован, вероятно, из-за проблем с установкой.
Чтобы решить эту проблему, используйте Visual Studio Installer для переустановки или исправления установки Visual Studio.
Отладочные инструменты .NET разработчика
От переводчика: я наткнулся на эту статью случайно, когда искал информацию по управлению загрузкой символов во время отладки. И хотя по этому вопросу информации было не так много, я с удовольствием прочитал всю статью. Большая часть были мне известна и до этого, но не всё. Уверен, что многие найдут в ней для себя что-то полезное. Статья написана полтора года назад, однако не все переходят на новые версии студии и сопутствующих инструментов сразу после их появления, так что актуальности статья не потеряла.
Баги встречаются на двух этапах жизненного цикла кода: во время разработки и в продакшене. Часто ошибки, которые вылезают в течение 10-15 минут с момента написания кода, мы даже не считаем за баги – они просто часть процесса написания кода. А багами мы гораздо чаще называем проблемы, которые проявляются в продакшене или при тестировании кода, написанного несколько дней назад; вероятно потому, что их сложнее отловить (код уже успел подзабыться). В любом случае, если код не делает того, что должен, это баг и его нужно отловить и исправить.
4 столпа эффективной отладки
- Правильные инструменты. Это то, чему посвящена статья. Но инструменты бесполезны без других трех.
- Использование практик построения архитектуры и кода, отдающих предпочтение слабо связанным объектам и написанию того, что я называю Совершенно Очевидный Код – СОК (Really Obvious Code – ROC rocks!). Эти практики помогают находить баги и избегать внесения изменений, лишь добавляющих новые. И никогда не поздно перечитать Brian W. Kernighan and P. J. Plauger’s «The Elements of Programming Style» (Computing Mcgraw-Hill, 1978).
- Использование TDD (разработки через тестирование). Если вы разрабатываете что-то кроме сильно связанного пользовательского интерфейса и не используете TDD – вы разработчик с одной рукой, связанной за спиной. Вы менее продуктивны, чем могли бы быть, и ваш код менее надежен, чем должен быть.
- Методика отладки. Многие разработчики сразу переходят к шагу «разработка решения», что в результате редко приводит к исправлению бага, зато часто создает новые.
- Опишите баг. Соберите всю информацию для полного описания симптомов бага, акцентируя внимание на том, когда симптомы проявляются, а когда – нет.
- Зафиксируйте баг. Опишите последовательность действий, которая всегда приводит к появлению бага. Так вы убедитесь, что правильно определили условия, приводящие к появлению симптомов бага. Проверьте, что симптомы не проявляются при других условиях.
- Локализуйте баг. Убедитесь, что вы можете описать, в чем именно истинная причина появления бага и что описание соотносится с шагами 1 и 2.
- Разработайте и примените решение. Определите, боретесь ли вы с истинной причиной бага или с его симптомами. Напишите код.
- Проверьте решение. Проверьте, что симптомы больше не проявляются при выполнении действий, описанных в шаге 2.
- Проведите регрессионное тестирование. Проверьте, что не появилось новых багов.
- Примените изменения. Перенесите изменения в продакшен.
Использование точек останова
Многие разработчики не знают всех возможностей отладки в Visual Studio, потому что отладка «и так работает». Например, хотя каждый VS-разработчик знаком с точками останова, многие не знают, что можно сделать в окне Breakpoints.
Чтобы открыть окно Breakpoins, выберите Debug | Windows | Breakpoints; в окне отобразится список всех установленных вами точек останова. Если вы не уверены, какая точка какой строке кода соответствует, просто кликните по ней двойным кликом и в редакторе откроется связанный с ней код.
Определившись с нужной точкой, вы можете управлять тем, что происходит, когда она срабатывает. Я видел разработчиков, которые проверяют одни и те же переменные раз за разом, поставив точку останова в цикле. По правому клику на точке останова, выбрав When Hit (условие срабатывания), вы можете задать сообщение, которое выводится в окно Intermediate при каждом ее срабатывании. В сообщение можно включать некоторые константы: например, используя $Caller, можно вывести имя метода, вызвавшего код, содержащий точку останова. Также можно включить любые переменные, заключив их в фигурные скобки: например, в сообщении выведет значение поля Text.
Другая возможность диалога When Hit позволяет задавать, должно ли останавливаться выполнение программы на точке останова. Если выбрать остановку, то вы увидите каждое сообщение в момент его создания; в противном случае вы сможете просмотреть все сообщения после выполнения программы.
Если вы хотите остановить выполнение только при определенном условии, вы можете выбрать опции Condition или Hit Count. Опция Condition позволяет задать логическое условие, при котором произойдет остановка (например, Position > 30). Также можно выполнить остановку, если одна из переменных изменилась с момента последней остановки. Опция Hit Count прерывает выполнение только если точка останова сработала в n-й раз (или каждые n раз). Это особенно полезно, когда вам нужно остановиться где-то в конце цикла.
Между прочим, мой опыт говорит, что если в какой-то части приложения возникли проблемы, они продолжат там возникать. Если ваш опыт говорит о том же, вам понравятся дополнительные возможности Visual Studio 2010. Вы можете дать точкам останова названия, чтобы не забыть, для чего нужна каждая из них, и экспортировать их в XML-файл. В следующий раз, когда они вам понадобятся, вы можете импортировать их и начать отладку. Импорт/экспорт можно сделать с помощью тулбара вверху окна Breakpoints.
Показ и пропуск кода
Мне нравится генерирование кода (я написал книгу по тому, как это делать в .NET). Но хождение по коду, сгенерированному студией и фрэймворком, как правило не дает мне ничего полезного. А раз это не помогает найти проблему, значит делает процесс отладки менее продуктивным и лучше этого избежать.
В любой версии Visual Studio, в пункте Debug | General диалога настроек вы можете выбрать опцию Just My Code и перестать видеть код, который вы не писали. Если впоследствии вам понадобится это отключить (например, если где-то в сгенерированном коде возникает исключение), вы можете это сделать, выбрав Options and Settings в меню Debug (этот пункт есть только в VS2010 – прим. перев).
Если же вы устали ходить по какой-то части вашего кода, вы можете использовать один из двух атрибутов. Поставьте на метод атрибут DebuggerHidden и вы никогда не попадете в этот метод. Если же поставить атрибут DebuggerNonUserCode , вы не будете в него попадать при включенной опции Just My Code и будете при выключенной. Я рекомендую вам использовать второй способ.
С другой стороны, если ошибка возникает где-то в коде Microsoft .NET Framework, вам может понадобится пройти не только по сгенерированному коду, но и по коду классов фрэймворка. И вы можете это сделать! Во-первых, убедитесь, что отключена опция Just My Code. Затем в диалоге Options and Settings в разделе Symbols выберите Microsoft Symbol Server (в VS 2010) или задайте путь к символам как referencesource.microsoft.com/symbols (в VS2008). Это позволит вам загрузить символы, которые поддерживают хождение по коду классов .NET. Однако вам еще нужно их загрузить. В VS2010 вы можете кликнуть кнопку Load All Symbols, но нужно набраться терпения на время скачивания.
Чтобы выбрать конкретную сборку (или если вы используете VS2008), в режиме остановки процесса отладки откройте окно Modules и в списке DLL, загруженных вашим приложением, кликните правым кликом на нужной DLL и выберите Load Modules, чтобы загрузить символы для этой DLL. Конечно, подождать всё равно придется, но уже не так долго.
Я один из тех, кто пишет в свойствах полезный код и хочет иметь возможность пошагово их отладить. Начиная с VS2008SP1, появилась опция (Step over properties and operators), выключающая пошаговую отладку свойств и операторов. И в VS2010 она по умолчанию включена, так что вам может понадобиться ее выключить.
Визуализация данных
Как ни странно, множество разработчиков не знакомы с визуализаторами данных в Visual Studio. Если в режиме остановки навести мышку на переменную, всплывет подсказка со значением этой переменной. Также может появиться значок с лупой – клик по нему откроет значение переменной в визуализаторе по умолчанию. Если рядом с иконкой появляется стрелка выпадающего списка, клик по стрелке покажет другие визуализаторы для этого типа данных. Например, для строковой переменной будут показаны текстовый, XML и HTML визуализаторы. Если вы храните в строке HTML, HTML-визуализатор позволит понять, как это будет выглядеть в браузере.
Визуализаторы вы можете также использовать в окнах Watch, Autos и Locals, но если вы смотрите какую-то переменную очень часто, вы можете нажать на канцелярскую кнопку в конце всплывающей подсказки, чтобы «пригвоздить» ее на этом месте. Тогда в следующий раз, когда вы будете просматривать эту часть кода, подсказка всплывет автоматически.
Кстати о подсказках – вы можете с их помощью менять значение переменной. В VS2010 даже более того: подсказку можно заставить висеть в окне, существовать всё время сеанса отладки, и даже после его окончания она будет отображать значение переменной из последнего сеанса. Однако, самые крутые инструменты (Debugger Canvas и IntelliTrace) доступны только в VS2010 Ultimate Edition.
Редактор в студии позволяет смотреть только на один участок кода в один момент времени. Но множество багов возникает в результате взаимодействия между разными частями кода. Debugger Canvas позволяет вам увидеть весь ваш код разом, перемещаясь между модулями и приближая нужную часть.
Когда срабатывает точка останова, вам нужно понять, как вы здесь оказались. Можно использовать окно Call Stack, но вы не увидите, что происходило на более ранних этапах (как вариант, можно поставить кучу точек останова и проходить их последовательно, отслеживая переменные).
Если Debugger Canvas позволяет смотреть «через модули», то IntelliTrace – «через время», что дает понимание того, как вы попали в данную точку останова. IntelliTrace собирает и показывает отладочную информацию, которая была доступна в предыдущие моменты времени сеанса отладки.
Еще лучше Debugger Canvas и IntelliTrace работают в связке: в Debugger Canvas есть опция, позволяющая видеть логи IntelliTrace рядом с кодом.
Внешние инструменты
Visual Studio – не единственный инструмент отладки, есть сколько угодно внешних и сторонних инструментов, которые вы можете добавить в копилку. Я здесь остановлюсь только на некоторых бесплатных.
Не все внешние инструменты сделаны сторонними производителями. Если вы пишете службы Windows, то знаете, что отлаживать их непростое занятие. Хотя вы и можете подключиться к ним для отладки, к этому времени код OnStart и инициализация уже выполнится. Если баг не дает сервису запуститься, вам остается только гадать, что же пошло не так, вместо того чтобы собрать информацию для описания проблемы.
В подобной ситуации вы можете настроить Just-in-Time (JIT) отладку и автозапуск – сеанс отладки начнется, когда служба запустится или когда возникнет ошибка. Но чтобы это сделать, вам нужно воспользоваться внешними инструментами.
Так как настройка JIT-отладки выходит за рамки данной статьи, вы можете обратиться к соответствующей статье в MSDN. Эта статья советует использовать Global Flags Editor (gflags.exe); на случай, если вы не можете его найти, описывается, как подправить реестр, чтобы включить JIT-отладку. Однако вам придется научиться пользоваться WinDbg.
- Windows Debugger (WinDbg.exe)
- SOS Debugging Extension (SOS.dll, которая может быть использована в консоли Visual Studio или с WinDbg.exe)
- Assemble Binding Log Viewer (Fuslogvw.exe, который я обсуждал в блоге .NET Tips)
Если вы не использовали раньше WinDbg, это не так страшно, как может показаться – WinDbg имеет GUI (в отличие от консольных инструментов типа NTSD, KD и CBD) и может загружать PDB-файлы с отладочными символами для вашего приложения (просто убедитесь, что вы скомпилировали ваше приложение в Debug-режиме и файл символов гарантированно подходит). Вдобавок к SOS, есть еще несколько других расширений WinDbg для выполнения типичных отладочных задач.
Однако, самый полезный инструмент для использования с WinDbg – это книга Mario Hewardt, Patrick Dussud «Advanced .NET Debugging» (Addison-Wesley Professional, 2009). Она не просто рассказывает, как использовать все эти инструменты, но делает это в контексте отлавливания типичных для .NET проблем.
Сторонние визуализаторы
Я уже говорил про визуализаторы Visual Studio, но есть еще множество сторонних. DotNetDan’s DataSet Visualizer – весьма чудесен, если вам нужно знать, что лежит в датасете (я упоминал его в блоге)
С того времени я уже обнаружил RightHand DataSet Visualizer и стал использовать его. Это MDI-приложение, которое позволяет открыть окно для каждой таблицы датасета. Кроме того, окно Relations показывает таблицы, связанные с текущей просматриваемой.
Грид, отображающий таблицу, не простой – вы можете перетащить колонку в прямоугольник вверху окна, чтобы группировать вашу таблицу по этой колонке. Также можно изменять данные в датасете и менять фильтр RowState, чтобы отображались только строки с определенным RowState (например, только удаленные). Еще можно смотреть (и менять) некоторые свойства датасета. И даже можно выгрузить датасет в XML-файл или загрузить тестовые данные из сохраненного ранее.
Следует отметить, что DotNetDan’s DataSet Visualizer быстрее загружает данные, так что я оставил его на случай, когда не нужна вся мощь RightHand.
Еще есть Web Visualizer для приложений ASP.NET. Этот визуализатор доступен на всплывающей подсказке любого объекта страницы ASP.NET (включая Me и this в коде ASP.NET)
С помощью Web визуализатора можно смотреть любые данные коллекции Server Variables объекта Server и коллекции Forms объекта Request. Также можно посмотреть строку запроса браузера и содержимое объектов Session и Application. Однако, в случае Session и Application для любых объектов, кроме скалярных данных, вы увидите только название типа объекта.
Есть и другие визуализаторы, включая те, что позволяют смотреть Cache и LINQ-запросы к Entity Framework (EF), а также позволяющие увидеть SQL на выходе LINQ-запросов к EF. Печально только то, что нет единого каталога визуализаторов.
Не все, но многие можно найти через Visual Studio Extension Manager. В том числе, ASP.NET MVC Routing Visualizer. Если вы используете маршрутизацию в ASP.NET MVC или в простом ASP.NET, вам пригодится этот инструмент. Взаимодействие между правилами маршрутизации может выдавать неожиданные результаты («Почему я получаю эту страницу?»), и отладка этих правил может быть непростой. Визуализатор позволяет вам ввести URLы и посмотреть, как маршрутизатор их декодирует, включая информацию о том, какое правило используется для каждого URL. Чтобы использовать его в режиме останова, переключитесь на ваш файл global.asax и наведите курсор на RouteTable. Когдя появится всплывающая подсказка, промотайте до коллекции Routes и кликните на значок лупы.
Трассировка
Трассировка по определению непривлекательна. Однако когда в продакшене вы нарываетесь на один из неуловимых багов, которые сложно повторить (и которые появляются и исчезают сами по себе), трассировка – единственный путь получить нужную информацию. Для этого, во-первых, вам нужно организовать запись сообщений в лог, который даст вам информацию для поимки бага. Но чтобы эта информация стала полезной, нужен инструмент для анализа содержимого лога.
Хотя в мире .NET для трассировки существует множество пакетов, я использую log4net. Среди прочих возможностей, log4net позволяет мне встроить в код отладочные сообщения и затем включать или отключать их во время работы без необходимости пересборки приложения. Одно замечание: log4net – очень гибкий инструмент и возможно больше, чем это требуется вам.
Когда дело доходит до чтения полученных логов, я использую Log Parser Lizard от Lizard Labs. В бесплатной версии некоторые возможности ограничены (цена платной – около 25$), однако мне они ни разу не понадобились. Log Parser Lizard использует SQL-подобный синтаксис для построения запросов к логам (включая файлы формата CSV и XML) и прямо из коробки понимает форматы логов IIS, событий Windows и log4net. Результаты отображаются в таблице, что делает его похожим на Server Explorer, с которым мне очень нравится работать.
Как отключить отладчик Visual Studio?
Чтобы не утомлять вас, я собираюсь короче. Две машины, одинаковые системы на них, одинаковые программы (в основном). У одного установлена Visual Studio, у другого . ммм, еще что-то.
Иногда, когда я пытаюсь установить приложения, скажем, с компакт-диска, выскакивает отладчик Visual Studio Just-In-Time Debugger, сообщает о «необработанном исключении win32 в . » и спрашивает, хочу ли я выполнить отладку с помощью «Новый экземпляр Microsoft VIsual Studio. 2010 ». Если я выберу «Да», будет запущена VS, если я выберу «Нет», программа закроет файл, и я вернусь в проводник Windows.
Это было бы нормально, если бы я не знал, что с приложением все в порядке, и поэтому я не могу его установить (в последнем случае это был клиент из моего банка для интернет-банкинга, оплаты счетов и т. Д.).
Итак, как мне избавиться от этой штуки (своевременный отладчик)?
Я не хочу удалять VS, разумеется, я использую его ежедневно.
Изменить 1 :: Я попытался отключить JIT-отладку в VS Tools / Options / Debugging / Just-In-Time, затем снял все три галочки, но это просто дало еще одну ошибку при попытке запустить исполняемую программу установки.
Необработанное исключение win32 произошло в autorun.exe [некоторое число]. Оперативная отладка этого исключения завершилась неудачно из-за следующей ошибки: Ни в одном установленном отладчике не включена своевременная отладка. В Visual Studio оперативную отладку можно включить из .
Дополнительную информацию см . В указателе документации на предмет «Своевременная отладка, ошибки» .
Изменить 2 :: Приложение отлично работает на другом компьютере, на котором не установлен VS. Программное обеспечение на обеих машинах в значительной степени одинаковое, с небольшими отличиями (системы установлены из образа). Незначительные отличия: notepad2, ++, git, . некоторые мелочи, которые оставлены на усмотрение разработчика.
Я не хочу, чтобы это звучало как напыщенная речь против VS, поскольку я понимаю, что это звучит именно так, но мне крайне не нравится программное обеспечение, которое не является самодостаточным и портит другое программное обеспечение. И раньше у меня была такая же проблема с другими приложениями. Так что пока я виню VS.
Если необходимо, я готов отключить все виды отладки, чтобы эта штука работала постоянно (в любом случае в основном используйте операторы печати), если это поможет. И если это возможно.
У меня только что возникла эта проблема с Visual Studio 2013. Эта статья MSDN: «Оперативная отладка в Visual Studio» мне подходит. В моем случае я просто переименовал Debugger в Debugger_del и DbgManagedDebugger в DbgManagedDebugger_del .
On the Start menu, search for and run regedit.exe
In the Registry Editor window, locate and delete the follow registry keys:
- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger
- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\DbgManagedDebugger
If your computer is running a 64-bit operating system, also delete the following registry keys:
Включение или отключение своевременной отладки
Вы можете включить или отключить своевременную отладку в диалоговом окне «Параметры». Включение или отключение своевременной отладки
- В меню » Инструменты » выберите » Параметры» .
- В диалоговом окне « Параметры» выберите папку « Отладка ».
- В папке отладки выберите страницу Just-In-Time .
- В поле « Включить своевременную отладку этих типов кода» установите или снимите флажки для соответствующих типов программ: управляемые, собственные или скриптовые .
- Чтобы отключить своевременную отладку, после ее включения вы должны работать с правами администратора. Включение своевременной отладки устанавливает раздел реестра, и для изменения этого ключа требуются права администратора.
- Нажмите ОК.
Я добавляю этот ответ, хотя это старая тема, потому что я потратил большую часть дня на эту самую проблему и, наконец, решил ее. Каждое решение, которое я нашел, было сосредоточено на отключении или отключении JIT-отладки в Visual Studio, удалении ключей из реестра или изменении параметров отладки сценария IE. Но если у вас нет зарегистрированной копии VS, у вас проблема. Конечно, многие решения работают по-разному, но тогда вы остаетесь с вышеуказанной ошибкой « ни в одном установленном отладчике не включена своевременная отладка », на которую, похоже, никто не может ответить. Однако ответ состоит не в том, чтобы отключить JIT, а в том, чтобы остановить отладку на стороне сервера в вашем приложении. Если вы на самом деле не хотите выполнять отладку на стороне сервера, это не обязательно.
Теперь это имеет для меня полный смысл, потому что в ASP была включена отладка на стороне сервера. Перед установкой VS это не имело никакого значения, потому что отладчик не был назначен для обработки ошибок, поэтому они отправлялись в браузер. Как только я установил VS, JIT взял на себя ответственность и сделал то, что должен был делать tit.
Итак, быстрый ответ: откройте IIS, щелкните сайты по умолчанию или ваши сайты и в настройках вашего приложения, ASP в моем случае, отключите отладку на стороне сервера !!
Возможно, это не ответ каждого или даже решение вышеуказанной проблемы, но надеюсь, что он даст больше понимания этой проблемы и поможет кому-то другому.
что касается ключа в HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ AeDebug и SOFTWARE \ WOW6432Node \ Microsoft, я мог только изменить значение Auto с 1 на 0, и это сработало .:
Если вы используете одно и то же программное обеспечение на двух машинах, а на одной оно дает сбой (что происходит, если запускается отладчик), то, вероятно, на вашем компьютере что-то еще не так. Возможно, у вас есть проблемы с несовместимостью драйверов, или что какое-то другое программное обеспечение, которое вы установили на машине, имеет несовместимые версии dll .
Вам нужно попытаться устранить как можно больше различий (я знаю, легче сказать, чем сделать) . Если вы скопируете содержимое компакт-диска на локальный диск, это поможет? Если вы выключите антивирусную программу во время установки программного обеспечения, это поможет? Помогает ли отключение сети? Вы сказали, что на обеих машинах «в основном» одинаковое программное обеспечение. Что произойдет, если вы удалите некоторые отличия? Обе машины пропатчены до одинакового уровня?
Поскольку Visual Studio пытается запустить, когда у вас есть проблемы, взгляните на стек вызовов и посмотрите, какие DLL загружены, распечатайте их . запустите какое-нибудь другое программное обеспечение, которое дает сбой на этой машине, и сделайте то же самое. .. поищите общие библиотеки и сравните машины, чтобы убедиться, что у них одинаковые версии библиотек .
Конечно, это также может быть связано с аппаратной проблемой (до этого у меня были периодические сбои, потому что один из моих дисков готовился к сбою, а другие из-за того, что мой графический чип работал слишком горячим) .
Как я уже сказал, не совсем ответ, но кое-что нужно учесть .
Если все остальное не помогает . вы, вероятно, застряли в оплате счетов на другом компьютере (хотя другим экспериментом может быть создание VPC на сломанном компьютере, чтобы посмотреть, работает ли он тогда) .
Что такое jit-отладка?
Когда отладка JIT включена, любое необработанное исключение?
Когда JIT-отладка включена, любое необработанное исключение будет отправляется JIT-отладчику, зарегистрированному на компьютеру, а не этому диалоговому окну».
Как включить JIT?
В области сведений инструмента администрирования служб компонентов щелкните правой кнопкой мыши компонент, который требуется настроить, и выберите пункт Свойства. В диалоговом окне свойств компонента щелкните вкладку Активация. Чтобы включить активацию JIT для компонента, установите флажок «Включить активацию точно в срок». Нажмите «ОК».
Что такое отладка моего кода?
Просто мой код Функция отладки Visual Studio, которая автоматически обходит вызовы системного, фреймворкового и другого непользовательского кода.. В окне «Стек вызовов» функция «Только мой код» сворачивает эти вызовы во фреймы [Внешний код].
Что означает начать отладку?
Описание: Чтобы отладить программу, пользователь должен начать с проблемы, изолируйте исходный код проблемы, а затем исправьте его. Пользователь программы должен знать, как решить проблему, так как от него требуется знание анализа проблемы. Когда ошибка устранена, программное обеспечение готово к использованию.
Своевременное исправление ошибки отладчика JIT
Что является примером отладки?
При разработке программного обеспечения процесс отладки начинается, когда разработчик обнаруживает ошибку кода в компьютерной программе и может ее воспроизвести. . Например, инженер может запустить тест соединения JTAG для отладки соединений на интегральной схеме.
Почему отладка так сложна?
Отладка сама по себе очень сложный процесс из-за участия человека. Еще одна причина, по которой он считается сложным, потому что он также требует большого количества времени и ресурсов.
Что такое путь PDB?
База данных программы (PDB) — это собственный формат файла (разработанный Microsoft) для хранения отладочной информации о программе (или, как правило, программных модулях, таких как DLL или EXE). Файлы PDB обычно имеют расширение . расширение ПДБ. Файл PDB обычно создается из исходных файлов во время компиляции.
Как отлаживать в Visual Studio?
- Для отладки вам нужно запустить приложение с отладчиком, прикрепленным к процессу приложения. .
- Нажмите F5 (Отладка > Начать отладку) или кнопку Начать отладку. .
- Чтобы запустить приложение с подключенным отладчиком, нажмите клавишу F11 («Отладка» > «Пошаговое выполнение»).
Что такое DebuggerStepThrough?
Пометка фрагмента кода с помощью атрибута DebuggerStepThrough указывает отладчик Visual Studio что блок кода будет исключен из процесса отладки. Вы можете пометить методы и свойства с помощью атрибутов DebuggerStepThrough, если вы не хотите, чтобы ваш код ломался.
Как остановить JIT-отладку?
В Панели управления Windows > Сеть и Интернет > Свойства обозревателя, выберите Отключить отладку сценариев (Internet Explorer) и Отключить отладку сценариев (другое). Точные шаги и настройки зависят от вашей версии Windows и вашего браузера.
Как включить JIT-отладку?
- В меню «Инструменты» или «Отладка» выберите «Параметры» > «Отладка» > «Точно вовремя».
- В поле Включить отладку Just-In-Time для этих типов кода выберите типы кода, для которых требуется отладка Just-In-Time: Managed, Native и/или Script.
- Выберите ОК.
Как вы проверяете, включен JIT или нет?
Вы можете отключить JIT-компилятор с использованием -Djava. компилятор = NONE для виртуальной машины Java. Таким образом, вы можете сделать вывод, что когда переменная не установлена или установлена в значение, отличное от NONE, тогда JIT включен.
Что означает JIT?
Вовремя, или JIT, — это метод управления запасами, при котором товары принимаются от поставщиков только по мере необходимости. Основной целью этого метода является снижение затрат на хранение запасов и увеличение оборачиваемости запасов.
Как отключить JIT?
- Укажите -Джава. компилятор=НЕТ в командной строке.
- Укажите -Xint в командной строке, чтобы отключить компилятор JIT и AOT. Чтобы устранить проблемы с одним или другим, вы можете выборочно отключить эти компиляторы с помощью параметров -Xnojit и -Xnoaot.
- Звоните в Яву.
Как исправить необработанное исключение, возникшее в вашем приложении?
- Произошло необработанное исключение Win32.
- Удаление программы в Панели управления.
- Удаление вашего антивируса.
- Запуск панели управления.
- Включение последней версии .NET Framework.
- Запуск MSCONFIG.
- Отключение всех сторонних служб.
Как выполнить отладку UFT?
- Выберите в документе шаг, на котором вы хотите остановить UFT One, и выберите «Выполнить» > «Выполнить до шага».
- Выберите шаг, на котором вы хотите, чтобы UFT One запускал запуск, и выберите «Выполнить» > «Отладка с шага».
Как отладить в селене?
- В первом методе
- Щелкните правой кнопкой мыши команду и выберите «Переключить точку останова». .
- Вы можете установить точку останова непосредственно перед тестовым набором, который хотите изучить.
- После установки точек останова нажмите кнопку «Выполнить», чтобы запустить тестовый пример от начала до точки останова.
Как отладить SSIS?
- В SQL Server Data Tools (SSDT) откройте проект служб Integration Services, содержащий нужный пакет.
- Дважды щелкните пакет, в котором вы хотите установить точки останова.
- В конструкторе служб SSIS выполните следующие действия.
Как отлаживать файлы PDB?
2 ответа. Самый простой способ использовать файл PDB — это пусть Visual Studio сделает тяжелую работу — либо запустите программу с помощью команды "Отладка" Visual Studio (по умолчанию F5), либо запустите программу и используйте пункт "Присоединить к процессу" в меню "Отладка" Visual Studio.
Куда идут файлы PDB?
pdb хранит всю отладочную информацию для файла .exe проекта и находится в подкаталог \debug. . pdb содержит полную отладочную информацию, включая прототипы функций, а не только информацию о типе, найденную в VC. пдб.
Что понимается под ПДБ?
То Банк данных о белках (PDB) — это база данных трехмерных структурных данных больших биологических молекул, таких как белки и нуклеиновые кислоты. . PDB контролируется организацией под названием Worldwide Protein Data Bank, wwPDB. PDB является ключевым в таких областях структурной биологии, как структурная геномика.
Насколько сложна отладка?
"Отладка в два раза сложнее, чем писать код в первую очередь. Следовательно, если вы пишете код настолько умно, насколько это возможно, вы по определению недостаточно умны, чтобы его отлаживать».
Что означает отладка в кодировании?
Средства отладки для запуска шага кода шаг за шагом в инструменте отладки, таком как Visual Studio, чтобы найти точную точку, где вы допустили ошибку программирования. Затем вы понимаете, какие исправления вам нужно внести в свой код, а инструменты отладки часто позволяют вам вносить временные изменения, чтобы вы могли продолжить работу с программой.
На каком языке проще всего отлаживать?
Java является статически типизированным и компилируемым языком. Питон является динамически типизированным и интерпретируемым языком. Это единственное отличие делает Java быстрее во время выполнения и проще в отладке, но Python проще в использовании и легче для чтения.
How to enable Just In Time Debugger in Visual Studio 2017?
I haven’t Just-In-Time in Options:
I found to solve this with options of Internet :
But when I’m rebuilding solution I get this exception:
How to solve this issue?
1 Answer 1
How to enable Just In Time Debugger in Visual Studio 2017?
First, please make sure you have installed the component Just-In-Time debugger in the installer:
Then restart your Visual Studio, you will get that Just-In-Time in Options.
If you still have issue after install the component Just-In-Time debugger, you can try to update your Visual Studio to latest version.
This also could have happened when installing VS2017 on a machine that once had a previous version of VS installed (the JIT debugger does not uninstall with VS for backward compatibility reasons).
To work around these issues until the fixes are released, run repair to register the JIT debugger (assuming it was selected to be installed) or uninstall and reinstall making sure to select the JIT debugger.
Once VS2017 is repaired/installed, start VS as administrator and go to the JIT options page. Check all checkboxes and click OK.
Jit отладчик visual studio что это
JIT-отладка автоматически запускает Visual Studio при возникновении ошибок или сбоев в приложении, запущенном вне Visual Studio. С помощью JIT-отладки можно тестировать приложения за пределами Visual Studio и открыть Visual Studio, чтобы начать отладку в случае проблемы.
JIT-отладка работает для классических приложений Windows. Она не работает для универсальных приложений Windows или управляемого кода, размещенного в приложении машинного кода, например для визуализаторов.
[!TIP] Если вы просто хотите запретить отображение диалогового окна JIT-отладчика, но у вас не установлена Visual Studio, см. раздел Отключение JIT-отладчика. Если набор средств Visual Studio был ранее установлен, но теперь его нет, придется отключить JIT-отладку через реестр Windows.
Включение или отключение JIT-отладки в Visual Studio
[!NOTE] Чтобы включить или отключить JIT-отладку, необходимо запустить Visual Studio от имени администратора. Включение или отключение JIT-отладки устанавливает раздел реестра. Для его изменения требуются права администратора. Откройте Visual Studio с правами администратора, щелкнув приложение Visual Studio правой кнопкой мыши и выбрав Запуск от имени администратора.
JIT-отладку можно настроить в диалоговом окне Visual Studio Сервис > Параметры (или Отладка > Параметры).
Включение или отключение JIT–отладки
В меню Сервис или Отладка выберите Параметры > Отладка > JIT.
В поле Включить JIT-отладку для этих типов кода выберите типы кода, которым требуется JIT-отладка: Управляемый, Собственный и (или) Скрипт.
Нажмите кнопку ОК.
Если вы включили JIT-отладчик, но он не открывается при сбоях или ошибках приложения, см. раздел Устранение неполадок с JIT-отладкой.
Отключение JIT-отладки из реестра Windows
JIT-отладка может оставаться включенной даже после удаления Visual Studio с компьютера. Если Visual Studio больше не установлена, JIT-отладку можно отключить, отредактировав реестр Windows.
Отключение JIT-отладки путем редактирования реестра
В меню Windows Пуск запустите редактор реестра (regedit.exe).
В окне редактора реестра для компьютеров с 64-разрядной версией ОС найдите и удалите следующие записи реестра:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\DbgManagedDebugger
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger
. image type=»content» source=»../debugger/media/dbg-jit-registry.png» alt-text=»Раздел реестра JIT» border=»true».
Если имеются указанные ниже записи реестра или на компьютере установлена 32-разрядная версия операционной системы, удалите следующие записи:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\DbgManagedDebugger
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger
Будьте внимательны, чтобы не удалить или не изменить другие разделы реестра.
Закройте окно Редактор реестра.
Включение JIT-отладки для приложений Windows Forms
По умолчанию в приложениях Windows Forms есть обработчик исключений верхнего уровня, который позволяет приложению продолжить работу, если оно может быть восстановлено. Если приложение Windows Forms выдает необработанное исключение, отображается следующее диалоговое окно:
Чтобы включить JIT-отладку вместо стандартной обработки ошибок Windows Forms, добавьте следующие параметры.
В разделе system.windows.forms файла machine.config или <app name>.exe.config установите для параметра jitDebugging значение true :
Для приложений Windows Forms, написанных на языке C++, в файле CONFIG или коде также задайте для параметра DebuggableAttribute значение true . Если компиляция выполняется с атрибутом /Zi, но без /Og, компилятор автоматически задаст этот атрибут. Однако если требуется выполнить отладку неоптимизированной сборки выпуска, то необходимо задать DebuggableAttribute , добавив следующую строку в файл AssemblyInfo.cpp приложения:
Для получения дополнительной информации см. xref:System.Diagnostics.DebuggableAttribute.
В этом примере рассматривается JIT-отладка, когда приложение выдает ошибку.
Для выполнения инструкций необходимо установить Visual Studio. Если у вас нет Visual Studio, вы можете скачать бесплатный выпуск Visual Studio Community.
Убедитесь, что JIT-отладка включена в разделе Сервис > Параметры > Отладка > JIT.
В этом примере вы создадите консольное приложение C# в Visual Studio, которое создает исключение NullReferenceException.
В Visual Studio создайте консольное приложение C# (Файл > Создать > Проект > Visual C# > Консольное приложение) с именем ThrowsNullException. Сведения о создании проектов в Visual Studio см. в разделе Пошаговое руководство. Создание простого приложения.
Когда проект откроется в Visual Studio, откройте файл Program.cs. Замените метод Main() следующим кодом, который выводит строку на консоль, а затем создает исключение NullReferenceException:
Чтобы выполнить сборку решения, выберите конфигурацию Отладка (по умолчанию) или Выпуск, а затем нажмите Сборка > Перестроить решение.
- Выберите конфигурацию Отладка для полной отладки.
- Если выбрана конфигурация Выпуск, необходимо отключить функцию Только мой код. В разделе Сервис > Параметры > Отладка снимите флажок Включить только мой код.
Дополнительные сведения о конфигурациях сборки см. в разделе Общие сведения о конфигурациях сборки.
Откройте созданное приложение ThrowsNullException.exe в папке проекта C# ( . \ThrowsNullException\ThrowsNullException\bin\Debug или . \ThrowsNullException\ThrowsNullException\bin\Release).
Вы увидите следующее окно команд:
Откроется диалоговое окно Выбор JIT-отладчика.
В разделе Доступные отладчики выберите параметр Новый экземпляр <your preferred Visual Studio version/edition> , если он еще не выбран.
Нажмите кнопку ОК.
Проект ThrowsNullException открывается в новом экземпляре Visual Studio, а выполнение остановлено в строке, вызвавшей исключение:
Теперь можно начать отладку. При отладке реального приложения необходимо выяснить, почему код создает исключение.
[!CAUTION] Если приложение содержит ненадежный код, появляется диалоговое окно предупреждения системы безопасности, позволяющее решить, следует ли продолжить отладку. Перед продолжением отладки решите, доверяете ли вы данному коду. Этот код написан вами самостоятельно? Если приложение выполняется на удаленном компьютере, узнаете ли вы имя процесса? Если приложение выполняется локально, учитывайте возможность выполнения такого вредоносного кода на вашем компьютере. Если вы решили, что код заслуживает доверия, нажмите ОК. В противном случае нажмите кнопку Отмена.
Устранение неполадок с JIT-отладкой
Если JIT-отладка не запускается при сбое приложения, даже если она включена в Visual Studio:
Отчеты об ошибках Windows могут взять на себя обработку ошибок на компьютере.
Чтобы устранить эту проблему, используйте редактор реестра, чтобы добавить значение DWORD Отключено с параметром Данные значения, равным 1, для следующих разделов реестра:
HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Windows\Windows Error Reporting
(Для компьютеров с 32-разрядной версией ОС) HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Windows Error Reporting
Дополнительные сведения см. в разделе Параметры .WER.
Известная проблема Windows может привести к сбою JIT-отладчика.
Исправление состоит в том, чтобы добавить значение DWORD из раздела Видимые с параметром Значение данных, равным 1, в следующие разделы реестра.
HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug
(Для компьютеров с 32-разрядной версией ОС) HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug
Во время JIT-отладки могут отображаться следующие сообщения об ошибках.
Не удалось подключиться к аварийному процессу. Указанная программа не является программой Windows или MS–DOS.
Отладчик попытался подключиться к процессу, выполняющемуся под именем другого пользователя.
Чтобы обойти эту проблему, запустите Visual Studio, откройте диалоговое окно Отладка > Присоединение к процессу (или нажмите сочетание клавиш CTRL + ALT + P) и найдите процесс, для которого требуется выполнить отладку, в списке Доступные процессы. Если имя процесса неизвестно, найдите идентификатор процесса в диалоговом окне JIT-отладчик Visual Studio. Выберите процесс в списке Доступные процессы и щелкните Присоединить. Выберите Нет, чтобы закрыть диалоговое окно JIT-отладчика.
Не удалось запустить отладчик, так как пользователь не вошел в систему.
В консоли нет пользователей, выполнивших вход, а также отсутствует сеанс пользователя, в котором следовало бы отображать диалоговое окно JIT-отладки.
Для решения этой проблемы необходимо войти в компьютер.
Класс не зарегистрирован.
Отладчик пытался создать класс COM, который не зарегистрирован, вероятно, из-за проблем с установкой.
Чтобы решить эту проблему, используйте Visual Studio Installer для переустановки или исправления установки Visual Studio.
Отладочные инструменты .NET разработчика
От переводчика: я наткнулся на эту статью случайно, когда искал информацию по управлению загрузкой символов во время отладки. И хотя по этому вопросу информации было не так много, я с удовольствием прочитал всю статью. Большая часть были мне известна и до этого, но не всё. Уверен, что многие найдут в ней для себя что-то полезное. Статья написана полтора года назад, однако не все переходят на новые версии студии и сопутствующих инструментов сразу после их появления, так что актуальности статья не потеряла.
Баги встречаются на двух этапах жизненного цикла кода: во время разработки и в продакшене. Часто ошибки, которые вылезают в течение 10-15 минут с момента написания кода, мы даже не считаем за баги – они просто часть процесса написания кода. А багами мы гораздо чаще называем проблемы, которые проявляются в продакшене или при тестировании кода, написанного несколько дней назад; вероятно потому, что их сложнее отловить (код уже успел подзабыться). В любом случае, если код не делает того, что должен, это баг и его нужно отловить и исправить.
4 столпа эффективной отладки
- Правильные инструменты. Это то, чему посвящена статья. Но инструменты бесполезны без других трех.
- Использование практик построения архитектуры и кода, отдающих предпочтение слабо связанным объектам и написанию того, что я называю Совершенно Очевидный Код – СОК (Really Obvious Code – ROC rocks!). Эти практики помогают находить баги и избегать внесения изменений, лишь добавляющих новые. И никогда не поздно перечитать Brian W. Kernighan and P. J. Plauger’s «The Elements of Programming Style» (Computing Mcgraw-Hill, 1978).
- Использование TDD (разработки через тестирование). Если вы разрабатываете что-то кроме сильно связанного пользовательского интерфейса и не используете TDD – вы разработчик с одной рукой, связанной за спиной. Вы менее продуктивны, чем могли бы быть, и ваш код менее надежен, чем должен быть.
- Методика отладки. Многие разработчики сразу переходят к шагу «разработка решения», что в результате редко приводит к исправлению бага, зато часто создает новые.
- Опишите баг. Соберите всю информацию для полного описания симптомов бага, акцентируя внимание на том, когда симптомы проявляются, а когда – нет.
- Зафиксируйте баг. Опишите последовательность действий, которая всегда приводит к появлению бага. Так вы убедитесь, что правильно определили условия, приводящие к появлению симптомов бага. Проверьте, что симптомы не проявляются при других условиях.
- Локализуйте баг. Убедитесь, что вы можете описать, в чем именно истинная причина появления бага и что описание соотносится с шагами 1 и 2.
- Разработайте и примените решение. Определите, боретесь ли вы с истинной причиной бага или с его симптомами. Напишите код.
- Проверьте решение. Проверьте, что симптомы больше не проявляются при выполнении действий, описанных в шаге 2.
- Проведите регрессионное тестирование. Проверьте, что не появилось новых багов.
- Примените изменения. Перенесите изменения в продакшен.
Использование точек останова
Многие разработчики не знают всех возможностей отладки в Visual Studio, потому что отладка «и так работает». Например, хотя каждый VS-разработчик знаком с точками останова, многие не знают, что можно сделать в окне Breakpoints.
Чтобы открыть окно Breakpoins, выберите Debug | Windows | Breakpoints; в окне отобразится список всех установленных вами точек останова. Если вы не уверены, какая точка какой строке кода соответствует, просто кликните по ней двойным кликом и в редакторе откроется связанный с ней код.
Определившись с нужной точкой, вы можете управлять тем, что происходит, когда она срабатывает. Я видел разработчиков, которые проверяют одни и те же переменные раз за разом, поставив точку останова в цикле. По правому клику на точке останова, выбрав When Hit (условие срабатывания), вы можете задать сообщение, которое выводится в окно Intermediate при каждом ее срабатывании. В сообщение можно включать некоторые константы: например, используя $Caller, можно вывести имя метода, вызвавшего код, содержащий точку останова. Также можно включить любые переменные, заключив их в фигурные скобки: например, в сообщении выведет значение поля Text.
Другая возможность диалога When Hit позволяет задавать, должно ли останавливаться выполнение программы на точке останова. Если выбрать остановку, то вы увидите каждое сообщение в момент его создания; в противном случае вы сможете просмотреть все сообщения после выполнения программы.
Если вы хотите остановить выполнение только при определенном условии, вы можете выбрать опции Condition или Hit Count. Опция Condition позволяет задать логическое условие, при котором произойдет остановка (например, Position > 30). Также можно выполнить остановку, если одна из переменных изменилась с момента последней остановки. Опция Hit Count прерывает выполнение только если точка останова сработала в n-й раз (или каждые n раз). Это особенно полезно, когда вам нужно остановиться где-то в конце цикла.
Между прочим, мой опыт говорит, что если в какой-то части приложения возникли проблемы, они продолжат там возникать. Если ваш опыт говорит о том же, вам понравятся дополнительные возможности Visual Studio 2010. Вы можете дать точкам останова названия, чтобы не забыть, для чего нужна каждая из них, и экспортировать их в XML-файл. В следующий раз, когда они вам понадобятся, вы можете импортировать их и начать отладку. Импорт/экспорт можно сделать с помощью тулбара вверху окна Breakpoints.
Показ и пропуск кода
Мне нравится генерирование кода (я написал книгу по тому, как это делать в .NET). Но хождение по коду, сгенерированному студией и фрэймворком, как правило не дает мне ничего полезного. А раз это не помогает найти проблему, значит делает процесс отладки менее продуктивным и лучше этого избежать.
В любой версии Visual Studio, в пункте Debug | General диалога настроек вы можете выбрать опцию Just My Code и перестать видеть код, который вы не писали. Если впоследствии вам понадобится это отключить (например, если где-то в сгенерированном коде возникает исключение), вы можете это сделать, выбрав Options and Settings в меню Debug (этот пункт есть только в VS2010 – прим. перев).
Если же вы устали ходить по какой-то части вашего кода, вы можете использовать один из двух атрибутов. Поставьте на метод атрибут DebuggerHidden и вы никогда не попадете в этот метод. Если же поставить атрибут DebuggerNonUserCode , вы не будете в него попадать при включенной опции Just My Code и будете при выключенной. Я рекомендую вам использовать второй способ.
С другой стороны, если ошибка возникает где-то в коде Microsoft .NET Framework, вам может понадобится пройти не только по сгенерированному коду, но и по коду классов фрэймворка. И вы можете это сделать! Во-первых, убедитесь, что отключена опция Just My Code. Затем в диалоге Options and Settings в разделе Symbols выберите Microsoft Symbol Server (в VS 2010) или задайте путь к символам как referencesource.microsoft.com/symbols (в VS2008). Это позволит вам загрузить символы, которые поддерживают хождение по коду классов .NET. Однако вам еще нужно их загрузить. В VS2010 вы можете кликнуть кнопку Load All Symbols, но нужно набраться терпения на время скачивания.
Чтобы выбрать конкретную сборку (или если вы используете VS2008), в режиме остановки процесса отладки откройте окно Modules и в списке DLL, загруженных вашим приложением, кликните правым кликом на нужной DLL и выберите Load Modules, чтобы загрузить символы для этой DLL. Конечно, подождать всё равно придется, но уже не так долго.
Я один из тех, кто пишет в свойствах полезный код и хочет иметь возможность пошагово их отладить. Начиная с VS2008SP1, появилась опция (Step over properties and operators), выключающая пошаговую отладку свойств и операторов. И в VS2010 она по умолчанию включена, так что вам может понадобиться ее выключить.
Визуализация данных
Как ни странно, множество разработчиков не знакомы с визуализаторами данных в Visual Studio. Если в режиме остановки навести мышку на переменную, всплывет подсказка со значением этой переменной. Также может появиться значок с лупой – клик по нему откроет значение переменной в визуализаторе по умолчанию. Если рядом с иконкой появляется стрелка выпадающего списка, клик по стрелке покажет другие визуализаторы для этого типа данных. Например, для строковой переменной будут показаны текстовый, XML и HTML визуализаторы. Если вы храните в строке HTML, HTML-визуализатор позволит понять, как это будет выглядеть в браузере.
Визуализаторы вы можете также использовать в окнах Watch, Autos и Locals, но если вы смотрите какую-то переменную очень часто, вы можете нажать на канцелярскую кнопку в конце всплывающей подсказки, чтобы «пригвоздить» ее на этом месте. Тогда в следующий раз, когда вы будете просматривать эту часть кода, подсказка всплывет автоматически.
Кстати о подсказках – вы можете с их помощью менять значение переменной. В VS2010 даже более того: подсказку можно заставить висеть в окне, существовать всё время сеанса отладки, и даже после его окончания она будет отображать значение переменной из последнего сеанса. Однако, самые крутые инструменты (Debugger Canvas и IntelliTrace) доступны только в VS2010 Ultimate Edition.
Редактор в студии позволяет смотреть только на один участок кода в один момент времени. Но множество багов возникает в результате взаимодействия между разными частями кода. Debugger Canvas позволяет вам увидеть весь ваш код разом, перемещаясь между модулями и приближая нужную часть.
Когда срабатывает точка останова, вам нужно понять, как вы здесь оказались. Можно использовать окно Call Stack, но вы не увидите, что происходило на более ранних этапах (как вариант, можно поставить кучу точек останова и проходить их последовательно, отслеживая переменные).
Если Debugger Canvas позволяет смотреть «через модули», то IntelliTrace – «через время», что дает понимание того, как вы попали в данную точку останова. IntelliTrace собирает и показывает отладочную информацию, которая была доступна в предыдущие моменты времени сеанса отладки.
Еще лучше Debugger Canvas и IntelliTrace работают в связке: в Debugger Canvas есть опция, позволяющая видеть логи IntelliTrace рядом с кодом.
Внешние инструменты
Visual Studio – не единственный инструмент отладки, есть сколько угодно внешних и сторонних инструментов, которые вы можете добавить в копилку. Я здесь остановлюсь только на некоторых бесплатных.
Не все внешние инструменты сделаны сторонними производителями. Если вы пишете службы Windows, то знаете, что отлаживать их непростое занятие. Хотя вы и можете подключиться к ним для отладки, к этому времени код OnStart и инициализация уже выполнится. Если баг не дает сервису запуститься, вам остается только гадать, что же пошло не так, вместо того чтобы собрать информацию для описания проблемы.
В подобной ситуации вы можете настроить Just-in-Time (JIT) отладку и автозапуск – сеанс отладки начнется, когда служба запустится или когда возникнет ошибка. Но чтобы это сделать, вам нужно воспользоваться внешними инструментами.
Так как настройка JIT-отладки выходит за рамки данной статьи, вы можете обратиться к соответствующей статье в MSDN. Эта статья советует использовать Global Flags Editor (gflags.exe); на случай, если вы не можете его найти, описывается, как подправить реестр, чтобы включить JIT-отладку. Однако вам придется научиться пользоваться WinDbg.
- Windows Debugger (WinDbg.exe)
- SOS Debugging Extension (SOS.dll, которая может быть использована в консоли Visual Studio или с WinDbg.exe)
- Assemble Binding Log Viewer (Fuslogvw.exe, который я обсуждал в блоге .NET Tips)
Если вы не использовали раньше WinDbg, это не так страшно, как может показаться – WinDbg имеет GUI (в отличие от консольных инструментов типа NTSD, KD и CBD) и может загружать PDB-файлы с отладочными символами для вашего приложения (просто убедитесь, что вы скомпилировали ваше приложение в Debug-режиме и файл символов гарантированно подходит). Вдобавок к SOS, есть еще несколько других расширений WinDbg для выполнения типичных отладочных задач.
Однако, самый полезный инструмент для использования с WinDbg – это книга Mario Hewardt, Patrick Dussud «Advanced .NET Debugging» (Addison-Wesley Professional, 2009). Она не просто рассказывает, как использовать все эти инструменты, но делает это в контексте отлавливания типичных для .NET проблем.
Сторонние визуализаторы
Я уже говорил про визуализаторы Visual Studio, но есть еще множество сторонних. DotNetDan’s DataSet Visualizer – весьма чудесен, если вам нужно знать, что лежит в датасете (я упоминал его в блоге)
С того времени я уже обнаружил RightHand DataSet Visualizer и стал использовать его. Это MDI-приложение, которое позволяет открыть окно для каждой таблицы датасета. Кроме того, окно Relations показывает таблицы, связанные с текущей просматриваемой.
Грид, отображающий таблицу, не простой – вы можете перетащить колонку в прямоугольник вверху окна, чтобы группировать вашу таблицу по этой колонке. Также можно изменять данные в датасете и менять фильтр RowState, чтобы отображались только строки с определенным RowState (например, только удаленные). Еще можно смотреть (и менять) некоторые свойства датасета. И даже можно выгрузить датасет в XML-файл или загрузить тестовые данные из сохраненного ранее.
Следует отметить, что DotNetDan’s DataSet Visualizer быстрее загружает данные, так что я оставил его на случай, когда не нужна вся мощь RightHand.
Еще есть Web Visualizer для приложений ASP.NET. Этот визуализатор доступен на всплывающей подсказке любого объекта страницы ASP.NET (включая Me и this в коде ASP.NET)
С помощью Web визуализатора можно смотреть любые данные коллекции Server Variables объекта Server и коллекции Forms объекта Request. Также можно посмотреть строку запроса браузера и содержимое объектов Session и Application. Однако, в случае Session и Application для любых объектов, кроме скалярных данных, вы увидите только название типа объекта.
Есть и другие визуализаторы, включая те, что позволяют смотреть Cache и LINQ-запросы к Entity Framework (EF), а также позволяющие увидеть SQL на выходе LINQ-запросов к EF. Печально только то, что нет единого каталога визуализаторов.
Не все, но многие можно найти через Visual Studio Extension Manager. В том числе, ASP.NET MVC Routing Visualizer. Если вы используете маршрутизацию в ASP.NET MVC или в простом ASP.NET, вам пригодится этот инструмент. Взаимодействие между правилами маршрутизации может выдавать неожиданные результаты («Почему я получаю эту страницу?»), и отладка этих правил может быть непростой. Визуализатор позволяет вам ввести URLы и посмотреть, как маршрутизатор их декодирует, включая информацию о том, какое правило используется для каждого URL. Чтобы использовать его в режиме останова, переключитесь на ваш файл global.asax и наведите курсор на RouteTable. Когдя появится всплывающая подсказка, промотайте до коллекции Routes и кликните на значок лупы.
Трассировка
Трассировка по определению непривлекательна. Однако когда в продакшене вы нарываетесь на один из неуловимых багов, которые сложно повторить (и которые появляются и исчезают сами по себе), трассировка – единственный путь получить нужную информацию. Для этого, во-первых, вам нужно организовать запись сообщений в лог, который даст вам информацию для поимки бага. Но чтобы эта информация стала полезной, нужен инструмент для анализа содержимого лога.
Хотя в мире .NET для трассировки существует множество пакетов, я использую log4net. Среди прочих возможностей, log4net позволяет мне встроить в код отладочные сообщения и затем включать или отключать их во время работы без необходимости пересборки приложения. Одно замечание: log4net – очень гибкий инструмент и возможно больше, чем это требуется вам.
Когда дело доходит до чтения полученных логов, я использую Log Parser Lizard от Lizard Labs. В бесплатной версии некоторые возможности ограничены (цена платной – около 25$), однако мне они ни разу не понадобились. Log Parser Lizard использует SQL-подобный синтаксис для построения запросов к логам (включая файлы формата CSV и XML) и прямо из коробки понимает форматы логов IIS, событий Windows и log4net. Результаты отображаются в таблице, что делает его похожим на Server Explorer, с которым мне очень нравится работать.
Как отключить отладчик Visual Studio?
Чтобы не утомлять вас, я собираюсь короче. Две машины, одинаковые системы на них, одинаковые программы (в основном). У одного установлена Visual Studio, у другого . ммм, еще что-то.
Иногда, когда я пытаюсь установить приложения, скажем, с компакт-диска, выскакивает отладчик Visual Studio Just-In-Time Debugger, сообщает о «необработанном исключении win32 в . » и спрашивает, хочу ли я выполнить отладку с помощью «Новый экземпляр Microsoft VIsual Studio. 2010 ». Если я выберу «Да», будет запущена VS, если я выберу «Нет», программа закроет файл, и я вернусь в проводник Windows.
Это было бы нормально, если бы я не знал, что с приложением все в порядке, и поэтому я не могу его установить (в последнем случае это был клиент из моего банка для интернет-банкинга, оплаты счетов и т. Д.).
Итак, как мне избавиться от этой штуки (своевременный отладчик)?
Я не хочу удалять VS, разумеется, я использую его ежедневно.
Изменить 1 :: Я попытался отключить JIT-отладку в VS Tools / Options / Debugging / Just-In-Time, затем снял все три галочки, но это просто дало еще одну ошибку при попытке запустить исполняемую программу установки.
Необработанное исключение win32 произошло в autorun.exe [некоторое число]. Оперативная отладка этого исключения завершилась неудачно из-за следующей ошибки: Ни в одном установленном отладчике не включена своевременная отладка. В Visual Studio оперативную отладку можно включить из .
Дополнительную информацию см . В указателе документации на предмет «Своевременная отладка, ошибки» .
Изменить 2 :: Приложение отлично работает на другом компьютере, на котором не установлен VS. Программное обеспечение на обеих машинах в значительной степени одинаковое, с небольшими отличиями (системы установлены из образа). Незначительные отличия: notepad2, ++, git, . некоторые мелочи, которые оставлены на усмотрение разработчика.
Я не хочу, чтобы это звучало как напыщенная речь против VS, поскольку я понимаю, что это звучит именно так, но мне крайне не нравится программное обеспечение, которое не является самодостаточным и портит другое программное обеспечение. И раньше у меня была такая же проблема с другими приложениями. Так что пока я виню VS.
Если необходимо, я готов отключить все виды отладки, чтобы эта штука работала постоянно (в любом случае в основном используйте операторы печати), если это поможет. И если это возможно.
У меня только что возникла эта проблема с Visual Studio 2013. Эта статья MSDN: «Оперативная отладка в Visual Studio» мне подходит. В моем случае я просто переименовал Debugger в Debugger_del и DbgManagedDebugger в DbgManagedDebugger_del .
On the Start menu, search for and run regedit.exe
In the Registry Editor window, locate and delete the follow registry keys:
- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger
- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\DbgManagedDebugger
If your computer is running a 64-bit operating system, also delete the following registry keys:
Включение или отключение своевременной отладки
Вы можете включить или отключить своевременную отладку в диалоговом окне «Параметры». Включение или отключение своевременной отладки
- В меню » Инструменты » выберите » Параметры» .
- В диалоговом окне « Параметры» выберите папку « Отладка ».
- В папке отладки выберите страницу Just-In-Time .
- В поле « Включить своевременную отладку этих типов кода» установите или снимите флажки для соответствующих типов программ: управляемые, собственные или скриптовые .
- Чтобы отключить своевременную отладку, после ее включения вы должны работать с правами администратора. Включение своевременной отладки устанавливает раздел реестра, и для изменения этого ключа требуются права администратора.
- Нажмите ОК.
Я добавляю этот ответ, хотя это старая тема, потому что я потратил большую часть дня на эту самую проблему и, наконец, решил ее. Каждое решение, которое я нашел, было сосредоточено на отключении или отключении JIT-отладки в Visual Studio, удалении ключей из реестра или изменении параметров отладки сценария IE. Но если у вас нет зарегистрированной копии VS, у вас проблема. Конечно, многие решения работают по-разному, но тогда вы остаетесь с вышеуказанной ошибкой « ни в одном установленном отладчике не включена своевременная отладка », на которую, похоже, никто не может ответить. Однако ответ состоит не в том, чтобы отключить JIT, а в том, чтобы остановить отладку на стороне сервера в вашем приложении. Если вы на самом деле не хотите выполнять отладку на стороне сервера, это не обязательно.
Теперь это имеет для меня полный смысл, потому что в ASP была включена отладка на стороне сервера. Перед установкой VS это не имело никакого значения, потому что отладчик не был назначен для обработки ошибок, поэтому они отправлялись в браузер. Как только я установил VS, JIT взял на себя ответственность и сделал то, что должен был делать tit.
Итак, быстрый ответ: откройте IIS, щелкните сайты по умолчанию или ваши сайты и в настройках вашего приложения, ASP в моем случае, отключите отладку на стороне сервера !!
Возможно, это не ответ каждого или даже решение вышеуказанной проблемы, но надеюсь, что он даст больше понимания этой проблемы и поможет кому-то другому.
что касается ключа в HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ AeDebug и SOFTWARE \ WOW6432Node \ Microsoft, я мог только изменить значение Auto с 1 на 0, и это сработало .:
Если вы используете одно и то же программное обеспечение на двух машинах, а на одной оно дает сбой (что происходит, если запускается отладчик), то, вероятно, на вашем компьютере что-то еще не так. Возможно, у вас есть проблемы с несовместимостью драйверов, или что какое-то другое программное обеспечение, которое вы установили на машине, имеет несовместимые версии dll .
Вам нужно попытаться устранить как можно больше различий (я знаю, легче сказать, чем сделать) . Если вы скопируете содержимое компакт-диска на локальный диск, это поможет? Если вы выключите антивирусную программу во время установки программного обеспечения, это поможет? Помогает ли отключение сети? Вы сказали, что на обеих машинах «в основном» одинаковое программное обеспечение. Что произойдет, если вы удалите некоторые отличия? Обе машины пропатчены до одинакового уровня?
Поскольку Visual Studio пытается запустить, когда у вас есть проблемы, взгляните на стек вызовов и посмотрите, какие DLL загружены, распечатайте их . запустите какое-нибудь другое программное обеспечение, которое дает сбой на этой машине, и сделайте то же самое. .. поищите общие библиотеки и сравните машины, чтобы убедиться, что у них одинаковые версии библиотек .
Конечно, это также может быть связано с аппаратной проблемой (до этого у меня были периодические сбои, потому что один из моих дисков готовился к сбою, а другие из-за того, что мой графический чип работал слишком горячим) .
Как я уже сказал, не совсем ответ, но кое-что нужно учесть .
Если все остальное не помогает . вы, вероятно, застряли в оплате счетов на другом компьютере (хотя другим экспериментом может быть создание VPC на сломанном компьютере, чтобы посмотреть, работает ли он тогда) .
Jit отладчик visual studio что это
Я здесь N видов свалок, которые вы должны знать В этой статье мы представили несколько инструментов, которые могут захватить файл дампа и его простое использование. Я не знаю, если вы все еще помните,Привилегия администратораЗапустить procdump -i Вы можете зарегистрироваться procdump Передовые отладки. Вы понимаете принцип его реализации? Сегодня давайте раскроем их тайну.
Соглашение
JIT Debugger , Just In Time Debugger , Джит отладчик , Postmortem Debugger , Отладчик после события , Ссылаясь на ту же концепцию —Отладчик после событияОтказ Если Debugger Заменять Debugging Иметь в видуПослеОтказ Иногда я говорю Джит отладчик Иногда я скажу Отладчик после события Я надеюсь, что у всех не должно быть головокружение моей путаницей.
Принцип исследования
Запустить process monitor Открытый мониторинг. Затем выполните привилегии администратора procdump.exe -i После успеха прекратите мониторинг. Чтобы облегчить все, я сознательно записал весь процесс, и я заинтересован в маленьком партнере, но я предлагаю вам лично сражаться, ведь Окончательные чувства на бумаге, воспринимали этот вопрос 。
Если вы не смотрите видео, вы можете напрямую обратиться к результатам моих фильтрованных результатов (зарезервированы Result Да Success из Реестр написать Событие, исключить не реестры, связанные с ними события):
Я яркий с желтым и красным. procdump Операционный ключ реестра. Какие выводы вы можете получить с карты?
procdump Напишу одновременно HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug с участием HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug Ключ реестра.
Я считаю, что есть небольшой партнер, который разработал и знает, что 64 Под битной системой некоторые элементы регистрации имеют два набора: набор предназначен для 64 Используется битовый процесс (желтые блики), набор предназначен для 32 Битовый процесс использует (красная выделенная часть, с Wow6432Node )。
в случае AeDebug Ниже Auto Ребенок и Debugger Должность, procdump Сначала вернется в первую очередь, затем измените. (выполненный procdump -u В то время оригинальные настройки восстановлены)
Auto с участием Debugger Тип данных REG_SZ Отказ (Хотя мы видим Auto Значение 1 )
Наверное, 32 Когда процесс вылетает, он будет использовать его. Wow6432Node Ключ реестра, 64 Когда процесс вылетает, он будет использоваться без Wow6432Node Ключ реестра. Это действительно? Вы знаете, как проверить? Я верю, что вы можете подумать о проверке.
На самом деле вышеуказанная вывод procdump -i Подсказка была приведена в результате вывода (за исключением операции резервного копирования). Обратите внимание на желтые и красные основные моменты на рисунке ниже.
Советы:
Некоторое антивирусное программное обеспечение может быть защищено этим ключом реестра. Если настройка не удалась, пожалуйста, проверьте, является ли это антивирусным программным обеспечением.
На данный момент мы знаем procdump Это через настройку AeDebug Ниже Auto с участием Debugger Реализация детей JIT Debugging Отказ Так что же использование этих двух?
Разведка AEDEBUG
Использовать google искать AeDebug ИскалОфициальное описание Microsoft Заинтересованные партнеры должны прочитать и прочитать, есть много ценной информации.
Auto Элемент: Укажите, следует ли отобразить приглашение ошибки пользователю, если значение "0" Подсказка отображается окно. Для "1" Коробка приглашения не отображается, что непосредственно прикладывает зарегистрированный отладчик событий к целевому процессу.
Debugger Элемент: Укажите путь отладчика после события и пропустите параметры отладчика. Мы обнаруживаем procdump -i Параметры настройки -accepteula -j "E:\dumps" %ld %ld %p Отказ среди них:
- -accepteula Указывает, что принимает пользовательский протокол.
- -j Указывает на то, что в параметре есть указатель JIT_DEBUG_INFO Указатель (родительский процесс) %p Соответствующий контент).
- "E:\dumps" Указывает путь, сохраненный файлом дампа (если запустить procdump -i Когда вы не укажите путь сохранения файла дампа, текущий путь будет принят по умолчанию).
- Первый %ld Представляет процесс целевого процесса ID 。
- второй %ld Указывает на обработку события. Эта обработка событий WER Скопируйте его в отладчик. Если отладчик активирован после события (пройти SetEvent() )Задний, WER Исполнение целевого процесса будет продолжаться, не дожидаясь преследования заслуженности. Если отладчик прекращается без активации события, WER Информация о целевом процессе будет продолжать собираться.
- %p Указать на целевое пространство процесса JIT_DEBUG_INFO Структурный указатель. Содержит ненормальный источник и информацию о контексте, связанную с ненормально.
Если файл дампа сохраняется JIT_DEBUG_INFO , Использовать windbg При отладке вы можете пройти .jdinfo address Чтобы просмотреть информацию, когда происходит исключение. Например, используйте windbg включать procdump При сохранении файлов дампа вы должны увидеть следующую подсказку.
Мы можем войти в соответствии с подсказками .jdinfo 0x1afd59e0000 Для просмотра аномальных источников и контекстной информации.
Описание:
Запустить procdump -i Когда вы не укажете опцию DUAP, вы будете использовать его по умолчанию. -mm Параметры. Эта опция содержит только Process, Thread, Module, Handle and Address Space info. Информация, № %p Соответствующие данные памяти. Если мы в отладке -mm Выполните, когда опция сохранена файл дампа .jdinfo address Получите следующую ошибку:
Unable to process JIT_DEBUG_INFO, Win32 error 0n30
Мы можем просто передать обозначенным -ma Или же -mp Для генерации файла дампа, содержащего данные памяти, поэтому мы выполняем в отладчике .jdinfo address Я не сообщу об ошибке.
По мнению я наблюдаю, для procdump Убежденный -j с участием %p Варианты должны быть переданы одновременно, и это невозможно.
Исключить процесс
Если мы действительно не хотим делать некоторые проблемы, он прерывается, когда нет никакой аномалии. JIT Есть ли путь к отладчику? Из vista Начните, мы можем показать исключить определенные процессы, не позволяйте этим процессам прерываться, когда нет ненормальности JIT В отладчике. Соответствующая регистрационная форма заключается в следующем:
Ниже приведена значение ключа реестра на моей машине:
Выше demo.exe Я принимаю ручное дополнение, но DWM.exe Это добавлена система. windows Почему это по умолчанию DWM.exe Добавить в эксклюзивный список? Я не очень понятен, но яExcluding an Application from Automatic Debugging Смотрите такое предложение:
By default, the Desktop Window Manager (Dwm.exe) is excluded from automatic debugging because otherwise a system deadlock can occur if Dwm.exe stops responding (the user cannot see the interface displayed by the debugger because Dwm.exe isn’t responding, and Dwm.exe cannot terminate because it is held by the debugger).
Я думаю, что это DWM.exe Причины будут исключены.
Если вы хотите достичь с помощью формы кода, в дополнение к прямой работе реестра вы можете пройти WerAddExcludedApplication() Для достижения, соответствия, может пройти WerRemoveExcludedApplication() Удалить. Прототип этих двух функций выглядит следующим образом:
Первый параметр pwzExeName Представляет программу исключить, не приносит путь, пройдите только имя программы. такой как, demo.exe 。
Второй параметр bAllUsers в случае FALSE Если это означает, что активен только текущий пользователь, другие пользователи не затрагиваются, изменены HKCU ( HKEY_CURRENT_USER Соответствующий ключ реестра. Если TRUE Если вы вступили в силу на всех пользователях, вы можете изменить его. HKLM ( HKEY_LOCAL_MACHINE Соответствующий ключ реестра, TRUE Когда вам нужен привилегии администратора.
Примечание:
Если вы вручную вызовите код, чтобы управлять реестром, будьте осторожны 64 Вопросы по перенаправлению таблицы регистрации под битовой системой. Я считаю, что должен быть маленький партнер, чтобы наступить на эту яму, как я.
Операционный механизм отладки JIT
Весь механизм работы, в Чжан Юнгуи, «Программная комиссия» (первое издание), глава 12: непредвиденные исключения и отладки JITОчень подробноВступление. Я не буду добывать, а маленькие друзья, которые заинтересованы, должны прочитать больше.
Что такое AE в Aeddebug?
AeDebug середина Debug Очень хорошо понимать, что это значит отлаживать. потом Ae В чем смысл? кто-то сказал AeDebug Да Auto Exception Debug Аббревиатура, это очень разумно. случайная возможность, google Прибыли Ramond Chen Статья написана -What does the “Ae” stand for in AeDebug?Отказ Согласно его заявлению, Ae Указывать Application Error значение. Я взял оригинальный текст следующим образом, чтобы все читали.
Независимо от того AeDebug Какова аббревиатура, все знают, что значение этого ключа реестра достаточно, и не стоит слишком запутаться. В противном случае это действительно дыра.
подводить итоги
При нормальных обстоятельствах, измените HKLM Привилегии подразделения нуждаются в администраторах.
регистр JIT Отладчик требует привилегий администратора, потому что HKLM Следующий подраздел.
procdump в состоянии пройти -i Опция зарегистрирована как инцидент отладчик, кроме того, windbg Может пройти -I Опция зарегистрирована как отладчик событий.
AeDebug Ключ реестра JIT Ключ для отладки, регистрационный элемент 64 Битовая система 32 Процесс позиции и 64 Битовый процесс имеет соответствующий ключ реестра соответственно. Среди них, с Wow6432Node Ключ реестра дан 32 Используется битный целевой процесс.
64 Под битовой системой, в дополнение к AeDebug Есть два набора, есть еще много других элементов реестра.
Если вы действительно не хотите свой собственный процесс, вы будете прерываться, когда вы не обрабатывали аномалии. JIT В отладчике вы можете установить реестр для исключения ( Vista И после того, как операционная система поддерживается).
just in time debugging что это такое
Страница «JIT-отладка», папка «Отладка», диалоговое окно «Параметры»
Чтобы получить доступ к странице JIT, перейдите к меню Сервис и щелкните пункт Параметры. В диалоговом окне Параметры разверните узел Отладка и выберите JIT. Эта страница позволяет включить JIT-отладку для управляемого кода, машинного кода и скриптов. Дополнительные сведения см. в разделе JIT-отладка.
JIT-отладку можно разрешить для программ следующих типов:
JIT-отладка — это технология отладки программы, запускаемой вне Visual Studio. Программу, созданную в Visual Studio, можно выполнять вне среды Visual Studio. Если включена JIT-отладка, сбой программы вызовет появление диалогового окна с вопросом о том, необходимо ли выполнить отладку.
Связанные предупреждения
При посещении этой страницы из диалогового окна Параметры можно увидеть предупреждающее сообщение, например следующего содержания:
В качестве JIT-отладчика был зарегистрирован другой отладчик. Для восстановления включите JIT-отладку или запустите средство восстановления Visual Studio.
Это сообщение возникает, если в качестве JIT-отладчика установлен другой отладчик, возможно, отладчик Visual Studio более старой версии.
Также возможно отображение следующего сообщения:
Обнаружены ошибки регистрации JIT-отладки. Для восстановления включите JIT-отладку или запустите средство восстановления Visual Studio.
Если отобразилось любое из этих предупреждений, для JIT-отладки с Visual Studio 2012 необходимы права администратора до тех пор, пока проблема не будет устранена. Если попытаться разрешить проблему, не имея прав администратора, возникает следующее сообщение об ошибке:
Отказано в доступе. Администратор должен включить JIT-отладку или восстановить установку Visual Studio.
Отключение JIT-отладки
Диалоговое окно JIT-отладки может открываться при возникновении ошибок в используемом приложении, препятствуя его работе.
JIT-отладчик позволяет быстро запустить Visual Studio для устранения ошибки. Для просмотра подробных сведений об ошибке или попытки отладки нужно установить среду Visual Studio или другой отладчик.
Если вы уже являетесь пользователем Visual Studio и после возникновения ошибки намерены выполнить отладку с помощью JIT-отладчика, перейдите к этой статье. Если вам не удается исправить ошибку или вы хотите запретить открытие JIT-отладчика, вы можете отключить JIT-отладку из Visual Studio.
Если набор средств Visual Studio был ранее установлен, но теперь его нет, придется нужно будет JIT-отладку через реестр Windows.
Если набор средств Visual Studio не установлен, для отключения JIT-отладки можно отключить отладку скриптов или отладку на стороне сервера.
Если вы пытаетесь запустить веб-приложение, отключите отладку скриптов.
Если вы размещаете веб-приложение ASP.NET в IIS, отключите отладку на стороне сервера, выполнив следующие действия:
Возможно, отключение JIT-отладки позволит приложению преодолеть ошибку и работать нормально.
Если необработанная ошибка в приложении сохранится, может отобразиться сообщение об ошибке либо приложение может перестать отвечать или аварийно завершить работу. В этом случае нормальная работа приложения будет невозможна без исправления ошибки. Попробуйте связаться с теми, кто отвечает за это приложение, и попросить исправить ошибку.
Отладка с помощью JIT-отладчика в Visual Studio
JIT-отладка автоматически запускает Visual Studio при возникновении ошибок или сбоев в приложении, запущенном вне Visual Studio. С помощью JIT-отладки можно тестировать приложения за пределами Visual Studio и открыть Visual Studio, чтобы начать отладку в случае проблемы.
JIT-отладка работает для классических приложений Windows. Она не работает для универсальных приложений Windows или управляемого кода, размещенного в приложении машинного кода, например для визуализаторов.
Если вы просто хотите запретить отображение диалогового окна JIT-отладчика, но у вас не установлена Visual Studio, см. раздел Отключение JIT-отладчика. Если набор средств Visual Studio был ранее установлен, но теперь его нет, придется отключить JIT-отладку через реестр Windows.
Включение или отключение JIT-отладки в Visual Studio
Чтобы включить или отключить JIT-отладку, необходимо запустить Visual Studio от имени администратора. Включение или отключение JIT-отладки устанавливает раздел реестра. Для его изменения требуются права администратора. Откройте Visual Studio с правами администратора, щелкнув приложение Visual Studio правой кнопкой мыши и выбрав Запуск от имени администратора.
JIT-отладку можно настроить в диалоговом окне Visual Studio Сервис > Параметры (или Отладка > Параметры).
Включение или отключение JIT–отладки
В меню Сервис или Отладка выберите Параметры > Отладка > JIT.
В поле Включить JIT-отладку для этих типов кода выберите типы кода, которым требуется JIT-отладка: Управляемый, Собственный и (или) Скрипт.
Нажмите кнопку ОК.
Если вы включили JIT-отладчик, но он не открывается при сбоях или ошибках приложения, см. раздел Устранение неполадок с JIT-отладкой.
Отключение JIT-отладки из реестра Windows
JIT-отладка может оставаться включенной даже после удаления Visual Studio с компьютера. Если Visual Studio больше не установлена, JIT-отладку можно отключить, отредактировав реестр Windows.
Отключение JIT-отладки путем редактирования реестра
В меню Windows Пуск запустите редактор реестра (regedit.exe).
В окне Редактор реестра найдите и удалите следующие записи реестра.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\DbgManagedDebugger
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger
Если на компьютере установлена 64-разрядная операционная система, также удалите следующие записи реестра.
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\DbgManagedDebugger
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger
Будьте внимательны, чтобы не удалить или не изменить другие разделы реестра.
Закройте окно Редактор реестра.
Включение JIT-отладки для приложений Windows Forms
По умолчанию в приложениях Windows Forms есть обработчик исключений верхнего уровня, который позволяет приложению продолжить работу, если оно может быть восстановлено. Если приложение Windows Forms выдает необработанное исключение, отображается следующее диалоговое окно:
Чтобы включить JIT-отладку вместо стандартной обработки ошибок Windows Forms, добавьте следующие параметры.
Для получения дополнительной информации см. DebuggableAttribute.
Использование JIT-отладки
В этом примере рассматривается JIT-отладка, когда приложение выдает ошибку.
Для выполнения инструкций необходимо установить Visual Studio. Если у вас нет Visual Studio, вы можете скачать бесплатный выпуск Visual Studio Community.
Убедитесь, что JIT-отладка включена в разделе Сервис > Параметры > Отладка > JIT.
В этом примере вы создадите консольное приложение C# в Visual Studio, которое создает исключение NullReferenceException.
В Visual Studio создайте консольное приложение C# (Файл > Создать > Проект > Visual C# > Консольное приложение) с именем ThrowsNullException. Сведения о создании проектов в Visual Studio см. в разделе Пошаговое руководство. Создание простого приложения.
Когда проект откроется в Visual Studio, откройте файл Program.cs. Замените метод Main() следующим кодом, который выводит строку на консоль, а затем создает исключение NullReferenceException:
Чтобы выполнить сборку решения, выберите конфигурацию Отладка (по умолчанию) или Выпуск, а затем нажмите Сборка > Перестроить решение.
Дополнительные сведения о конфигурациях сборки см. в разделе Общие сведения о конфигурациях сборки.
Откройте созданное приложение ThrowsNullException.exe в папке проекта C# ( . \ThrowsNullException\ThrowsNullException\bin\Debug или . \ThrowsNullException\ThrowsNullException\bin\Release).
Вы увидите следующее окно команд:
Откроется диалоговое окно Выбор JIT-отладчика.
Нажмите кнопку ОК.
Проект ThrowsNullException открывается в новом экземпляре Visual Studio, а выполнение остановлено в строке, вызвавшей исключение:
Теперь можно начать отладку. При отладке реального приложения необходимо выяснить, почему код создает исключение.
Если приложение содержит ненадежный код, появляется диалоговое окно предупреждения системы безопасности, позволяющее решить, следует ли продолжить отладку. Перед продолжением отладки решите, доверяете ли вы данному коду. Этот код написан вами самостоятельно? Если приложение выполняется на удаленном компьютере, узнаете ли вы имя процесса? Если приложение выполняется локально, учитывайте возможность выполнения такого вредоносного кода на вашем компьютере. Если вы решили, что код заслуживает доверия, нажмите ОК. В противном случае нажмите кнопку Отмена.
Устранение неполадок с JIT-отладкой
Если JIT-отладка не запускается при сбое приложения, даже если она включена в Visual Studio:
Отчеты об ошибках Windows могут взять на себя обработку ошибок на компьютере.
Чтобы устранить эту проблему, используйте редактор реестра, чтобы добавить значение DWORD Отключено с параметром Данные значения, равным 1, для следующих разделов реестра:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Windows Error Reporting
(Для 64-разрядных компьютеров): HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Windows\Windows Error Reporting
Известная проблема Windows может привести к сбою JIT-отладчика.
Исправление состоит в том, чтобы добавить значение DWORD из раздела Видимые с параметром Значение данных, равным 1, в следующие разделы реестра.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug
(Для 64-разрядных компьютеров): HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug
Во время JIT-отладки могут отображаться следующие сообщения об ошибках.
Не удалось подключиться к аварийному процессу. Указанная программа не является программой Windows или MS–DOS.
Отладчик попытался подключиться к процессу, выполняющемуся под именем другого пользователя.
Чтобы обойти эту проблему, запустите Visual Studio, откройте диалоговое окно Отладка > Присоединение к процессу (или нажмите сочетание клавиш CTRL + ALT + P) и найдите процесс, для которого требуется выполнить отладку, в списке Доступные процессы. Если имя процесса неизвестно, найдите идентификатор процесса в диалоговом окне JIT-отладчик Visual Studio. Выберите процесс в списке Доступные процессы и щелкните Присоединить. Выберите Нет, чтобы закрыть диалоговое окно JIT-отладчика.
Не удалось запустить отладчик, так как пользователь не вошел в систему.
В консоли нет пользователей, выполнивших вход, а также отсутствует сеанс пользователя, в котором следовало бы отображать диалоговое окно JIT-отладки.
Для решения этой проблемы необходимо войти в компьютер.
Класс не зарегистрирован.
Отладчик пытался создать класс COM, который не зарегистрирован, вероятно, из-за проблем с установкой.
Чтобы решить эту проблему, используйте Visual Studio Installer для переустановки или исправления установки Visual Studio.
Just in time debugging что это такое
Сообщения: 166
Благодарности: 0
Профиль | Отправить PM | Цитировать
Сообщения: 52194
Благодарности: 15076
Сообщения: 52194
Благодарности: 15076
Сообщения: 52194
Благодарности: 15076
Сообщения: 36075
Благодарности: 6528
Сообщения: 52194
Благодарности: 15076
Как отключить отладчик Just in Time?
Просто предоставил новый сервер, на котором запущены IIS и Server 2012 и SQL Server 2012. Я также установил инструмент SQL Server Management Studio, чтобы я мог быстро проверять базы данных без необходимости открывать удаленное соединение.
Когда я просматриваю сайты ASP.NET удаленно, я получаю диалоговое окно исключения времени debgugger, когда ошибка встречается в дополнение к желтому экрану. Диалог остается на сервере и накапливается, если я не RDP и не закрываю вручную все диалоговые окна.
Единственный способ отключить это – удалить Visual Studio Shell 2010 (интегрированный) с помощью панели управления. Побочным эффектом является то, что я больше не могу использовать SSMS.
Большинство доступных решений устарели или не работают. Параметры реестра больше не применимы, и большинство статей, посвященных этой проблеме, являются старыми. Официальная документация Microsoft – это крысиное гнездо неработающих ссылок. Более того, многие пользователи путают диалог отладки IE script с этой проблемой. Хотя они связаны и похожи, эта конкретная проблема связана с средой выполнения Visual Studio.
ASIDE: Я не могу поверить, что Microsoft имеет эту “функцию” на продукте, который установлен на производственном сервере. Я просто покрыт некомпетентностью многомиллиардной корпорации. Я видел, как мой вопрос задавался с по крайней мере с 2005 года без официального решения, которое работает. Я просто должен попросить последний раз проверить здравомыслие. Я хочу убедиться, что я не тот, кто “толст” в голове здесь.
Вы должны отключить отладку Jist-In-Time, используя диалог “Параметры отладки” внутри Visual Studio. Ключи реестра также хорошо описаны здесь.
Кроме того: я считаю, что не разумно устанавливать студию управления на производственном сервере. Для этого нужны рабочие станции управления. Удаленные соединения с управляющей станции могут быть предварительно сконфигурированы и сохранены, так что это не потребует больших усилий. Таким образом, вы можете поддерживать чистоту своей производственной среды.
Чтобы отключить отладку Just-In-Time, отредактировав реестр
В меню “Пуск” выберите “Выполнить”.
В диалоговом окне “Запуск” введите regedit и нажмите “ОК”.
В окне редактора реестра найдите и удалите следующие разделы реестра:
Если на вашем компьютере установлена 64-разрядная операционная система, удалите также следующие разделы реестра:
Не производите случайного удаления или изменения других разделов реестра.
Вместо того, чтобы удалять его, вы можете просто (временно) переименовать клавишу AeDebug для того, чтобы битбивость по вашему выбору была чем-то еще, например. AeDebug-disable!
Что работала в старой школе, переименовавшей исполняемый файл JIT Debug.
Переименованы эти файлы.
Переименована в эту папку
Как продолжение nfox answer, я создал файл реестра, который можно просто использовать вместо поиска вручную через regedit.exe.
1.) Скопируйте этот script в буфер обмена:
например. в файл с именем
3.) Дважды щелкните файл
После подтверждения появляющегося окна сообщения ключи удаляются.
5.) Альтернативно: Загрузите файл
Если это слишком много, вы можете скачать файл реестра здесь:
Загрузите, а затем дважды щелкните по нему.
Этот совет был просто взят из статьи MSDN “” Отладка вовремя в Visual Studio“.
Как остановить сообщения "Just In Time Debugging", блокирующие сервер сборки
Наш buildserver (TeamCity, очень рекомендуется), запускает целую кучу тестов в нашей готовой программе на С++.
В целом тест приводит к сбою нашей программы, что часто приводит к появлению диалогового окна VisualStudio, предлагающего мне отладку JustInTime сбой. Диалоговое окно перестает работать с сервером buildserver. Вместо сборки, помеченной как неудачная, она просто зависает. Я отключил функцию отладки Just In Time в VisualStudio, но когда она отключена, вы все равно получаете сообщение «Не удалось JustinTime Debug this, вы можете включить его в настройках».
Кто-нибудь знает, как обеспечить, чтобы любое необработанное исключение в программе не приводило к изменению модального диалога?
Удалить (или переименовать) c:\windows\system32\vsjitdebugger.exe.
Я попытался удалить разделы реестра, и я попытался снять флажки со всеми полями в параметрах Visual Studio, но не работал.
Чтобы быть ясным, моя ситуация не была С++. Я использовал Micro Focus COBOL для Visual Studio 2010, и, используя варианты настроек реестра и VS, мне удалось избавиться от «Хотите отлаживать»? диалог, но это привело к другому диалогу, чтобы задержать мой автоматический процесс:
C# Debug vs Release. Сборки и дебаг
Из коробки в C# нам доступны 2 способа сборки проекта release и debug.
О компиляции C# кода
Исходный код C # проходит через 2 этапа компиляции, чтобы стать инструкциями CPU, которые могут быть выполнены.
Обычно первый этап происходит на вашем CI сервере, а второй шаг происходит позже, во время работы самого приложения. Когда же мы работаем локально в Visual Studio, то она все эти шаги выполняет перед запуском приложения из меню Debug.
Шаг первый. Компиляция приложения
Ваш код превращается в Common Intermediate Language (CIL), который уже может быть выполнен в любом окружении, которое поддерживает CIL. Обратите внимание, что собранная сборка не является читаемым текстом IL, а фактически метаданными и байтовым кодом в виде двоичных данных.
На данном шаге будет выполнена некоторая оптимизация кода (будет описано дальше).
Шаг второй. JIT компилятор
JIT компилятор конвертирует IL код в инструкции процессора, которые можно выполнить на вашей машине. Однако не вся компиляция происходит заранее — в нормальном режиме, код компилируется, только тогда когда его вызывают в первый раз, после чего он кэшируется.
Компилятор JIT — это всего лишь один из целого ряда сервисов, которые составляют Common Language Runtime (CLR), позволяя ему выполнять код .NET.
Основная часть оптимизации кода будет проведена на этом шаге.
Что такое оптимизация кода в одном предложении?
Это процесс улучшения таких факторов, как скорость выполнения, размер кода, энергопотребление, а в случае .NET — время, которое требуется для компилятора JIT — без изменения функциональности.
Почему мы заинтересованы в оптимизации в этой статье?
На обоих этапах компиляции ваш код будет оптимизирован компиляторами. Одно из ключевых различий между конфигурациями сборки Debug и Release заключается в том, отключены ли оптимизации или нет, поэтому нам нужно понять последствия данных оптимизации.
Оптимизация компилятора C#
C# компилятор на самом деле делает очень мало оптимизаций. На самом деле большенство оптимизаций производит JIT компилятор во время генерирования машинного кода. Тем не менее это все равно ухудшит работу по отладке.
Инструкция nop в IL
Команда nop имеет ряд применений при программировании на низком уровне, например, для включения небольших предсказуемых задержек или инструкции по перезаписи, которые вы хотите удалить. В IL коде данные конструкции помогают при использовании точек останова (breakpoints) для того чтобы они вели себя предсказуемо.
Если мы посмотрим на IL код, который сгенерирован с отключенными оптимизациями:
Эта инструкция мапиться с фигурной скобкой, для того чтобы мы могли поставить на нее точку остановки:
Даная инструкция была бы удалена если у нас включены оптимизации, что повлияло бы на отладку приложения.
Более подробное обсуждение оптимизаций компилятора C# в статье Эрика Липперта: Что делает переключатель оптимизации?. Существует также хороший комментарий о IL до и после оптимизации здесь.
Оптимизация JIT компилятора
Несмотря на то, что он быстро выполняет свою работу во время выполнения, компилятор JIT также выполняет множество оптимизаций. О его внутренних деталях мало информации. Даже во время работы вашего приложения он производит профилирование и, возможно, перекомпилирование кода для повышения производительности.
Хорошие примеры оптимизации с помощью JIT компилятора можете посмотреть здесь.
Я рассмотрю один пример, чтобы проиллюстрировать влияние оптимизации на отладку.
Встраивание методов
Для реальной оптимизации, сделанной компилятором JIT, я буду показывать инструкции по сборке. Это всего лишь макет на C #, чтобы дать вам общую идею.
Предположим, что у меня есть:
Компилятор JIT, скорее всего, выполнит встроенное расширение. Он заменит вызов метода Add() телом данного метода:
Конфигурации сборки по умолчанию
Итак, теперь, когда мы обновили понимание компиляции .NET и двух «слоев» оптимизации, давайте взглянем на 2 конфигурации сборки, доступные «из коробки»:
Довольно просто — релиз полностью оптимизирован, отладка совсем отсутствует, что, как вы сейчас знаете, имеет фундаментальное значение для того, насколько легко отлаживать ваш код. Но это просто поверхностное представление о возможностях аргументов отладки и оптимизации.
Внутренности аргументов оптимизации и отладки
Я попытался продемонстрировать данные аргументы из кода Roslyn и mscorlib. Теперь мы имеем следующие классы:
Синие элементы обозначаю аргументы командной строки, а зеленые их представление в коде.
Перечисление OptimizationLevel
OptimizationLevel.Debug отключает все оптимизации для C# и JIT компилятора с помощью DebuggableAttribute.DebuggingModes, который с помощью ildasm, мы можем видеть:
OptimizationLevel.Release включает все оптимизации (DebuggableAttribute.DebuggingModes = ( 01 00 02 00 00 00 00 00 )) что в свою очередь соответсвует DebuggingModes.IgnoreSymbolStoreSequencePoints
При этом уровне оптимизации точки останова могут быть оптимизированы. Что приведет к тому что мы не сможем их поставить и остановиться.
Типы IL
Типы IL кода описаны в классе ILEmitStyle.
На диаграмме выше показано, что тип генерируемого IL кода C# компилятором зависит от OptimizationLevel.
Аргумент debug не меняет его, за исключение аргумента debug+ когда OptimizationLevel установлен в Release.
- ILEmitStyle.Debug — нету оптимизация IL в дополнение к добавлению nop инструкций для сопоставления точекостановки с IL.
- LEmitStyle.Release — полная оптимизация.
- ILEmitStyle.DebugFriendlyRelease — выполняет только те оптимизации, которые не помешаю отладке приложения.
Следующий кусок кода продемонстрирует все это наглядно.
Комментарий в исходном файле Optimizer.cs гласит, что они не опускают никаких определенных пользователем локальных переменных (примеры на 28 строчке) и не переносят значения в стек между операторами.
Я рад, что прочитал это, так как я был немного разочарован своими собственными экспериментами в ildasm с debug +, поскольку все, что я видел, это сохранение локальных переменных.
Нет намеренной «деоптимизации», например, добавления команд nop.
Разница между debug, debug:full и debug:pdbonly.
На самом деле разницы никакой нету, что подтверждает официальная документация:
Результат остается одним и тем же — pdb файл создается.
Подгланув в CSharpCommandLineParser можем убедиться в этом. И для того чтобы проверить это, мне удалось отладить код с помощью WinDbg для обох аргументов (pdbonly и full).
Они не влияют на оптимизацию кода.
Как плюсом могу отметить что документация на Github более актуальна, но она не открывает свет на специфическое поведение для debug+
А что же такое этот ваш pdb файл?
Все очень просто, данный файл содержит всю необходимую информацию для отладки DLL и EXE. Что помогает сопоставить отладчику IL код с инструкциями в оригинальном C# коде.
Что на счет debug+?
debug+ это особенный аргумент, который не может быть заменен с помощью full и pdbonly. Как многие заметили, данный аргумент соответствует debug:full — это на самом деле не совсем правда. Если мы используем аргумент optimize-, поведение будет таким же, но для optimize+ будет свое собственное уникальное поведение (DebugFriendlyRelease).
debug- или без аргументов?
Значения по умолчанию, которые установлены в CSharpCommandLineParser.cs.
а значения для debug=:
Таким образом, мы можем с уверенностью сказать, что debug- и отсутствие аргументов отладки, приводет к одному и тому же эффекту — pdb файл не будет создан.
Запрет оптимизации JIT при загрузке модуля (Suppress JIT optimizations)
Флажок в разделе «Options->Debugging->General» это опция для отладчика в Visual Studio и не повлияет на сборки, которые вы создаете.
Вы должны теперь оценить, что компилятор JIT делает большую часть значительных оптимизаций и является большим препятствием для сопоставления исходного исходного кода для отладки. Если этот параметр включен, тогда он запросит DisableOptimizations.
Обычно этот параметр включаю для того чтобы отладить внешние библиотеки или пакеты NuGet.
Если мы хотим подключиться отладчиком Visual Studion к продакшен сборке, которая собрана в релизной конфигурации, то при наличии у нас pdb файла, мы может еще одним способом указать JIT компилятору, о том чтобы он не оптимизировал код. Для этого нужно добавить .ini файл с таким же названием как выполняемая библиотека и указать в нем:
Что такое Just My Code?
По умолчанию эта настройка уже включена (Options->Debugging→Enable Just My Code) и отладчик думает что оптимизированный код не является пользовательским. Поэтому отладчик никогда не зайдет в такой код.
Вы можете отключить данный флаг и это, теоретически, позволит вам поставить точку остановки. Но теперь вы отлаживаете код, оптимизированный как компиляторами C# так и JIT, который едва соответствуют исходному коду. В результате у вас будут такие артефакты отладки, как непредсказуемые переходы в коде и скорее все вам не получиться получить значения в локальных переменных.
Этот параметр стоит отключать в том случае, когда у вас есть pdb файл.
Взглянем ближе на DebuggableAttribute
Выше я упомянул использование ildasm для изучения манифеста сборок для изучения DebuggableAttribute. Я также написал небольшой PowerShell скрипт для получения более дружественного результата (ссылка на скачивание).
Что такое jit-отладка?
Когда отладка JIT включена, любое необработанное исключение?
Когда JIT-отладка включена, любое необработанное исключение будет отправляется JIT-отладчику, зарегистрированному на компьютеру, а не этому диалоговому окну».
Как включить JIT?
В области сведений инструмента администрирования служб компонентов щелкните правой кнопкой мыши компонент, который требуется настроить, и выберите пункт Свойства. В диалоговом окне свойств компонента щелкните вкладку Активация. Чтобы включить активацию JIT для компонента, установите флажок «Включить активацию точно в срок». Нажмите «ОК».
Что такое отладка моего кода?
Просто мой код Функция отладки Visual Studio, которая автоматически обходит вызовы системного, фреймворкового и другого непользовательского кода.. В окне «Стек вызовов» функция «Только мой код» сворачивает эти вызовы во фреймы [Внешний код].
Что означает начать отладку?
Описание: Чтобы отладить программу, пользователь должен начать с проблемы, изолируйте исходный код проблемы, а затем исправьте его. Пользователь программы должен знать, как решить проблему, так как от него требуется знание анализа проблемы. Когда ошибка устранена, программное обеспечение готово к использованию.
Своевременное исправление ошибки отладчика JIT
Что является примером отладки?
При разработке программного обеспечения процесс отладки начинается, когда разработчик обнаруживает ошибку кода в компьютерной программе и может ее воспроизвести. . Например, инженер может запустить тест соединения JTAG для отладки соединений на интегральной схеме.
Почему отладка так сложна?
Отладка сама по себе очень сложный процесс из-за участия человека. Еще одна причина, по которой он считается сложным, потому что он также требует большого количества времени и ресурсов.
Что такое путь PDB?
База данных программы (PDB) — это собственный формат файла (разработанный Microsoft) для хранения отладочной информации о программе (или, как правило, программных модулях, таких как DLL или EXE). Файлы PDB обычно имеют расширение . расширение ПДБ. Файл PDB обычно создается из исходных файлов во время компиляции.
Как отлаживать в Visual Studio?
- Для отладки вам нужно запустить приложение с отладчиком, прикрепленным к процессу приложения. .
- Нажмите F5 (Отладка > Начать отладку) или кнопку Начать отладку. .
- Чтобы запустить приложение с подключенным отладчиком, нажмите клавишу F11 («Отладка» > «Пошаговое выполнение»).
Что такое DebuggerStepThrough?
Пометка фрагмента кода с помощью атрибута DebuggerStepThrough указывает отладчик Visual Studio что блок кода будет исключен из процесса отладки. Вы можете пометить методы и свойства с помощью атрибутов DebuggerStepThrough, если вы не хотите, чтобы ваш код ломался.
Как остановить JIT-отладку?
В Панели управления Windows > Сеть и Интернет > Свойства обозревателя, выберите Отключить отладку сценариев (Internet Explorer) и Отключить отладку сценариев (другое). Точные шаги и настройки зависят от вашей версии Windows и вашего браузера.
Как включить JIT-отладку?
- В меню «Инструменты» или «Отладка» выберите «Параметры» > «Отладка» > «Точно вовремя».
- В поле Включить отладку Just-In-Time для этих типов кода выберите типы кода, для которых требуется отладка Just-In-Time: Managed, Native и/или Script.
- Выберите ОК.
Как вы проверяете, включен JIT или нет?
Вы можете отключить JIT-компилятор с использованием -Djava. компилятор = NONE для виртуальной машины Java. Таким образом, вы можете сделать вывод, что когда переменная не установлена или установлена в значение, отличное от NONE, тогда JIT включен.
Что означает JIT?
Вовремя, или JIT, — это метод управления запасами, при котором товары принимаются от поставщиков только по мере необходимости. Основной целью этого метода является снижение затрат на хранение запасов и увеличение оборачиваемости запасов.
Как отключить JIT?
- Укажите -Джава. компилятор=НЕТ в командной строке.
- Укажите -Xint в командной строке, чтобы отключить компилятор JIT и AOT. Чтобы устранить проблемы с одним или другим, вы можете выборочно отключить эти компиляторы с помощью параметров -Xnojit и -Xnoaot.
- Звоните в Яву.
Как исправить необработанное исключение, возникшее в вашем приложении?
- Произошло необработанное исключение Win32.
- Удаление программы в Панели управления.
- Удаление вашего антивируса.
- Запуск панели управления.
- Включение последней версии .NET Framework.
- Запуск MSCONFIG.
- Отключение всех сторонних служб.
Как выполнить отладку UFT?
- Выберите в документе шаг, на котором вы хотите остановить UFT One, и выберите «Выполнить» > «Выполнить до шага».
- Выберите шаг, на котором вы хотите, чтобы UFT One запускал запуск, и выберите «Выполнить» > «Отладка с шага».
Как отладить в селене?
- В первом методе
- Щелкните правой кнопкой мыши команду и выберите «Переключить точку останова». .
- Вы можете установить точку останова непосредственно перед тестовым набором, который хотите изучить.
- После установки точек останова нажмите кнопку «Выполнить», чтобы запустить тестовый пример от начала до точки останова.
Как отладить SSIS?
- В SQL Server Data Tools (SSDT) откройте проект служб Integration Services, содержащий нужный пакет.
- Дважды щелкните пакет, в котором вы хотите установить точки останова.
- В конструкторе служб SSIS выполните следующие действия.
Как отлаживать файлы PDB?
2 ответа. Самый простой способ использовать файл PDB — это пусть Visual Studio сделает тяжелую работу — либо запустите программу с помощью команды "Отладка" Visual Studio (по умолчанию F5), либо запустите программу и используйте пункт "Присоединить к процессу" в меню "Отладка" Visual Studio.
Куда идут файлы PDB?
pdb хранит всю отладочную информацию для файла .exe проекта и находится в подкаталог \debug. . pdb содержит полную отладочную информацию, включая прототипы функций, а не только информацию о типе, найденную в VC. пдб.
Что понимается под ПДБ?
То Банк данных о белках (PDB) — это база данных трехмерных структурных данных больших биологических молекул, таких как белки и нуклеиновые кислоты. . PDB контролируется организацией под названием Worldwide Protein Data Bank, wwPDB. PDB является ключевым в таких областях структурной биологии, как структурная геномика.
Насколько сложна отладка?
"Отладка в два раза сложнее, чем писать код в первую очередь. Следовательно, если вы пишете код настолько умно, насколько это возможно, вы по определению недостаточно умны, чтобы его отлаживать».
Что означает отладка в кодировании?
Средства отладки для запуска шага кода шаг за шагом в инструменте отладки, таком как Visual Studio, чтобы найти точную точку, где вы допустили ошибку программирования. Затем вы понимаете, какие исправления вам нужно внести в свой код, а инструменты отладки часто позволяют вам вносить временные изменения, чтобы вы могли продолжить работу с программой.
На каком языке проще всего отлаживать?
Java является статически типизированным и компилируемым языком. Питон является динамически типизированным и интерпретируемым языком. Это единственное отличие делает Java быстрее во время выполнения и проще в отладке, но Python проще в использовании и легче для чтения.