Как запустить отладку dll windows 10

Обновлено: 07.07.2024

Отладка DLL

Хотя в виде DLL реализуются самые различные объекты, существует 2 общих принципа отладки, применимых ко всем разновидностям DLL.

  • Поскольку DLL не может выполняться сама по себе, для её отладки необходимо запустить под отладчиком любое использующее её приложение. Полный путь к exe-файлу этого приложения необходимо указать в настройках отладки.
  • Необходимо также проследить, чтобы при запуске приложения отладчик загружал отладочные символы нашей DLL. Иначе все точки останова, поставленные в коде DLL, будут отключены. По умолчанию символы загружаются только для тех DLL, которые подключаются при запуске приложения. Для всех остальных (к ним, в частности, относятся все внутрипроцессные COM-серверы) загрузка символов не производится. Если отлаживаемая DLL принадлежит к этой категории, для неё необходимо явно потребовать загрузку отладочных символов. Для этого следует добавить её в список Additional DLLs в настройках отладки.

Дальнейшая отладка DLL ничем принципиально не отличается от отладки приложений.

Иногда приложение, использующее DLL, само должно запускаться ещё одним приложением (именно такая ситуация имеет место с ISAPI-расширениями, которые загружает сервис IIS). В этом случае можно придерживаться следующей тактики.

  1. Подключиться к приложению, используя методики из предыдущего раздела (в данном случае вызов DebugBreak придётся вставлять в код DLL). Если приложение продолжает выполнение, остановить его ( Debug->Break ).
  2. Убедиться, что отладчик загрузил символы для DLL (в окне Debug должна появиться строчка вида "Loaded symbols for <имя DLL>"). Если этого не произошло, следует добавить отлаживаемую DLL в список Additional DLLs .
  3. Открыть файлы с исходными текстами DLL (не открывая её проекта!) и расставить необходимые точки останова.
  4. Возобновить выполнение приложения.

Отладка расширений оболочки Windows

Для расширений оболочки Windows в качестве отлаживаемого приложения указывается explorer.exe .

Закрытие оболочки Windows

Поскольку в системе не могут работать две оболочки одновременно (об исключениях из этого правила мы поговорим немного позже), необходимо завершить оболочку Windows, прежде чем запускать новую из-под отладчика. Чтобы завершить оболочку, нужно:

  • Выбрать команду Start->Shut Down .
  • Щёлкнуть по кнопке No в раскрывшемся диалоге, удерживая клавиши Ctrl+Alt+Shift .

В Windows 2000 вместо кнопки No следует щёлкнуть по кнопке Cancel .

Повторный запуск оболочки

Чтобы снова запустить оболочку по окончании сеанса отладки, достаточно запустить explorer.exe из любой оболочки или из командной строки. Если ни оболочки, ни командной строки под рукой нет, можно использовать следующие приёмы.

Под Windows NT/2000:

  • Нажать Ctrl+Alt+Del.
  • Вызвать Task Manager.
  • Выбрать команду File->New Task (Run) и запустить оболочку.
  • Сделать двойной щелчок по рабочему столу. Откроется диалоговое окно Task .
  • Выбрать команду File->Run и запустить оболочку.

Отладка расширений в Windows NT/2000

В Windows NT/2000 можно запускать каждый новый экземпляр Проводника (Windows Explorer) в отдельном процессе (по умолчанию рабочий стол, панель задач и все Проводники запускаются в отдельных потоках одного процесса Explorer.exe). Благодаря этому можно обойтись без постоянных перезапусков оболочки. Чтобы включить этот режим работы оболочки, необходимо открыть в редакторе реестра ключ HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer , добавить в него параметр DesktopProcess (типа REG_DWORD ) и назначить ему значение "1". Изменения вступят в силу после выхода и повторного входа в систему.

Выгрузка DLL

В обычном режиме работы оболочка выгружает DLL не сразу, а по истечении некоторого промежутка времени. Это может помешать линкеру перезаписывать файл DLL. Чтобы оболочка выгружала DLL немедленно, нужно создать в реестре ключ HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\AlwaysUnloadDLL и записать "1" в его параметр по умолчанию.

Отладка Add-in'ов к Visual C++

При отладке add-in'ов отладчику Visual C++ приходится отлаживать самого себя. Лучше всего запустить экземпляр среды Visual C++ без add-in'а, а затем использовать этот экземпляр для отладки. Иначе возможны весьма тонкие и неочевидные ошибки, на исправление которых уйдёт уйма времени. Другая возможность для отладки add-in'ов – удалённая отладка (о ней мы поговорим в следующем разделе).

Отладка ISAPI-расширений

Данные в этом разделе относятся к IIS5

ISAPI-расширение – это DLL, которая загружается веб-сервером IIS для обработки запросов. В зависимости от настроек защиты веб-приложения (application protection) они могут загружаться как главным файлом IIS inetinfo.exe (режим Low (IIS Process)), так и отдельным процессом dllhost.exe (режимы Medium (Pooled) и High (Isolated)). Чуть позже мы увидим, как отлаживать ISAPI-расширение в том и в другом случае. Но сначала несколько слов о подготовке расширения к отладке.

Подготовка к отладке

Прежде чем начинать отладку, рекомендуется проделать следующие шаги.

  1. Построить отладочную версию расширения.
  2. Создать для него виртуальную директорию с разрешением на выполнение (execute). Для создания виртуальной директории используется утилита Internet Services Manager (Запустить её можно из меню Start->Administrative Tools ). Можно дать ей любое имя (например, test). В качестве физического пути к директории следует указать путь к отладочному каталогу DLL расширения (например, C:\Projects\MyISAPI\Debug ).
  3. Отключить кэширование расширений веб-сервером. По умолчанию DLL расширения загружается сервером, как только приходит первый запрос к ней, а затем остаётся в памяти, чтобы последующие запросы обрабатывались быстрее. Это разумный подход, но в отладочных целях лучше отключить кэширование, чтобы DLL выгружалась сразу после обработки запроса. Для этого запустите Internet Services Manager, вызовите из контекстного меню веб-сайта диалог свойств, перейдите на закладку Home Directory , нажмите на кнопку Configuration. и снимите флажок Cache ISAPI applications .

В MSDN упоминается альтернативный способ отключить кэширование: открыть в редакторе реестра ключ HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters и добавить в него параметр (REG_DWORD)CacheExtensions=0. Но мне не удалось заставить этот метод работать.

Если веб-сервер ещё не запущен, запустите его. После этого можно переходить непосредственно к отладке.

В процессе отладки ISAPI-расширений довольно часто приходится запускать и останавливать веб-сервер. Для этого можно использовать команды net start w3svc и net stop w3svc соответственно. При желании можно добавить эти команды в меню Tools , чтобы они всегда были под рукой.

Отладка расширения в режиме in-process

В этом режиме DLL загружается процессом inetinfo.exe . Чтобы к нему присоединиться, можно использовать любую из описанных в предыдущем разделе методик (команду Attach To Process , команду Debug в Task Manager или функцию DebugBreak , которую в данном случае следует вставить в GetExtensionVersion расширения). После этого можно действовать по сценарию, описанному в подразделе "Общие принципы отладки", чтобы загрузить отладочные символы (если это необходимо) и расставить точки останова.

Запуск IIS в режиме обыкновенного приложения

Если объем отладки велик, и часто приходится запускать и останавливать сервис, проще запускать IIS из отладчика, как обыкновенное приложение.

Чтобы заставить IIS работать в таком режиме, нужно изменить учетную запись, под которой запускаются сервисы IIS Admin, World Wide Web Publishing и FTP Publishing, на запись, под которой будет производится отладка. Физически при запуске всех этих сервисов запускается один и тот же исполняемый файл – inetinfo.exe . DLL-библиотеки загружаются в сервис World Wide Web Publishing, но он зависит от IIS Admin-сервиса, поэтому сервис IIS Admin должен быть запущен первым. Учетная запись, под которой теперь будут запускаться сервисы, должна иметь довольно высокие привилегии. Проще всего использовать для этого учетную запись администратора, добавив ей привилегию "Act as part of the operating system" (программистам известную как SE_TCB_NAME ). Будьте осторожны, так как эта привилегия предоставляет широчайшие возможности. Теперь нужно настроить отладчик Visual C++, задав в качестве отлаживаемого проекта путь к файлу inetinfo.exe (по умолчанию он размещается в каталоге %SystemRoot%\System32\inetsrv\ ), а в качестве параметров строку "-e w3svc". Теперь при запуске проекта на отладку IIS будет загружаться автоматически. В начале очередного сеанса отладки не помешает убедиться, что сервис World Wide Web Publishing не был загружен именно как сервис (например, при перезагрузке системы).

Отладка расширения в режиме out-of-process

В этом режиме DLL загружается процессом dllhost.exe . Процесс отладки для него ничем принципиально не отличается от предыдущего случая. Помните только, что метод подключения к процессу с помощью DebugBreak не будет работать, так как исключение EXCEPTION_BREAKPOINT будет перехвачено внутри dllhost.exe .

В системе может быть несколько процессов с именем dllhost.exe . Необходимо выяснить, какой из них загружает DLL-расширения. Сделать это можно различными способами. Один из возможных вариантов – вставить в саму DLL код, сообщающий идентификатор процесса, в который она загружена. Например:

Библиотека DLL (библиотека динамической компоновки) — это библиотека, содержащая код и данные, которые могут использоваться несколькими приложениями. Visual Studio можно использовать для создания, сборки, настройки и отладки библиотек DLL.

Создание библиотеки DLL

Создавать библиотеки DLL можно с помощью следующих шаблонов проектов Visual Studio.

Дополнительные сведения см. в разделе Методы отладки MFC.

Отладка библиотеки WCF аналогична отладке библиотеки классов. Дополнительные сведения см. в статье Элементы управления Windows Forms.

Обычно библиотека DLL вызывается из другого проекта. При отладке вызывающего проекта в зависимости от конфигурации библиотеки DLL можно выполнить шаг с заходом и отладить код библиотеки DLL.

Конфигурация отладки библиотеки DLL

При создании приложения на основе шаблона проекта Visual Studio Visual Studio автоматически создает требуемые параметры для конфигурации сборки отладки и выпуска. При необходимости эти параметры можно изменить. Дополнительные сведения см. в следующих статьях:

Установка DebuggableAttribute C++

Чтобы отладчик мог присоединиться к библиотеке DLL C++, код C++ должен добавлять DebuggableAttribute .

Установка DebuggableAttribute

В обозревателе решений выберите проект DLL C++ и щелкните значок Свойства либо щелкните проект правой кнопкой мыши и выберите пункт Свойства.

В области Свойства в разделе Компоновщик > Отладка выберите Да (/ASSEMBLYDEBUG) для свойства Отлаживаемая сборка.

Дополнительные сведения см. в статье /ASSEMBLYDEBUG.

Задание расположений файлов DLL C/C++

Для отладки внешней библиотеки DLL вызывающий проект должен находить библиотеку DLL, ее PDB-файл и любые другие файлы, необходимые библиотеке DLL. Вы можете создать пользовательскую задачу сборки, чтобы скопировать эти файлы в выходную папку <project folder>\Debug, или скопировать файлы вручную.

Для проектов C/C++ можно задать расположения файлов заголовков и LIBD-файла на страницах свойств проекта, а не копировать их в выходную папку.

Задание расположений файла заголовка C/C и LIB-файла

В обозревателе решений выберите проект DLL C/C++ и щелкните значок Свойства либо щелкните проект правой кнопкой мыши и выберите пункт Свойства.

В верхней части области Свойства в разделе Конфигурация выберите Все конфигурации.

В разделе C/C++ > Общие > Дополнительные включаемые каталоги укажите папку с файлами заголовков.

В разделе Компоновщик > Общие > Дополнительные каталоги библиотек укажите папку с LIB-файлами.

В разделе Компоновщик > Ввод > Дополнительные зависимости укажите полный путь и имя файла для LIB-файлов.

Дополнительные сведения о параметрах проекта C++ см. в статье Справочник C++ по страницам свойств проекта Windows.

Сборка отладочной версии

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

Вы можете создать пользовательскую задачу сборки, чтобы скопировать эти файлы DLL в выходную папку <calling project folder>\Debug, или скопировать файлы вручную.

Обязательно вызовите библиотеку DLL в правильном расположении. Это может показаться очевидным, но, если вызывающее приложение находит и загружает другую копию библиотеки DLL, отладчик никогда не достигнет заданных точек останова.

Отладка библиотека DLL

Библиотеку DLL нельзя запускать напрямую. Ее должно вызывать приложение, обычно это EXE-файл. Дополнительные сведения см. в статье Проекты Visual Studio — C++.

Чтобы отладить библиотеку DLL, можно начать отладку из вызывающего приложения или выполнить отладку из проекта DLL, указав вызывающее приложение. Можно также использовать окно "Интерпретация" отладчика для вычисления функций или методов DLL во время разработки без использования вызывающего приложения.

Дополнительные сведения см. в статье Первое знакомство с отладчиком.

Запуск отладки из вызывающего приложения

Вызывать библиотеку DLL могут следующие виды приложений.

  • Приложение из проекта Visual Studio в том же или другом решении из библиотеки DLL.
  • Существующее приложение, которое уже развернуто и работает на тестовом или рабочем компьютере.
  • Программа расположена в Интернете и доступна по URL–адресу.
  • Веб-приложение с веб-страницей, которая внедряет библиотеку DLL.

Выполнить отладку библиотеки DLL из вызывающего приложения можно следующими способами.

Откройте проект для вызывающего приложения и начните отладку, выбрав Отладка > Начать отладку или нажав клавишу F5.

Выполните присоединение к приложению, которое уже развернуто и работает на тестовом или рабочем компьютере. Используйте этот вариант для библиотек DLL на веб-сайтах или в веб-приложениях. Дополнительные сведения см. в разделе Практическое руководство. Присоединение к выполняемому процессу.

Перед запуском отладки этого вызывающего приложения нужно установить точку останова в DLL. См. статью Использование точек останова. При попадании в точку останова DLL можно пошагово проходить по коду, наблюдая действия в каждой строке. Дополнительные сведения см. в статье Навигация по коду с помощью отладчика.

Во время отладки в окне Модули можно проверить библиотеки DLL и EXE-файлы, загружаемые приложением. Чтобы открыть окно Модули, во время отладки выберите Отладка > Окна > Модули. Дополнительные сведения см. в разделе Практическое руководство. использовать окно модулей.

Использование окна "Интерпретация"

Окно Интерпретация можно использовать для вычисления функций или методов DLL во время разработки. Окно Интерпретация выполняет роль вызывающего приложения.

Окно Интерпретация можно использовать во время разработки с большинством типов проектов. Оно не поддерживается для SQL, веб-проектов или скриптов.

Например, чтобы протестировать метод с именем Test в классе Class1 , выполните следующие действия.

Откройте проект DLL, откройте окно Интерпретация, последовательно выбрав пункты Отладка > Окна > Интерпретация или нажав сочетание клавиш CTRL+ALT+I.

Предположим, что Test принимает один параметр int , вычислим Test с помощью окна Интерпретация :

Результат будет выведен в окне Интерпретация.

Можно продолжить отладку Test , установив в нем точку останова, а затем снова вычислив эту функцию.

Будет достигнута точка останова и можно будет пошагово пройти Test . После выполнения Test , отладчик вернется в режим разработки.

Отладка в смешанном режиме

Вы можете написать вызывающее приложение для библиотеки DLL в управляемом или машинном коде. Если собственное приложение вызывает управляемую библиотеку DLL и вы хотите выполнить отладку этих двух объектов, можно включить управляемые и машинные отладчики в свойствах проекта. Точный способ выполнения этой операции зависит от того, откуда будет начата отладка: из проекта DLL или из проекта вызывающего приложения. Дополнительные сведения см. в разделе Практическое руководство. Отладка в смешанном режиме.

Можно выполнить отладку собственной библиотеки DLL из управляемого вызывающего проекта. Дополнительные сведения см. в статье об отладке управляемого и машинного кода.

Как зарегистрировать DLL в Windows 10 и Windows 11

Среди частых вопросов пользователей, особенно после того, как они сталкиваются с тем, что какая-то из библиотек DLL отсутствует в Windows 10, Windows 11 или других версиях системы — как зарегистрировать DLL в соответствующей версии ОС.

В этой инструкции подробно о способах регистрации библиотек DLL в Windows x64 и x86 (32-бит) с помощью regsvr32.exe (и кратко о regasm.exe), о возможных нюансах и проблемах, которые могут возникнуть в процессе.

Дальнейшие шаги описаны в предположении, что DLL, которую нужно зарегистрировать, уже находится в нужном расположении: папке C:\Windows\System32, C:\Windows\SysWOW64 или, в некоторых случаях — отдельных папках программ, к которой относится соответствующая библиотека, например, для 1С — C:\Program Files\1cv8\номер_версии\bin (или Program Files x86 в случае 32-битной версии).

Прежде чем приступить к регистрации библиотеки, учитывайте следующие моменты:

  • В x64 версиях Windows 64-битные DLL хранятся в System32, а 32-битные — в SysWOW64 (у некоторых начинающих пользователей бывает обратное предположение исходя из имён папок).
  • Файлы DLL x64 и x86 (32-бит) — это разные файлы. И если прямого указания на разрядность в месте загрузки файла нет, то чаще это 32-битный файл (что не мешает ему работать в x64 системе), но это не всегда так.
  • Для регистрации библиотеки DLL используется системный инструмент regsvr32.exe, который также доступен в двух версиях, которые лежат в папках System32 и SysWOW64 (в случае 64-битных систем). По умолчанию при описываемых далее действиях запускается x64 версия.
  • 32-битным программам и играм (по умолчанию устанавливаются в Program Files x86 в 32-битных системах) для работы нужны 32-битные DLL, не зависимо от разрядности Windows.

Сам процесс регистрации в общем случае состоит из следующих шагов:

Ошибка регистрации regsvr32 точка входа DllRegisterServer не найдена

Почему не удается зарегистрировать DLL

Ошибка при регистрации с помощью regsvr32 вида «Точка входа DllRegisterServer не найдена» говорит о том, что эта библиотека DLL не поддерживает регистрацию описанным методом. Можно попробовать использовать вариант команды:

но с большой вероятностью и это не поможет.

У большинства домашних пользователей такая проблема возникает при регистрации файлов DLL для игр и программ, часто не вполне лицензионных, которые сообщили, что нужный файл DLL не обнаружен или отсутствует. Причем сами библиотеки DLL обычно скачаны со сторонних сайтов (и чаще всего имеют имена начинающиеся с «vc», «msvc» или «d3d»). А решение, как правило, простое — выяснить, частью какого набора компонентов является эта DLL и установить эти компоненты с помощью их собственного установщика. Более подробно проблема и подходы к решению описаны в инструкции Точка входа DllRegisterServer не найдена — причины и возможные решения.

Видео

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

После активации дополнительно установленных программ на персональное устройство (стационарное, портативное) пользователи могут столкнуться с разного рода неполадками. Если на мониторе ПК отобразилось уведомление о том, что обнаружена ошибка regsvr32 и необходимо провести регистрацию дополнительного файла DLL для блока Win10 х64, юзер не сможет завершить текущие операции и действия. Нужно проверить устройство и устранить сбой.

Как зарегистрировать файл DLL в Windows 10

Существует несколько вариантов решения проблемы, связанной с регистрацией документа DLL в операционной системе Windows 10. Начинать можно с любого подходящего способа. Если один не сработал, переходят к следующему.

screenshot_1

С использованием «regsvr32.exe» в окне «Выполнить»

Командное окно «Выполнить» – стандартный инструмент, используемый пользователями Виндовс на 32 или 64 bit для устранения разного рода неполадок. Инструкция:

  • вызвать рабочее поле, используя комбинацию горячих клавиш «Win» и «R», либо через раздел «Пуск»;

screenshot_2

  • в пустую строку ввести команду и путь регистрации необходимого файла: exe C:\Windows\System32\dllname.dll;

screenshot_3

Внимание! Если нужный документ находится не на диске С, используют запрос %systemroot%\System32\regsvr32.exe %windir%\System32\dllname.dll. В данном случае операционка самостоятельно определяет папку расположения блоков ОС.

screenshot_4

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

Через Командную строку

  • запустить панель «Выполнить» (с помощью горячих клавиш или кнопки «Пуск»);

screenshot_5

  • в пустое поле вводится запрос «cmd» и затем «ОК»;

screenshot_6

  • откроется окно черного цвета, где требуется ввести команды из предыдущей инструкции.

screenshot_7

Для ввода значений можно использовать функцию копирования и вставки скопированных строк.

Использование «Открыть с помощью»

Чтобы использовать данный инструмент, необходимо открыть папку System32. Затем выполнить несколько последовательных шагов:

  • по файлу audiosrv кликнуть правой клавишей мышки, откроется дополнительное меню действий;

screenshot_8

screenshot_9

  • выбрать пункт «Обзор», затем – программу System32 или SysWow64 (в зависимости от разрядности действующей операционки).

screenshot_10

С помощью указанного приложения требуется запустить DLL, после чего операционная система должна произвести определенные процедуры и отобразить уведомление об успешности завершения процесса.

Почему не удается зарегистрировать DLL

В некоторых случаях зарегистрировать нужную библиотеку не удается из-за наличия других неисправностей или ошибок. Основные варианты:

  • несовместимость документа с установленной операционкой – нужно проверить разрядность активируемого файла (64 или 32);
  • отсутствует точка входа – некоторые DLL не настроены на работу с командами типа DllRegisterServer.

screenshot_11

Внимание! Иногда сайты, позволяющие скачать необходимые регистры, выдают за рабочие файлы документы, зараженные вирусами или не являющимися библиотеками. Такие блоки зарегистрировать невозможно.

screenshot_12

Читайте также: