Debug dll c windows system32

Отладка DLL


Автор: Александр Шаргин
Источник: RSDN Magazine #0

Опубликовано: 27.01.2002
Исправлено: 13.03.2005
Версия текста: 1.0


Общие принципы отладки 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 в список 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 расширения). После этого можно действовать по сценарию, описанному в подразделе «Общие принципы отладки», чтобы загрузить отладочные символы (если это необходимо) и расставить точки останова.

Чтобы DLL получила управление, необходимо послать ей запрос. Это можно сделать из Internet Explorer. Запрос будет выглядеть примерно так: http://localhost/test/MyISAPI.dll .

Запуск 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 код, сообщающий идентификатор процесса, в который она загружена. Например:

Обратите внимание на флаг MB_SERVICE_NOTIFICATION . Он необходим, чтобы сообщение из ISAPI-расширения было видно на экране.

Библиотека DLL файлов

Новые DLL

DEBUG.DLL

Описание dll файла: 1C:Enterprise 8.2 debuger
Вероятная ошибка dll: отсутствует DEBUG.DLL
Совместимые операционные системы: Windows 7, Windows 8, Windows 10

Скачать DEBUG.DLL

Ниже расположены прямые ссылки на файлы библиотеки dll из нашей коллекции.

ВАЖНО! Устанавливая библиотеку, вы принимаете на себя все риски, связанные с вмешательством в работу вашей операционной системы.

Как скачать DEBUG.DLL и установить ее

Откройте загруженный zip-файл. Извлеките DEBUG.DLL в папку на вашем компьютере. Мы рекомендуем вам распаковать его в директорию программы, которая запрашивает DEBUG.DLL. Если это не работает, вам придется извлечь DEBUG.DLL в вашу системную директорию. По умолчанию это:

C: \ Windows \ System (Windows 95/98/Me)
C: \ WINNT \ System32 (Windows NT/2000)
C: \ Windows \ System32 (Windows XP, Vista, 7, 8, 8.1, 10)

Если вы используете 64-разрядную версию Windows, вы должны также положить DEBUG.DLL в C: \ Windows \ SysWOW64 \ . Убедитесь, что вы перезаписали существующие файлы (но не забудьте сделать резервную копию оригинального файла). Перезагрузите ваш компьютер. Если ошибка dll сохраняется, попробуйте следующее: Откройте меню Пуск и выберите пункт «Выполнить». Введите CMD и нажмите Enter (или если вы используете Windows ME, наберите COMMAND ). Введите regsvr32 DEBUG.DLL и нажмите Enter.

Внимание! Скачать DEBUG.DLL из сети Интернет очень легко, однако велика вероятность заражения вашего компьютера вредоносным кодом. Пожалуйста, проверяйте ВСЕ скаченные из Интернет файлы антивирусом! Администрация сайта download-dll.ru не несет ответственность за работоспособность вашего компьютера.

Обратите также внимание, что каждый файл имеет версию и разрядность (32 или 64 бита). Установка в систему DLL файлов помогает не в 100% случаев, но в основном проблемы с программами и играми решаются таким незамысловатым методом. Чаще всего с DLL вы сталкиваетесь при ошибках в операционной системе. Некоторые библиотеки поставляются с системой Windows и доступны для любых Windows-программ. Замена DLL-файлов с одной версии на другую позволяет независимо наращивать систему, не затрагивая прикладные программы.

Ошибка DLL? Помогут наши спецы!

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

Debug DLLs in Visual Studio (C#, C++, Visual Basic, F#)

A DLL (dynamic-link library) is a library that contains code and data that can be used by more than one app. You can use Visual Studio to create, build, configure, and debug DLLs.

Create a DLL

The following Visual Studio project templates can create DLLs:

  • C#, Visual Basic, or F# Class Library
  • C# or Visual Basic Windows Forms Control (WCF) Library
  • C++ Dynamic-Link Library (DLL)

Debugging a WCF Library is similar to debugging a Class Library. For details, see Windows Forms Controls.

You usually call a DLL from another project. When you debug the calling project, depending on the DLL configuration, you can step into and debug the DLL code.

DLL debug configuration

When you use a Visual Studio project template to create an app, Visual Studio automatically creates required settings for Debug and Release build configurations. You can change these settings if necessary. For more information, see the following articles:

Set C++ DebuggableAttribute

For the debugger to attach to a C++ DLL, the C++ code must emit DebuggableAttribute .

To set DebuggableAttribute :

Select the C++ DLL project in Solution Explorer and select the Properties icon, or right-click the project and select Properties.

In the Properties pane, under Linker > Debugging, select Yes (/ASSEMBLYDEBUG) for Debuggable Assembly.

For more information, see /ASSEMBLYDEBUG.

Set C/C++ DLL file locations

To debug an external DLL, a calling project must be able to find the DLL, its .pdb file, and any other files the DLL requires. You can create a custom build task to copy these files to your

\Debug output folder, or you can copy the files there manually.

For C/C++ projects, you can set header and LIB file locations in the project property pages, instead of copying them to the output folder.

To set C/C++ header and LIB file locations:

Select the C/C++ DLL project in Solution Explorer and select the Properties icon, or right-click the project and select Properties.

At the top of the Properties pane, under Configuration, select All Configurations.

Under C/C++ > General > Additional Include Directories, specify the folder that has header files.

Under Linker > General > Additional Libraries Directories, specify the folder that has LIB files.

Under Linker > Input > Additional Dependencies, specify the full path and filename for the LIB files.

Select OK.

For more information on C++ project settings, see Windows C++ property page reference.

Build a Debug version

Make sure to build a Debug version of the DLL before you start debugging. To debug a DLL, a calling app must be able to find its .pdb file and any other files the DLL requires.

You can create a custom build task to copy the DLL files to your \Debug output folder, or you can copy the files there manually.

Make sure to call the DLL in its correct location. This may seem obvious, but if a calling app finds and loads a different copy of the DLL, the debugger will never hit the breakpoints you set.

Debug a DLL

You can’t run a DLL directly. It must be called by an app, usually an .exe file. For more information, see Visual Studio projects — C++.

To debug a DLL, you can start debugging from the calling app, or debug from the DLL project by specifying its calling app. You can also use the debugger Immediate window to evaluate DLL functions or methods at design time, without using a calling app.

Start debugging from the calling app

The app that calls a DLL can be:

  • An app from a Visual Studio project in the same or a different solution from the DLL.
  • An existing app that is already deployed and running on a test or production computer.
  • Located on the web and accessed through a URL.
  • A web app with a web page that embeds the DLL.

To debug a DLL from a calling app, you can:

Open the project for the calling app, and start debugging by selecting Debug > Start Debugging or pressing F5.

Attach to an app that is already deployed and running on a test or production computer. Use this method for DLLs on websites or in web apps. For more information, see How to: Attach to a running process.

Before you start debugging the calling app, set a breakpoint in the DLL. See Using breakpoints. When the DLL breakpoint is hit, you can step through the code, observing the action at each line. For more information, see Navigate code in the debugger.

During debugging, you can use the Modules window to verify the DLLs and .exe files the app loads. To open the Modules window, while debugging, select Debug > Windows > Modules. For more information, see How to: Use the Modules window.

Use the Immediate window

You can use the Immediate window to evaluate DLL functions or methods at design time. The Immediate window plays the role of a calling app.

You can use the Immediate window at design time with most project types. It’s not supported for SQL, web projects, or script.

For example, to test a method named Test in class Class1 :

With the DLL project open, open the Immediate window by selecting Debug > Windows > Immediate or pressing Ctrl+Alt+I.

Instantiate an object of type Class1 by typing the following C# code in the Immediate window and pressing Enter. This managed code works for C# and Visual Basic, with appropriate syntax changes:

In C#, all names must be fully qualified. Any methods or variables must be in the current scope and context when the language service tries to evaluate the expression.

Assuming that Test takes one int parameter, evaluate Test using the Immediate window:

The result prints in the Immediate window.

You can continue to debug Test by placing a breakpoint inside it, and then evaluating the function again.

The breakpoint will be hit, and you can step through Test . After execution has left Test , the debugger will be back in design mode.

Mixed-mode debugging

You can write a calling app for a DLL in managed or native code. If your native app calls a managed DLL and you want to debug both, you can enable both the managed and native debuggers in the project properties. The exact process depends on whether you want to start debugging from the DLL project or the calling app project. For more information, see How to: Debug in mixed mode.

You can also debug a native DLL from a managed calling project. For more information, see How to debug managed and native code.

Читайте также:  Чем открыть gif windows 10
Оцените статью