Что такое отладка на компьютере
В пакет средств отладки для Windows входят современные отладочные инструменты, с помощью которых можно исследовать внутреннее устройство Windows. В самую последнюю версию в качестве составной части включен набор для разработки программного обеспечения — Windows Software Development Kit (SDK).
Средства из этого набора могут использоваться для отладки как процессов пользовательского режима, так и процессов ядра.
ПРИМЕЧАНИЕ. Средства отладки Debugging Tools for Windows довольно часто обновляются и выпускаются независимо от версий операционной системы Windows, поэтому почаще проверяйте наличие новых версий.
СОВЕТ. Отладка в пользовательском режиме.
Средства отладки могут также использоваться для подключения к процессу пользовательского режима и для изучения и (или) изменения состояния памяти процесса. При подключении к процессу есть два варианта:
- Навязчивый (Invasive). Если при подключении к запущенному процессу не даны специальные указания, для подключения отладчика к отлаживаемому коду используется Windows-функция DebugActiveProcess. Тем самым создаются условия для исследования и (или) изменения памяти процесса, установки контрольных точек и выполнения других отладочных функций. Windows позволяет остановить отладку без прерывания целевого процесса, если отладчик отключается без прерывания своей работы.
- Ненавязчивый (Noninvasive). При таком варианте отладчик просто открывает процесс с помощью функции OpenProcess. Этот процесс не подключается к другому процессу в качестве отладчика. Это позволяет исследовать и (или) изменять память целевого процесса, но вы не можете устанавливать контрольные точки.
Со средствами отладки можно также открывать файлы дампа процесса пользовательского режима.
Для отладки ядра могут использоваться два отладчика: работающий в окне командной строки (Kd.exe) и имеющий графический пользовательский интерфейс, GUI (Windbg.exe). Оба отладчика предоставляют одинаковый набор команд, поэтому выбор всецело зависит от личных предпочтений. Эти средства позволяют выполнять три типа отладки ядра:
- Открыть аварийный дамп-файл, созданный в результате аварийного завершения работы системы.
- Подключиться к действующей, работающей системе и исследовать состояние системы (или установить контрольные точки, если ведется отладка кода драйвера устройства). Для этой операции нужны два компьютера — целевой и ведущий. Целевой компьютер содержит отлаживаемую систему, а ведущий — систему, на которой запущен отладчик. Целевая система может быть подключена к ведущей через нуль-модемный кабель, кабель IEEE 1394 или отладочный кабель USB 2.0. Целевая система должна быть загружена в режиме отладки (либо путем нажатия F8 в процессе загрузки и выбора пункта Режим отладки (Debugging Mode), либо путем настройки системы на запуск в режиме отладки, используя Bcdedit или Msconfig.exe). Можно также подключиться через поименованный канал, применяемый при отладке через виртуальную машину (созданную такими средствами, как Hyper-V, Virtual PC или VMWare), путем выставления гостевой операционной системой последовательного порта в качестве поименованного канального устройства.
- Системы Windows позволяют также подключиться к локальной системе и исследовать ее состояние. Это называется «локальной отладкой ядра». Чтобы приступить к локальной отладке ядра с помощью отладчика WinDbg, откройте меню File (Файл), выберите пункт Kernel Debug (Отладка ядра), щелкните на вкладке Local (Локальная), а затем щелкните на кнопке OK. Целевая система должна быть загружена в отладочном режиме. Пример появляющегося при этом экрана показан на рис. 1.6. В режиме локальной отладки ядра не работают некоторые команды отладчика ядра (например, команда .dump, предназначенная для создания дампа памяти, хотя такой дамп можно создать с помощью рассматриваемого далее средства LiveKd).
Локальная отладка ядра
Для отображения содержимого внутренней структуры данных, включающей сведения о потоках, процессах, пакетах запросов на ввод-вывод данных и информации об управлении памятью, после подключения к режиму отладки ядра можно воспользоваться одной из множества команд расширения отладчика (команд, начинающихся с символа «!»).
Эксперимент: Отображение информации о типах для структур ядра.
Чтобы вывести список структур ядра, чей тип информации включен в символы ядра, наберите в отладчике ядра команду dt nt!_*. Частичный образец вывода имеет следующий вид:
Командой dt можно также воспользоваться для поиска определенных структур, используя заложенную в эту команду возможность применения символов-заместителей. Например, если ведется поиск имени структуры для объекта interrupt, нужно набрать команду dt nt!_*interrupt*:
lkd> dt nt!_*interrupt*
Затем, как показано в следующем примере, команду dt можно использовать для форматирования определенной структуры:
lkd> dt nt!_kinterrupt
+0x000 Type : Int2B
+0x002 Size : Int2B
+0x008 InterruptListEntry : _LIST_ENTRY
+0x018 ServiceRoutine : Ptr64 unsigned char
+0x020 MessageServiceRoutine : Ptr64 unsigned char
+0x028 MessageIndex : Uint4B
+0x030 ServiceContext : Ptr64 Void
+0x038 SpinLock : Uint8B
+0x040 TickCount : Uint4B
+0x048 ActualLock : Ptr64 Uint8B
+0x050 DispatchAddress : Ptr64 void
+0x058 Vector : Uint4B
+0x05c Irql : UChar
+0x05d SynchronizeIrql : UChar
+0x05e FloatingSave : UChar
+0x05f Connected : UChar
+0x060 Number : Uint4B
+0x064 ShareVector : UChar
+0x065 Pad : [3] Char
+0x068 Mode : _KINTERRUPT_MODE
+0x06c Polarity : _KINTERRUPT_POLARITY
+0x070 ServiceCount : Uint4B
+0x074 DispatchCount : Uint4B
+0x078 Rsvd1 : Uint8B
+0x080 TrapFrame : Ptr64 _KTRAP_FRAME
+0x088 Reserved : Ptr64 Void
+0x090 DispatchCode : [4] Uint4B
Следует заметить, что при выполнении команды dt подструктуры (структуры внутри структур) по умолчанию не показываются. Для выполнения рекурсии подструктур нужно воспользоваться ключом –r. Например, воспользоваться этим ключом для вывода объекта прерывания ядра с показом формата структуры _LIST_ENTRY, хранящейся в поле InterruptListEntry:
lkd> dt nt!_kinterrupt -r
+0x000 Type : Int2B
+0x002 Size : Int2B
+0x008 InterruptListEntry : _LIST_ENTRY
+0x000 Flink : Ptr64 _LIST_ENTRY
+0x000 Flink : Ptr64 _LIST_ENTRY
+0x008 Blink : Ptr64 _LIST_ENTRY
+0x008 Blink : Ptr64 _LIST_ENTRY
+0x000 Flink : Ptr64 _LIST_ENTRY
+0x008 Blink : Ptr64 _LIST_ENTRY
В файле справки Debugging Tools for Windows также объясняется, как настраиваются и используются отладчики ядра. Дополнительные подробности использования отладчиков ядра, предназначенные непосредственно для создателей драйверов устройств, могут быть найдены в документации по набору Windows Driver Kit.
Отладчик Visual Studio — очень эффективное средство. Прежде чем приступать к его использованию, следует ознакомиться с базовыми терминами, такими как отладчик, отладка и режим отладки. Когда позднее мы будем вести речь о поиске и устранении ошибок, мы будем иметь в виду то же самое.
Отладчик и отладка
Термин отладка может иметь разные значения, но в первую очередь он означает устранение ошибок в коде. Делается это по-разному. Например, отладка может выполняться путем проверки кода на наличие опечаток или с помощью анализатора кода. Код можно отлаживать с помощью профилировщика производительности. Кроме того, отладка может производиться посредством отладчика.
Отладчик — это узкоспециализированное средство разработки, которое присоединяется к работающему приложению и позволяет проверять код. В документации по отладке для Visual Studio именно это обычно подразумевается под отладкой.
Режим отладки и выполнение приложения
При первом запуске приложения в Visual Studio его можно запустить, нажав кнопку с зеленой стрелкой на панели инструментов (или клавишу F5). По умолчанию в раскрывающемся списке слева отображается элемент Отладка. Если вы не имеете опыта работы с Visual Studio, может показаться, что отладка приложения — это практически то же самое, что его запуск. На самом деле эти задачи хоть и связаны, но коренным образом различаются.
Значение Отладка соответствует конфигурации отладки. Когда вы запускаете приложение (нажимая зеленую стрелку или клавишу F5) в конфигурации отладки, оно запускается в режиме отладки. Это означает, что приложение запускается с присоединенным отладчиком. В результате вы получаете полный набор функций отладки, которые можно использовать для поиска ошибок в приложении.
Если у вас открыт проект, выберите в раскрывающемся списке Отладка элемент Выпуск.
При выборе этого параметра конфигурация отладки для проекта меняется на конфигурацию выпуска. Проекты Visual Studio имеют отдельные конфигурации выпуска и отладки для вашей программы. Производится построение отладочной версии для отладки и версии выпуска для окончательного выпуска программы. Сборка выпуска оптимизирована для обеспечения максимальной производительности, а отладочная сборка лучше подходит для отладки.
Когда следует использовать отладчик
Отладчик — важнейший инструмент для поиска и устранения ошибок в приложениях. Однако большое значение имеет контекст. Важно использовать все средства, имеющиеся в вашем распоряжении, чтобы быстро устранять ошибки. Зачастую лучшим "средством" являются правильные методики написания кода. Зная, когда лучше использовать отладчик, а когда — другие средства, вы также сможете более эффективно использовать отладчик.
Следующие шаги
Отла́дка — этап разработки компьютерной программы, на котором обнаруживают, локализуют и устраняют ошибки. Чтобы понять, где возникла ошибка, приходится :
- узнавать текущие значения переменных;
- и выяснять, по какому пути выполнялась программа.
Существуют две взаимодополняющие технологии отладки.
- Использование отладчиков — программ, которые включают в себя пользовательский интерфейс для пошагового выполнения программы: оператор за оператором, функция за функцией, с остановками на некоторых строках исходного кода или при достижении определённого условия.
- Вывод текущего состояния программы с помощью расположенных в критических точках программы операторов вывода — на экран, принтер, громкоговоритель или в файл. Вывод отладочных сведений в файл называется журналированием.
Вот что пишут об этих двух подходах к отладке программы Брайан Керниган и Роб Пайк:
Количество ошибок в программах заранее неизвестно, поэтому заранее неизвестна продолжительность отладки. Лучшим средством для сокращения отладки являются структурные методы проектирования программ с использованием структурного псевдокода или языков структурного программирования. Лучшие студенты-программисты — победители олимпиад по программированию, используя псевдокод, свои программы разрабатывают практически без ошибок.
Содержание
Инструменты
Отладка — это часто тяжёлая и утомительная задача. Способности программиста к отладке — это, по-видимому, важнейший фактор в обнаружении источника проблемы, но сложность отладки сильно зависит от используемого языка программирования и инструментов, в частности, отладчиков. Отладчик представляет из себя программный инструмент, позволяющий программисту наблюдать за выполнением исследуемой программы, останавливать и перезапускать её, прогонять в замедленном темпе, изменять значения в памяти и даже, в некоторых случаях, возвращать назад по времени.
Использование языков программирования высокого уровня, таких как обработка исключений, сильно облегчающие поиск источника проблемы. В некоторых низкоуровневых языках, таких как ассемблер, ошибки могут приводить к незаметным проблемам — например, повреждениям памяти или утечкам памяти, и бывает довольно трудно определить что стало первоначальной причиной ошибки. В этих случаях, могут потребоваться изощрённые приёмы и средства отладки.
Процесс отладки
Отладка начинается с попытки воспроизвести проблему, что может оказаться не простой задачей при программировании параллельных процессов или при некоторых необычных ошибках, известных как гейзенбаги.
В системе Android есть столько всего, что иногда даже не можешь найти этому применение. Одной из таких вещей является отладка по USB. Многие думают, что им это не нужно, но при этом, как только узнают, что это такое, начинают активно пользоваться и прибегать к этому на постоянной основе. Хотя, по большей части это нужно разработчикам или тем, кто занимается обслуживанием смартфонов. Тем не менее, есть вещи, которые можно сделать только через этот режим. Если вы не знаете, что это такое и надо ли это вам, я постараюсь рассказать, для чего это может понадобиться. А самое главное, отвечу на популярный вопрос: ”Как включить режим отладки по USB?”
Режим разработчика на Android дает очень много возможностей.
Для чего нужна отладка по USB
Как я уже сказал выше, отладка по USB нужна разработчикам, которые пишут приложения и тестируют их на смартфоне. Так же это может быть полезно для передачи файлов на смартфон или для их скачивания на компьютер.
Иногда режим отладки по USB помогает сделать копию приложений или установить их не из Google Play. А еще только так можно прошить смартфон или восстановить его работоспособность после какого-то сбоя.
Многие вспомнят еще один пункт в этом списке. Режим отладки по USB может очень пригодиться тем, кто планирует выполнять операции с Root-правами.
Рутинг (англ. Rooting) — процесс получения на Android прав суперпользователя. Иногда нужно для выполнения некоторых нестандартных действий.
В любом случае, перед тем, как вы будете пользоваться тем, что я расскажу далее, имейте в виду, что все риски вы несете сами. Если вы не уверены в своих действиях, лучше не надо лезть в это дело. Как говорится, целее будет.
Как включить или отключить режим отладки по USB
Во включении этого режима нет ничего сложного. Достаточно просто перейти в настройки телефона, пролистать до пункта ”Система” и открыть ”Настройки разработчика”. Если вы не знаете, как получить права разработчика, я расскажу об этом чуть ниже.
Если права у вас уже есть, надо просто пролистать до пункта ”Отладка по USB” и передвинуть переключатель в положение ”включено”. Таким же образом вы можете не только включить этот режим, но отключить при необходимости. Например, для большей безопасности или если вам это просто не нужно.
Отмечу, что названия некоторых пунктов меню могут немного отличаться в зависимости от производителя смартфона и того, какая на нем установлена версия операционной системы и оболочки. Несмотря на это, формулировки все равно будут примерно такими же, как я и написал. Думаю, вы без проблем разберетесь.
Если вам это интересно, один из наших авторов не так давно рассказывал, как установить файл APK на Android
Как включить режим разработчика
Как выключить режим разработчика
Будьте осторожны с правами разработчика. Это очень мощные инструмент.
После этого возможность зайти в настройки разработчика или пропадет вообще, или строка в разделе ”Система” останется, но она будет неактивна. Если она мозолит вам глаза и ее очень хочется убрать, то это тоже можно сделать.
Для этого из корневого меню настроек перейдите в пункт ”Приложения” и найдите там приложение, которое называется ”Настройки”. Далее перейдите в раздел ”Память” и нажмите ”Сброс”. В этом случает произойдет сброс памяти настроек и вы лишитесь режима разработчика. Если он снова понадобится, выше написано, как его включить. Процедура будет такая же, как в первый раз.
Стоит предупредить о двух вещах. Во-первых, вы можете потерять и другие сохраненные в настройках данные, например, аккаунты. Но ничего критического и безвозвратного произойти не должно. Во-вторых, на некоторых смартфонах, например, на Huawei P40 Pro, даже сброс памяти настроек не дает результата. Надо сначала отключить ”для разработчика” первым способом. Потом уже надо сбрасывать память.
Двери нашего Telegram-чата открыты для всех. Заходите к нам.
Опасно ли включать режим отладки по USB или режим разработчика
По большому счету опасность только в этом. Если вы переживаете за то, что отладка по USB будет включена всегда, особо беспокоиться не стоит, но и включать ее без надобности тоже нет смысла. Как говорят в народе: ”Работает? Не трогай”.
Читайте также: