Что такое откладка в пк

Режим отладки по USB на Android

Что такое откладка в пк. Смотреть фото Что такое откладка в пк. Смотреть картинку Что такое откладка в пк. Картинка про Что такое откладка в пк. Фото Что такое откладка в пк

Что такое откладка в пк. Смотреть фото Что такое откладка в пк. Смотреть картинку Что такое откладка в пк. Картинка про Что такое откладка в пк. Фото Что такое откладка в пк

Содержание

Содержание

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

Как активировать

Чтобы получить доступ к режиму отладки по USB, сперва нужно включить системный раздел «Для разработчиков». Для этого откройте приложение «Настройки» и перейдите в раздел «О телефоне». Затем тапните несколько раз на «Номер сборки», пока не увидите подсказку «режим отладки включен». В зависимости от версии Android и конкретной оболочки, названия опций могут отличаться. Для подтверждения придется ввести код разблокировки устройства.

Что такое откладка в пк. Смотреть фото Что такое откладка в пк. Смотреть картинку Что такое откладка в пк. Картинка про Что такое откладка в пк. Фото Что такое откладка в пк

Теперь зайдите в подраздел «Система» — здесь появится новый пункт. Активируйте режим разработчика, далее прокрутите список и найдите пункт «Отладка по USB».

Что такое откладка в пк. Смотреть фото Что такое откладка в пк. Смотреть картинку Что такое откладка в пк. Картинка про Что такое откладка в пк. Фото Что такое откладка в пк

Настройка ПК

Чтобы воспользоваться отладкой, необходимо установить на компьютер программу ADB. Android Debug Bridge – это одна из составляющих универсального средства разработки Android SDK. Чтобы не устанавливать весь SDK целиком, скачиваем только ADB. Отдельно его можно загрузить, например, на ресурсе XDA-Developers.

Распаковываем архив в легкодоступную папку, например, в корень системного диска:

Что такое откладка в пк. Смотреть фото Что такое откладка в пк. Смотреть картинку Что такое откладка в пк. Картинка про Что такое откладка в пк. Фото Что такое откладка в пк

Теперь надо открыть командную строку из этой папки. Это можно сделать, удерживая Shift и щелкнув правой кнопкой мыши на свободном месте окна, а затем выбрать параметр «Открыть окно PowerShell».

Подключите смартфон к компьютеру. Измените режим USB на режим «передачи файлов (MTP)». В окне командной строки введите команду «adb devices» (без кавычек).

Что такое откладка в пк. Смотреть фото Что такое откладка в пк. Смотреть картинку Что такое откладка в пк. Картинка про Что такое откладка в пк. Фото Что такое откладка в пк

На экране телефона вы увидите всплывающее окошко — нажимайте «разрешить доступ для отладки по USB». Наконец, повторно введите команду «adb devices». Если все прошло успешно, вы должны увидеть серийный номер вашего устройства в командной строке.

Готово: теперь вы можете запускать любую команду ADB на своем устройстве.

Для чего нужен режим отладки

Как было сказано выше, отладка по USB в основном используется мобильными разработчиками. Подключая смартфон к ПК, они получают возможность практически мгновенно протестировать написанное приложение. Но мы разберем, чем может пригодиться отладка обычному пользователю.

Например, получение Root-прав. Android создавался на базе ОС Linux, откуда и перенял основные принципы. Традиционно, Root — это название учетной записи администратора, которая имеет неограниченные права. Получив такой доступ, вы сможете делать со смартфоном что угодно: удалять и редактировать системные файлы, стирать встроенные приложения, устанавливать пользовательские модификации, разгонять процессор и многое другое.

Root-права также позволяют поставить кастомное рекавери (TWRP). Это меню, при помощи которого можно устанавливать альтернативные прошивки. Для каждого телефона способ получения «рута» отличается — нет какой-то универсальной инструкции. Мануалы для конкретного смартфона можно найти, например, на форуме 4PDA.

Что такое откладка в пк. Смотреть фото Что такое откладка в пк. Смотреть картинку Что такое откладка в пк. Картинка про Что такое откладка в пк. Фото Что такое откладка в пк

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

Ранее режим отладки использовался для доступа к некоторым скрытым функциям системы при помощи командной строки. Однако с появлением Android 10, большинство таких опций можно включить напрямую с телефона — из вышеупомянутого раздела «Для разработчиков». Например, чтобы включить опцию записи экрана, найдите «Экспериментальные функции» и активируйте флажок напротив «settings_screenrecord_long_press toggle»:

Что такое откладка в пк. Смотреть фото Что такое откладка в пк. Смотреть картинку Что такое откладка в пк. Картинка про Что такое откладка в пк. Фото Что такое откладка в пк

Тем не менее, старый способ тоже доступен: введите в PowerShell команду «adb shell settings put global settings_screenrecord_long_press true». Она также активирует возможность записи экрана смартфона.

Полезные команды

Когда смартфон подключен в режиме отладки по USB, можно выполнять различные действия с помощью командной строки. Приведем несколько интересных команд:

Режим отладки может быть полезен пользователям, которые хотят модицифировать Android-смартфон: устанавливать кастомные прошивки и пользовательские патчи, а также получить доступ к административным правам. На альтернативной платформе iOS таких возможностей нет. Однако если вы не до конца понимаете, как это работает, то лучше не экспериментировать, чтобы избежать неприятных последствий.

Источник

Что такое отладка по USB и как ее включить?

Активировав отладку по USB, вы получите дополнительные возможности доступа к вашему Android-смартфону. Рассказываем, как включить эту функцию и что при этом нужно учитывать.

Что такое откладка в пк. Смотреть фото Что такое откладка в пк. Смотреть картинку Что такое откладка в пк. Картинка про Что такое откладка в пк. Фото Что такое откладка в пк

Что такое откладка в пк. Смотреть фото Что такое откладка в пк. Смотреть картинку Что такое откладка в пк. Картинка про Что такое откладка в пк. Фото Что такое откладка в пк

Что такое отладка по USB?

Отладка (Debugging) — это процесс поиска и устранения ошибок в программном обеспечении (от английского bugs). При активированной отладке по USB ваш смартфон (или планшет) при подключении к ПК с помощью USB-кабеля переходит в специальный режим. В нем вы можете просматривать и даже изменять файлы на смартфоне с компьютера. Если вы хотите получить root-права на своем гаджете, также может потребоваться предварительно активировать отладку по USB.

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

Что такое откладка в пк. Смотреть фото Что такое откладка в пк. Смотреть картинку Что такое откладка в пк. Картинка про Что такое откладка в пк. Фото Что такое откладка в пк

Отладка по USB: активируйте раздел «Для разработчиков»

Чтобы получить доступ к отладке по USB, вы должны сначала активировать раздел «Для разработчиков». Это необходимо сделать всего один раз. Однако точные обозначения этого раздела могут немного отличаться в зависимости от версии Android и производителя устройств:
Откройте настройки на вашем смартфоне или планшете.

Как включить отладку по USB на Android?

После разблокировки опций разработчиков вы получите доступ к отладке по USB.

Источник

Как включить режим отладки по USB и зачем это нужно

В системе Android есть столько всего, что иногда даже не можешь найти этому применение. Одной из таких вещей является отладка по USB. Многие думают, что им это не нужно, но при этом, как только узнают, что это такое, начинают активно пользоваться и прибегать к этому на постоянной основе. Хотя, по большей части это нужно разработчикам или тем, кто занимается обслуживанием смартфонов. Тем не менее, есть вещи, которые можно сделать только через этот режим. Если вы не знаете, что это такое и надо ли это вам, я постараюсь рассказать, для чего это может понадобиться. А самое главное, отвечу на популярный вопрос: ”Как включить режим отладки по USB?”

Что такое откладка в пк. Смотреть фото Что такое откладка в пк. Смотреть картинку Что такое откладка в пк. Картинка про Что такое откладка в пк. Фото Что такое откладка в пк

Режим разработчика на Android дает очень много возможностей.

Для чего нужна отладка по USB

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

Иногда режим отладки по USB помогает сделать копию приложений или установить их не из Google Play. А еще только так можно прошить смартфон или восстановить его работоспособность после какого-то сбоя.

Многие вспомнят еще один пункт в этом списке. Режим отладки по USB может очень пригодиться тем, кто планирует выполнять операции с Root-правами.

Рутинг (англ. Rooting) — процесс получения на Android прав суперпользователя. Иногда нужно для выполнения некоторых нестандартных действий.

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

Как включить или отключить режим отладки по USB

Во включении этого режима нет ничего сложного. Достаточно просто перейти в настройки телефона, пролистать до пункта ”Система” и открыть ”Настройки разработчика”. Если вы не знаете, как получить права разработчика, я расскажу об этом чуть ниже.

Что такое откладка в пк. Смотреть фото Что такое откладка в пк. Смотреть картинку Что такое откладка в пк. Картинка про Что такое откладка в пк. Фото Что такое откладка в пкЧто такое откладка в пк. Смотреть фото Что такое откладка в пк. Смотреть картинку Что такое откладка в пк. Картинка про Что такое откладка в пк. Фото Что такое откладка в пк

Если права у вас уже есть, надо просто пролистать до пункта ”Отладка по USB” и передвинуть переключатель в положение ”включено”. Таким же образом вы можете не только включить этот режим, но отключить при необходимости. Например, для большей безопасности или если вам это просто не нужно.

Что такое откладка в пк. Смотреть фото Что такое откладка в пк. Смотреть картинку Что такое откладка в пк. Картинка про Что такое откладка в пк. Фото Что такое откладка в пкЧто такое откладка в пк. Смотреть фото Что такое откладка в пк. Смотреть картинку Что такое откладка в пк. Картинка про Что такое откладка в пк. Фото Что такое откладка в пк

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

Если вам это интересно, один из наших авторов не так давно рассказывал, как установить файл APK на Android

Как включить режим разработчика

Для включения режима разработчика на Android достаточно перейти в настройки вашего телефона, найти раздел ”О телефоне”, который обычно расположен в конце, и открыть его. Далее надо будет найти поле ”Номер сборки” и несколько раз подряд коснуться его. 8-10 раз будет достаточно. Главное сделать это без перерывов и до того, как на экране не появится уведомление. Возможно, еще до этого уведомления вас попросят еще раз ввести пароль. Так было не всегда, но сейчас это нужно для безопасности, о которой так много говорят в последнее время.

Что такое откладка в пк. Смотреть фото Что такое откладка в пк. Смотреть картинку Что такое откладка в пк. Картинка про Что такое откладка в пк. Фото Что такое откладка в пкЧто такое откладка в пк. Смотреть фото Что такое откладка в пк. Смотреть картинку Что такое откладка в пк. Картинка про Что такое откладка в пк. Фото Что такое откладка в пк

В нижней части экрана вы увидите одно из двух уведомлений. Или вам откроются права разработчика, или вам скажут, что они у вас уже есть. После этого надо вернуться в настройки и открыть пункт ”Система”. Среди прочего там появится новый раздел. Он так и называется — ”Для разработчиков”. Хотя опять же у некоторых производителей названия могут меняться.

Как выключить режим разработчика

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

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

Будьте осторожны с правами разработчика. Это очень мощные инструмент.

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

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

Что такое откладка в пк. Смотреть фото Что такое откладка в пк. Смотреть картинку Что такое откладка в пк. Картинка про Что такое откладка в пк. Фото Что такое откладка в пкЧто такое откладка в пк. Смотреть фото Что такое откладка в пк. Смотреть картинку Что такое откладка в пк. Картинка про Что такое откладка в пк. Фото Что такое откладка в пк

Что такое откладка в пк. Смотреть фото Что такое откладка в пк. Смотреть картинку Что такое откладка в пк. Картинка про Что такое откладка в пк. Фото Что такое откладка в пкЧто такое откладка в пк. Смотреть фото Что такое откладка в пк. Смотреть картинку Что такое откладка в пк. Картинка про Что такое откладка в пк. Фото Что такое откладка в пк

Стоит предупредить о двух вещах. Во-первых, вы можете потерять и другие сохраненные в настройках данные, например, аккаунты. Но ничего критического и безвозвратного произойти не должно. Во-вторых, на некоторых смартфонах, например, на Huawei P40 Pro, даже сброс памяти настроек не дает результата. Надо сначала отключить ”для разработчика” первым способом. Потом уже надо сбрасывать память.

Двери нашего Telegram-чата открыты для всех. Заходите к нам.

Опасно ли включать режим отладки по USB или режим разработчика

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

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

Источник

Что такое отладка?

Отладчик Visual Studio — очень эффективное средство. Прежде чем приступать к его использованию, следует ознакомиться с базовыми терминами, такими как отладчик, отладка и режим отладки. Когда позднее мы будем вести речь о поиске и устранении ошибок, мы будем иметь в виду то же самое.

Отладчик и отладка

Термин отладка может иметь разные значения, но в первую очередь он означает устранение ошибок в коде. Делается это по-разному. Например, отладка может выполняться путем проверки кода на наличие опечаток или с помощью анализатора кода. Код можно отлаживать с помощью профилировщика производительности. Кроме того, отладка может производиться посредством отладчика.

Отладчик — это узкоспециализированное средство разработки, которое присоединяется к работающему приложению и позволяет проверять код. В документации по отладке для Visual Studio именно это обычно подразумевается под отладкой.

Режим отладки и выполнение приложения

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

Что такое откладка в пк. Смотреть фото Что такое откладка в пк. Смотреть картинку Что такое откладка в пк. Картинка про Что такое откладка в пк. Фото Что такое откладка в пк

Значение Отладка соответствует конфигурации отладки. Когда вы запускаете приложение (нажимая зеленую стрелку или клавишу F5) в конфигурации отладки, оно запускается в режиме отладки. Это означает, что приложение запускается с присоединенным отладчиком. В результате вы получаете полный набор функций отладки, которые можно использовать для поиска ошибок в приложении.

Если у вас открыт проект, выберите в раскрывающемся списке Отладка элемент Выпуск.

Что такое откладка в пк. Смотреть фото Что такое откладка в пк. Смотреть картинку Что такое откладка в пк. Картинка про Что такое откладка в пк. Фото Что такое откладка в пк

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

Когда следует использовать отладчик

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

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

Из этой статьи вы узнали общие принципы отладки приложений. Теперь вы можете приступить к знакомству с процессом отладки в Visual Studio и написанию кода с меньшим количеством ошибок. В следующих статьях приводятся примеры кода на C#, но основные понятия применимы ко всем языкам, поддерживаемым средой Visual Studio.

Источник

Отладка как процесс

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

Таким образом, оптимизация и систематизация процесса debugging’а может приносить весомые плоды в виде сэкономленных человеко-часов, повышения скорости решения проблем и, в конце концов, увеличения лояльности ваших пользователей.

Что такое откладка в пк. Смотреть фото Что такое откладка в пк. Смотреть картинку Что такое откладка в пк. Картинка про Что такое откладка в пк. Фото Что такое откладка в пк

Сергей Щегрикович (dotmailer) на конференции DotNext 2018 Piter предложил взглянуть на отладку как на процесс, который может быть описан и оптимизирован. Если вы до сих пор не имеете четкого плана поиска багов — под катом видео и текстовая расшифровка доклада Сергея.

(А еще в конце поста мы добавили обращение Джона Скита ко всем дотнетчикам, обязательно посмотрите)

Моя цель — ответить на вопрос: как фиксить баги эффективно и на чем должен быть фокус. Я думаю, что ответ на этот вопрос — процесс. Процесс debugging’а, который состоит из очень простых правил, и вы хорошо их знаете, но, наверно, используете неосознанно. Поэтому моя задача — это систематизировать их и на примере показать как стать более эффективными.

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

Утилиты отладки

Конечно, любой debugging невозможен без утилит для отладки. Моими любимыми являются:

Падающий сервис

Начнем с примера из моей жизни, в котором я покажу, как бессистемность процесса debugging’а ведет к неэффективности.

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

Сервис был для нас не критичен и мы могли это пережить. Но к проекту подключился я и первое, что решил сделать — исправить это.

Компилируем, деплоим, сервис падает, ошибок нет. За этим процессом проходит три дня, теперь уже приходят мысли о том, что надо наконец-то начать думать и делать что-нибудь другое. Делать можно много чего: попробовать воспроизвести ошибку на локальной машине, смотреть дампы памяти и тд. Казалось, еще дня два и я пофикшу этот баг…

Я смотрел в PerformanceMonitor, где видел сервис, который падает, потом поднимается, потом снова падает. Это состояние называется отчаяние и выглядит вот так:

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

Красная линия — это количество нативных handle’ов, которыми владеет процесс. Нативный handle — это ссылка на ресурс операционной системы: файл, реестр, ключ реестра, мьютекс и тд. По какому-то непонятному стечению обстоятельств падение роста количества handle’ов совпадает с моментами падения сервиса. Это наталкивает на мысль о том, что где-то есть утечка handle’ов.

Берем дамп памяти, открываем его в WinDbg. Начинаем выполнять команды. Попробуем посмотреть очередь финализации тех объектов, которые должны быть освобождены приложением.

В самом конце списка я нашел web-браузер.

Решение простое — взять WebBrowser и вызывать для него dispose :

Выводы из этой истории можно сделать такие: две недели — это долго и слишком много, чтобы найти невызванный dispose ; то, что мы нашли решение проблемы — везение, так как не было какого-то определенного подхода, не было системности.

После этого у меня возник вопрос: а как дебажить эффективно и что для этого делать?

Для этого надо знать всего три вещи:

Правила отладки

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

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

Пойми систему. Брайан Керниган сказал как-то, что если мы были такие умные, чтобы написать эту систему, то нам нужно быть вдвойне умными, чтобы её дебажить.

Небольшой пример к правилу. Наш мониторинг рисует графики:

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

Оптимизация web-performance делается просто: берем PerfView, запускаем его на продакшн-машине, он снимает trace в течении 3-4 минут, мы этот trace забираем на локальную машину и начинаем его изучать.

Одна из статистик, которую показывает PerfView — garbage collector.

Посмотрев на эту статистику мы увидели, что 85% времени сервис тратит на сборку мусора. Можно в PerfView увидеть где конкретно тратится это время.

В нашем случае — это создание строк. Исправление напрашивается само самой: заменяем все string’и на StringBuilder’ы. Локально получаем прирост производительности на 20-30%. Деплоим на продакшн, смотрим результаты в сравнении со старым графиком:

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

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

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

Правило «проверь штепсель» — это про факты и данные. Отладка не начинается с запуска WinDbg или PerfView на продакшн-машинах, она начинается с проверок фактов и данных. Если сервис не отвечает, возможно он просто не запущен.

Разделяй и властвуй. Это первое и, наверно, единственное правило, которое включает в себя отладку как процесс. Оно про гипотезы, их выдвижение и проверку.

Один из наших сервисов не хотел останавливаться.

Делаем гипотезу: возможно, в проекте есть цикл, который бесконечно что-то обрабатывает.

Проверить гипотезу можно по-разному, один из вариантов — это взять дамп памяти. Из дампа вытаскиваем call-stack’и всех потоков с помощью команды

Делаем вторую гипотезу: возможно, у нас deadlock одной задачи на вторую. Чтобы это проверить, можно через WinDbg посмотреть каждую задачу по-отдельности.

Оказывается, одна из задач упала, а вторая — нет. В проекте мы увидели такой код:

Он означает, что инициализационная задача открывает connection и после этого выставляет TaskCompletionSource в true. А что, если здесь упадет Exception? Тогда мы не успеваем выставить SetResult в true, поэтому fix к этому багу был такой:

В этом примере мы выдвигали две гипотезы: о бесконечном цикле и о deadlock’e. Правило «разделяй и властвуй» помогает локализовать ошибку. Последовательными приближениями и решаются такие проблемы.

Самое важное в этом правиле — это гипотезы, поскольку со временем они превращаются в паттерны. И в зависимости от гипотезы мы применяем разные действия.

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

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

Это твой баг. Об этом правиле расскажу на примере.

Для меня это вылилось в 11 месяцев работы с поддержкой Microsoft, конечно, не ежедневно, но от начала до fix’а прошло именно 11 месяцев. Кроме этого, мы отправили им десятки гигабайт дампов памяти, мы ставили сотни private-сборок, чтобы поймать эту ошибку. И все это время мы не могли сказать нашим клиентам, что виновата Microsoft, а не мы. Поэтому баг всегда ваш.

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

Ты приходишь с утра на работу, а Elastic лежит.

Вопросы «почему?» помогают найти корень проблемы. В примере мы много раз могли свернуть с правильного пути, но полный fix выглядит так: обновляем плагин, запускаем сервисы, наращиваем память и делаем пометку на будущее, что в следующий раз, при добавлении новых узлов в кластер, нужно убедиться в достаточности памяти на Master Nodes.

Алгоритм отладки

Впервые про алгоритм отладки я прочитал в книге Джона Роббинса «Debugging applications». Он описывает процесс отладки так:

Этот алгоритм полезен своим внутренним циклом — работой с гипотезой.

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

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

На этот алгоритм у меня есть хороший пример. На одном из наших web-сервисов падал exception.

Первая наша мысль — это не наша проблема. Но по правилам, это все-таки проблема наша.

Во-вторых, пытаемся описать проблему: если пользователь делает http-запрос на наш сервис в момент, когда StructureMap пытается сделать новую зависимость, то в этом случае происходит исключение.

В-третьих, выдвигаем гипотезу о том, что StructureMap — это wrapper и внутри что-то есть, что кидает внутреннее исключение. Проверяем гипотезу с помощью procdump.exe.

Исследуя call-stack этого исключения понимаем, что оно происходит внутри object-builder’а в самом StructureMap.

Но NullReferenceException — это не сама проблема, а следствие. Нужно понять где оно возникает и кто его генерирует.

Итак, алгоритм отладки — это интуитивный алгоритм, который существенно экономит время. Он делает упор на гипотезу — а это самое главное в отладке.

Проактивная отладка

По своей сути проактивная отладка отвечает на вопрос «что произойдет, когда появится баг».

Важность техники проактивной отладки можно увидеть на диаграмме цикла жизни бага.

Проблема в том, что чем дольше баг живет, тем больше мы ресурсов (времени) на него тратим.

Правила отладки и алгоритм отладки фокусируют нас на моменте, когда баг найден и мы можем придумать что дальше с ним делать. На самом же деле мы хотим сместить свой фокус на момент создания бага. Я считаю, что мы должны делать Minimum Debuggable Product (MDP), то есть такой продукт, который имеет минимально необходимый набор инфраструктуры для эффективной отладки в продакшене.

MDP состоит из двух вещей: фитнес-функции и USE метода.

Фитнес-функции. Были популяризированы Нил Фордом и соавторами в книге «Building Evolutionary Architectures ». По своей сути фитнес-функции, по мнению авторов книги, выглядят так: есть архитектура приложения, которую мы можем разрезать под разными углами, получая такие свойства архитектуры, как maintainability, performance и прочее, и на каждый такой разрез мы должны писать тест — фитнес-функцию. Таким образом, фитнес-функция — это тест на архитектуру.

В случае MDP, фитнес-функция — это проверка debuggability. Для написания таких тестов можно использовать все что угодно: NUnit, MSTest и тд. Но, поскольку, отладка — это, зачастую, работа с внешними tool’ами, я покажу на примере использование Pester’а (powershell unit testing framework). Его плюс здесь в том, что он хорошо работает с командной строкой.

Например, внутри компании мы договариваемся, что будем использовать конкретные библиотеки для логирования; при логировании мы будем использовать конкретные паттерны; pdb-символы должны быть отданы всегда на symbol server. Это и будет являться теми условностями, которые мы будем проверять в наших тестах.

Этот тест проверяет, что все pdb-символы были отданы на symbol server и были отданы правильно, то есть те, которые содержат номера строк внутри. Для этого берем скомпилированную версию продакшена, находим все exe- и dll-файлы, пропускаем все эти бинарники через утилиту syschk.exe, которая входит в пакет «Debugging tools for windows». Утилита syschk.exe сверяет бинарник с symbol server’ом и, если находит там pdb-файл, печатает отчет об этом. В отчете мы ищем строку «Line numbers: TRUE». И в финале проверяем, чтобы результат был не «null or empty».

Такие тесты необходимо встраивать в continuous deployment pipeline. После того, как прошли интеграционные тесты и unit-тесты, запускаются фитнес-функции.

Покажу ещё один пример с проверкой нужных библиотек в коде.

В тесте мы берем все файлы packages.config и пытаемся найти в них библиотеки nlog. Аналогично мы можем проверить, что внутри поля nlog используется поле correlation id.

USE методы. Последнее, из чего состоит MDP — это метрики, которые нужно собирать.

Продемонстрирую на примере метода USE, который был популяризирован Бренданом Греггом. Идея простая: если в коде есть какая-то проблема, достаточно взять три метрики: utilization (использование), saturation (насыщение), errors (ошибки), которые помогут осознать где проблема.

Некоторые компании, например Circonus (они делают monitoring soft), свои дашборды выстраивают в виде обозначенных метрик.

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

Если взять какую-нибудь бизнес-фичу, то, скорее всего, в ней можно выделить три метрики:

Первая гипотеза, которую мы сделали, — сервис упал и надо его запустить заново. При проверке оказывается, что сервис работает, использует 4-5% CPU.

Что такое откладка в пк. Смотреть фото Что такое откладка в пк. Смотреть картинку Что такое откладка в пк. Картинка про Что такое откладка в пк. Фото Что такое откладка в пк

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

Утилита позволяет в realtime подписываться к ETW-events и выводить их на экран.

Следующая гипотеза — кто-то съедает всю память. Согласно дампу памяти, больше всего объектов находится в кэше.

Из кода видно, что каждый час кэш должен очищаться. Но памяти уже не хватало, до очистки даже не доходили. Посмотрим на пример метрики USE для кеша.

По графику сразу видно — возросла память, сразу начались ошибки.

Итак, выводы о том, что же такое проактивная отладка.

Итак, как фиксить баги эффективно?

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *