Как запустить отладку файла

Обновлено: 06.07.2024

gdb - наиболее популярный отладчик в системе linux.

Его используют как непосредственно из командной строки, так и из специальных графических оболочек (frontends)

  • запускать программу в режиме отладки с параметрами и без;
  • останавливать программу при возникновении определённых событий;
  • исследовать окружение программы в момент остановки;
  • изменять состояние программы в момент остановки

Компиляция

Перед отладкой необходимо скомпилировать программу с ключом -g или -gdb:

Есть также возможность использовать несколько уровней полноты отладочной информации (от 0 до 3):

Запуск

Для запуска программы под отладчиком используют следующие команды:

в этом случае после старта GDB мы увидим служебную информацию и результат чтения символьной таблицы из программы, например:

позволяет запустить программу в отладчике без лишней информации

предназначена для передачи исследуемой программе параметров командной строки

Выход

Выход из отладчика осуществляется командами q или quit

Запуск команд shell

Находяcь внутри отладчика можно запустить команду shell:

Запуск программы под отладчиком

После загрузки программы мы можем запустить её с помощью run и выполнить всю, а также с помощью start и выполнить её по шагам.

Пример выполнения программы:

Это другой пример выполнения программы (используется start и n (next) для пошагового выполнения:

Точки останова

устанавливает точку останова на строке с номером N. Если запустить программу с помощью run, то выполнение остановится на N-ой строке.

в любой момент выводит на экран список точек останова

Точки останова могут содержать условные выражения

break . if cond

Следующая команда заставит остановиться на 25 строке, если значение переменной age больше 15:

Точки просмотра

Помимо точек останова breakpoints в GDB есть ''точки просмотра'' watchpoints. Их назначение - останавливать выполнение программы, если заданная переменная изменяется.

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

Продолжить выполнение программы можно командой c (continue)

Кроме команды watch есть аналогичная rwatch, позволяющая задать точку просмотра для переменной, из которой читаются данные.

Точки останова и просмотра можно сделать неактивными с помощью команды disable

Листинг программы

Команда list позволяет просмотреть исходный код программы вместе с номерами строк, не покидая отладчик

Просмотр и изменение переменных

Команды print и set используются для просмотра и изменения значений переменных

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

Независимо от обстоятельств код, создаваемый разработчиками программного обеспечения, далеко не всегда работает так, как задумано. В некоторых случаях все идет совершенно не по плану! В подобных ситуациях необходимо выяснить, почему так происходит. При этом вместо многочасового изучения кода в поисках ошибок гораздо проще и эффективнее будет использовать средство отладки (отладчик).

К сожалению, отладчик не является той волшебной палочкой, по мановению которой будут выявлены абсолютно все проблемы в коде. Процесс отладки подразумевает пошаговое выполнение кода в средстве отладки (например, в Visual Studio) в поисках точки, в которой вы допустили ошибку при написании программы. Таким образом, вы получите возможность проанализировать код и внести в него необходимые исправления. При этом средства отладки часто допускают внесение временных изменений, благодаря чему вы можете продолжать выполнение программы.

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

Проанализируйте проблему, задавая себе правильные вопросы

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

Что именно должен был выполнить код?

Что произошло вместо этого?

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

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

Проверьте свои предположения

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

Используете ли вы нужный API (то есть соответствующие объект, функцию, метод или свойство)? Возможно, используемый вами API работает не так, как вы ожидаете. (После проверки вызова API в отладчике для исправления проблемы и выявления нужного API вам может потребоваться обратиться к документации.)

Правильно ли вы используете API? Даже если вы выбрали нужный API, он может использоваться неправильно.

Нет ли в вашем коде опечаток? Некоторые опечатки, например ошибки в написании имени переменной, могут быть незаметными, особенно при работе с языками, в которых не требуется объявление переменных перед их использованием.

Вносили ли вы изменения в код и могут ли они быть связаны с возникшей проблемой?

Должны ли объект или переменная содержать определенное значение (или определенный тип значения) и соответствует ли это действительности?

Известно ли назначение кода? Как правило, отладка кода, написанного другим разработчиком, дается гораздо сложнее. Если это не ваш код, возможно, для его эффективной отладки вам потребуется изучить, что он делает.

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

Анализируя собственные предположения, вы можете сократить время, необходимое на поиск проблем в коде. Кроме того, вы можете ускорить решение самих проблем.

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

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

Начать отладку

Чтобы перейти в режим отладки в Visual Studio, необходимо нажать клавишу F5 (также вы можете выбрать пункт меню Отладка > Начать отладку или нажать кнопку Начать отладку в панели инструментов "Отладка"). Если возникает исключение, помощник по исправлению ошибок Visual Studio направит вас к точке его появления и предоставит другую необходимую информацию. См. дополнительные сведения об обработке исключений в коде в разделе Приемы и инструменты отладки.

Если исключение не возникает, возможно, вам следует проанализировать определенные места в коде, которые могут являться источником проблемы. На этом этапе следует использовать точки останова в отладчике, благодаря которым вы сможете исследовать код более внимательно. Точки останова — это один из самых простых и важных компонентов надежной отладки. Точка останова указывает, где Visual Studio следует приостановить выполнение кода, чтобы вы могли проверить значения переменных, поведение памяти или последовательность выполнения кода.

Чтобы задать точку останова в Visual Studio, достаточно щелкнуть в левом поле рядом с интересующей вас строкой кода. Также для этого можно поместить указатель мыши в нужную строку и нажать клавишу F9.

Создание образца приложения с ошибками

Сейчас мы создадим приложение, которое содержит некоторые ошибки.

Установите Visual Studio бесплатно со страницы скачиваемых материалов Visual Studio, если еще не сделали этого.

Запустите Visual Studio.

Visual Studio создаст консольный проект и откроет его в обозревателе решений (правая область).

Этот код выводит список, содержащий название галактики, расстояние до нее, а также тип галактики. При отладке важно учитывать предназначение кода. Ниже показан формат одной строки списка, который должен выводить код.

название галактики, расстояние, тип галактики.

Запуск приложения

Начать отладку

Нажмите клавишу F5 или кнопку Начать отладку на панели инструментов "Отладка", которая расположена над редактором кода.

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

Вместо этого выводятся следующие данные.

Проанализировав выходные данные и код, мы можем сделать вывод, что в классе GType содержится тип галактики. Нам необходимо выводить на экран тип галактики (например, Spiral), а не название класса.

Отладка приложения

Во время выполнения приложения щелкните в левом поле рядом с вызовом метода Console.WriteLine , чтобы задать точку останова в этой строке кода.

В месте установки точки останова в левом поле появится красный круг.

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

Выполнение приложения приостановится в заданной точке останова. Место приостановки отладчика будет выделено желтым цветом (при этом желтая строка кода на этот момент не выполнена).

Наведите указатель мыши на переменную GalaxyType справа. После этого разверните theGalaxy.GalaxyType слева от значка гаечного ключа. Как вы можете видеть, GalaxyType содержит свойство MyGType , которому присваивается значение Spiral .

Снимок экрана: отладчик Visual Studio со строкой кода, выделенной желтым цветом, и раскрытым меню под свойством Galaxy.GalaxyType в конце строки.

Во время отладки этого же кода установите указатель мыши в конец элемента theGalaxy.GalaxyType и измените его на theGalaxy.GalaxyType.MyGType . Несмотря на допустимость такого изменения, в редакторе кода отображается ошибка, свидетельствующая о невозможности выполнить компиляцию. (В Visual Basic этой ошибки не возникнет, и этот раздел кода будет работать)

Перезапустить приложение

Чтобы выполнить отладку примера кода Visual Basic, пропустите несколько следующих шагов до инструкции, по которой нужно щелкнуть Перезапустить .

Снимок экрана: отладчик Visual Studio со строкой кода, выделенной красным, и окном "Список ошибок" с двумя перечисленными ошибками.

Анализируя код, в котором задается тип галактики, вы можете увидеть, что свойство GalaxyType класса Galaxy задается как object вместо GType .

Измените предшествующий код на следующий.

Когда отладчик приостановит выполнение на строке Console.WriteLine , вы можете навести указатель мыши на theGalaxy.GalaxyType.MyGType и убедиться, что значение задано правильно.

Удалите точку останова, щелкнув ее кружок в левом поле (также для этого можно выбрать команду Точка останова > Удалить точку останова). После этого нажмите клавишу F5 для продолжения.

Приложение запускается и отображает выходные данные. Теперь все работает правильно, однако вы можете заметить еще одну неточность. Для галактики Small Magellanic Cloud, которая имеет тип Irregular, в консоли не выводится никакой тип.

Установите точку останова в этой строке кода перед инструкцией switch (перед инструкцией Select в Visual Basic).

Здесь задается тип галактики, поэтому нам необходимо изучить эту строку более пристально.

Отладчик приостановит работу в строке кода, где вы задали точку останова.

Наведите указатель мыши на переменную type . Отображается значение S (после кода символа). Вас интересует значение I , поскольку эта галактика должна иметь тип Irregular.

Нажмите клавишу F5 и снова наведите указатель мыши на переменную type . Повторяйте этот шаг, пока в переменной type не появится значение I .

Снимок экрана: отладчик Visual Studio со строкой кода желтого цвета и небольшим окном, показывающим значение переменной типа 73 "И".

Нажмите клавишу F11 (выберите Отладка > Шаг с заходом или нажмите кнопку Шаг с заходом в панели инструментов "Отладка").

При нажатии клавиши F11 отладчик переходит на одну инструкцию вперед и выполняет соответствующий код. Клавиша F10 (Шаг с обходом) имеет схожую функцию и также полезна при работе с отладчиком.

Нажимайте клавишу F11 до тех пор, пока вы не остановитесь в строке кода с инструкцией switch для значения "I" (инструкция Select для Visual Basic). Здесь вы увидите очевидную ошибку, связанную с опечаткой. Вы ожидали, что код будет выполнен дальше до места, где для MyGType задается тип галактики Irregular, однако вместо этого отладчик полностью пропускает этот код и приостанавливает работу в разделе default инструкции switch (инструкция Else для Visual Basic).

Поиск опечатки

Взглянув на код, вы заметите опечатку в инструкции case 'l' . Вместо этого она должна иметь вид case 'I' .

Щелкните код case 'l' и замените его на case 'I' .

Удалите точку останова и нажмите кнопку Перезапустить, чтобы запустить приложение снова.

Теперь все ошибки исправлены и приложение выдает ожидаемые результаты.

Нажмите любую клавишу, чтобы завершить работу приложения.

Сводка

Если вы сталкиваетесь с проблемой, воспользуйтесь отладчиком и командами пошагового выполнения, такими как F10 и F11, для поиска области кода, в которой возникают ошибки.

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

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

Проверьте, выполняет ли ваше приложение код, который вы ожидаете. (Так, в примере приложения должна была выполняться инструкция switch, устанавливающая тип галактики Irregular, однако нужный код был пропущен из-за опечатки.)

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

Следующие шаги

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


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

К сожалению, отладка может показаться не столь очевидной при работе с JavaScript за пределами полноценной среды IDE. По крайней мере — на первый взгляд.

В данной статье будет рассмотрен вопрос, как можно выполнять отладку JavaScript-кода в инструменте Google Chrome Dev Tools и в редакторе кода Visual Studio Code.

Примечание переводчика: перейдя по этой ссылке, можно ознакомиться с видеоверсией данной статьи Debugging JavaScript in Google Chrome and Visual Studio Code на английском языке.

Предустановки

В этой статье процесс отладки будет рассмотрен на примере тестового приложения под названием «Quick Chat»:


У вас есть два способа работы с этим приложением. Вы можете самостоятельно создать его, воспользовавшись этой серией видеоуроков. Или же вы можете использовать исходный код уже готового приложения «Quick Chat»:


Какой бы вариант вы не выбрали, вам потребуется локально запустить приложение «Quick Chat».

Вы можете запустить приложение из-под Node.js (как это делаю я). Или воспользоваться плагином под Visual Studio Code под названием Live Server.

Если вы новичок в работе с этим плагином, то можете научиться работать с ним при помощи этого видео — Live Server Extension in Visual Studio Code.

Примечание переводчика: видео на английском языке.

В процессе создания данной статьи я добавил в приложении «Quick Chat» небольшую намеренную ошибку, которая не позволяет зарегистрировать пользователя после его входа в систему.

С технической точки зрения я неправильно получаю имя пользователя, используя для этого usernameInput.text вместо правильного варианта usernameInput.value . Если бы я допустил такую ошибку в реальной жизни, моей первой мыслью было бы воспользоваться инструментом console.log() .

Но это не совсем тот случай, который мог бы мне помочь, как вы можете увидеть на изображении ниже. Если же использование console.log() было также вашей первой мыслью - вы попали по адресу и правильно делаете, что читаете эту статью!


Основы отладки

Начнем с основ. Идея отладки заключается в том, что внутри программного кода можно устанавливать так называемые точки останова (breakpoints) для того, чтобы остановить выполнение программы в определенном месте.

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

После установки точки останова (breakpoint) в коде, как правило, есть несколько вариантов дальнейших действий:

  • продолжить выполнение программы
  • пошагово пройтись по всем этапам выполнения программы — строка за строкой
  • выйти из текущей функции, в которой вы находитесь
  • перейти к выполнению следующей функции

У вас также будет доступ к просмотру стека вызовов (call stack). Другими словами, поскольку в программе функции могут вызывать на исполнение другие функции, то можно просмотреть историю вызовов этих функций.

Отладка в Google Chrome

Чтобы начать отладку приложения в браузере ​​Google Chrome, добавьте в обработчике события кнопки clickBtn оператор debugger , как показано ниже:


Когда выполнение программы дойдет до строки с оператором debugger , приложение будет приостановлено и автоматически активируются инструменты отладки браузера Google Chrome.

Обратите внимание, что приложение в окне браузера закрашено серым цветом, чтобы показать, что оно приостановлено. Также обратите внимание, что вкладка Sources в Chrome Dev Tools открылась автоматически:


Давайте разберемся, что мы видим на вкладке Sources .

Вкладка Sources

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

Вы также можете заметить, что строка кода с оператором debugger подсвечена синим цветом, чтобы сообщить нам, что выполнение приложения остановлено на данном участке кода:


Браузер Google Chrome предоставляет нам возможность просматривать исходный код приложения. Имея перед собой исходный код, можно установить в нем точки останова.

Точка останова предназначена для обозначения места, на котором нужно остановить выполнение программы. Оператор debugger , который мы использовали в примере выше, функционирует как точка останова, но в исходном коде приложения такая точка останова необязательно должна быть только одной.

Точка останова — преднамеренная остановка или приостановка выполнения программы

Чтобы добавить точку останова, нужно выполнить клик мыши на gutter — поле слева от нумерации строк кода. Как только вы выполните это действие, то заметите, что браузер Google Chrome автоматически добавил эту точку останова в список «Breakpoints»:


Вкладка Scope

На вкладке «Scope» вы можете отслеживать переменные в своем приложении. Обратите внимание, что на этой вкладке есть три раздела: локальная область видимости (Local), глобальная область видимости (Global) и раздел сценариев (Script).

В разделе сценариев вы можете отслеживать переменные в области видимости текущего скрипта:


Большую часть времени процесса отладки приложения вы будете проводить именно в этой вкладке. Это гораздо более эффективная альтернатива использованию многочисленным console.log() .

Вкладка Watch

Как уже упоминалось ранее, помимо просмотра переменных на вкладке «Scope», вы также можете определить переменные, значения которых вы хотели бы отслеживать на всем этапе выполнения программы.

Добавляя переменную на вкладке «Watch», каждый раз, когда вы устанавливаете точку останова, вы можете быстро проверить значение этой переменной (которая может иметь значение undefined в зависимости от того, где вы находитесь в коде).

Нажмите значок плюса и введите имя переменной, которую необходимо отслеживать, в нашем случае это usernameInput :


Пошаговое выполнение, стек вызовов и список точек останова

Раздел вкладки «Sources», расположенный в левом нижнем углу окна отладчика, позволяет просмотреть список точек останова, стек вызовов (call stack) и т. д.


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

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

Наконец, существуют различные типы точек останова, которые могут быть заданы. Давайте рассмотрим пример создания условной точки останова (conditional breakpoint), которая будет срабатывать только при выполнении определенного условия.

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


В случае отладки приложения Quick Chat , если вы нажмете кнопку входа в систему без имени пользователя, будет запущена эта точка останова. В противном случае код будет продолжать выполняться как обычно.

Обратите внимание, что существует ещё больше доступных вариантов точек останова, которые не рассматриваются в данной статье.

Отладка в Visual Studio Code

Инструмент Chrome Developer Tools является одним из лучших в своем роде. Как вы уже видели, он предлагает отличные возможности и функционал для отладки приложения.

Однако командой разработчиков Visual Studio Code была проделана большая работа для того, чтобы сделать процесс отладки в этом редакторе ещё более совершенным.

Мне очень нравится Visual Studio Code и я провожу в нем больше времени, чем в каком-либо другом редакторе кода. Этот процесс включает в себя и отладку.

Чтобы начать отладку кода в VS Code, вам нужно будет установить плагин Debugger for Chrome :


Давайте познакомимся с вкладкой Debug . По умолчанию она расположена на боковой панели редактора. Откройте эту вкладку, нажав на значок, который выглядит как жучок (bug).

Открыв эту панель, вы увидите инструменты, очень похожие на те, что мы видели в браузере Google Chrome — переменные, стек вызовов, точки останова:


Большинство функциональных возможностей, с которыми мы имели дело в Chrome Dev Tools, также доступны в VS Code.

Теперь, когда мы познакомились с вкладкой Debug , нам необходимо создать конфигурацию, которая укажет редактору VS Code, как ему отлаживать наше приложение.

При попытке запуска некоторых программ или игр пользователи сталкиваются с тем, что в Windows 7 появляется ошибка «Точка входа DLLRegisterServer не найдена». Чтобы решить эту проблему, придется заранее ознакомиться с причинами ее появления и основными методами устранения.

Почему появляется ошибка

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


«Точка входа DLLRegisterServer не найдена Windows 10» — ошибка, с которой сталкиваются многие пользователи ПК

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

  • заражение ПК вирусами. Вредоносное ПО может повреждать и удалять библиотеки. Поэтому необходимо периодически проверять компьютер на вирусы;
  • проблемы с установщиком. Большинство поставщиков ПО добавляет все необходимые библиотеки в инсталлятор. Однако иногда они забывают об этом, что приводит к невозможности запуска программы;
  • системные ошибки. В некоторых случаях Windows перестает видеть некоторые библиотеки. Такое случается из-за системных ошибок, которые появились в результате неосторожных манипуляций с реестром.

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

Как зарегистрировать Dll в Windows 7 64 Bit при помощи командной строки

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


Командная строка помогает зарегистрировать DLL

Есть два основных способа запуска командной строки:

  • из-под текущего пользователя. Для запуска необходимо нажать сочетание клавиш «Win + R» или перейти в меню «Пуск» и нажать на «Выполнить». В появившемся окошке надо ввести «cmd» и нажать на «Ок»;
  • от имени администратора. Иногда, чтобы зарегистрировать DLL в Windows 10, требуются права администратора. В таком случае придется перейти в меню «Пуск», выбрать «Все программы» и открыть папку «Стандартные». Здесь нужно ПКМ щелкнуть по программе «Командная строка» и выбрать «Запустить от имени администратора».

Важно! После запуска командной строки начинается регистрация. Для этого вводится команда «regsvr32.exe путь_к_библиотеке» и нажимается клавиша «Enter».

Если все было сделано правильно, файл должен зарегистрироваться, а ошибка исчезнет.

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

  1. Открыть меню «Пуск» и выбрать «Выполнить» или просто нажать сочетание клавиш «Win + R».
  2. В появившемся на экране окне ввести «regsvr32.exe» и указать путь к файлу, который надо зарегистрировать.
  3. Нажать клавишу «Enter» для подтверждения внесенных изменений.


Иногда регистрация DLL заканчивается появлением ошибки

  1. Кликнуть ПКМ по DLL, которую надо регистрировать, и выбрать подпункт меню «Открыть с помощью».
  2. В появившемся окне нажать на «Обзор» и перейти в папку «System32». Здесь будет находиться «regsvr32.exe», который нужно выбрать для дальнейшей регистрации DLL.

Что делать, если зарегистрировать не получается

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


DLL-файлы надо скачивать с проверенных ресурсов, а не файлообменников

Важно! Не стоит ничего скачивать с файлообменников или подозрительных ресурсов. Лучше пользоваться проверенными официальными сайтами.

  • скачивать файлы только с официальных ресурсов поставщика. Например, если нужен xlive.dll, его нужно скачивать с сайта Microsoft, а не с малоизвестных платформ;
  • воспользоваться regasm.exe для регистрации DLL. Этот метод подойдет только для опытных пользователей, которые занимаются разработкой своей библиотеки;
  • поместить файл в директорию приложения, которое надо запустить. Иногда только после этого удается его зарегистрировать.

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

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


Отладка файла позволяет ознакомиться с его двоичным кодом

Чтобы запустить процесс отладки, придется воспользоваться исполнительным файлом «inetinfo.exe». При этом необходимо придерживаться следующих рекомендаций:

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

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