Обновить
32K+

Отладка *

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

21,5
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Обратная отладка в большом масштабе

Время на прочтение6 мин
Охват и читатели2.4K

Отладка — неотъемлемая часть профессионального программирования. К старту курса о Fullstack-разработке на Python делимся переводом о том, как отладка устроена в Facebook; в статье вы найдёте ссылку на разработанный FB плагин трассировки для LLDB, который преобразует необработанную трассировку в удобочитаемый формат.

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

Читать далее

Трасси… что? Доклад Яндекса

Время на прочтение15 мин
Охват и читатели16K
Отладка приложения занимает бо́льшую часть нашего времени. Кто-то пользуется DevTools, кто-то обходится обычным console.log, кто-то использует профайлеры. Зачастую этих инструментов более чем достаточно. Но есть еще один, не такой известный и популярный в JavaScript-мире. О нем я и рассказал в докладе.

— Всем привет! Надеюсь, вы бодры, веселы, перекусили, заварили себе кофейку, потому что сейчас будет очень интересная и при этом доступная тема: «Трасси… что?». Правильнее было бы называть доклад «Трасси… что-о-о?!», но не будем так.

Почему большинство юнит тестов — пустая трата времени? (перевод статьи)

Время на прочтение27 мин
Охват и читатели13K

Перевод статьи "Why most unit testing is waste?"

Автор: James O Coplien, Перевод: Епишев Александр  

1.1 Наши дни

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

Читать далее

Как отладить программу, к которой у тебя нет доступа

Время на прочтение5 мин
Охват и читатели7.6K

Фото: Intricate Explorer, Unsplash

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

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

Разбираемся с «чёрными ящиками» и c тем, какими они бывают сегодня


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

  • Вы работаете со сторонним ПО, разработчики которого просто не раскрывают код.
  • Вы взаимодействуете с API, внутренняя логика которого абстрагирована.
  • У вас нет необходимых полномочий для доступа к Git-репозиторию.
  • Даже система с полным доступом может де-факто стать «чёрным ящиком» из-за своей сложности.
  • Сотрудник, обладавший всеми ключами и знаниями, внезапно уволился/пропал/умер.
  • Легаси-система состоит из .dll, которая «всегда работала» на сервере, и не была подключена к системе контроля версий. Чтобы просто посмотреть на код, её нужно декомпилировать, если это возможно, конечно.
Читать дальше →

Многоразовый шаблон логирования на Python для всех ваших приложений в Data Science

Время на прочтение4 мин
Охват и читатели8.4K

Идеальный способ отлаживать и отслеживать приложения — хорошо определённые, информативные и удобно структурированные логи. Они являются необходимым компонентом любого — малого, среднего или крупного — проекта на любом языке программирования, не только на Python. Не используйте print() или корневой логгер по умолчанию, вместо этого настройте логирование на уровне проекта. К старту нового потока курса по Data Science, мы перевели статью, автор которой решил поделиться своим шаблоном для логирования. Не лишним будет сказать, что этот шаблон пришёлся по душе многим специалистам — от дата-сайентистов профессионалов и до разработчиков ПО разного уровня.

Читать далее

Как использовать облачную ферму устройств Huawei для тестирования и отладки в Android Studio

Время на прочтение2 мин
Охват и читатели11K

Как ни странно, мало кто знает о том, что у Huawei есть ферма устройств в облаке, которую можно использовать для отладки и тестирования. И речь идет не об отладке через веб-интерфейс, что является более-менее известной фичёй консоли разработчика Huawei и нередко используется разработчиками. Мы же поговорим об отладке непосредственно из студии, с возможностью пользоваться ADB.

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

Следующим шагом открываем студию и устанавливаем плагин HMS Toolkit из магазин плагинов в самой студии (File -> Settings -> Plugins).

Читать далее

Инструмент для отслеживания DNS-запросов: dnspeep

Время на прочтение6 мин
Охват и читатели20K

Недавно я создала небольшой инструмент под названием dnspeep, который позволяет понять, какие DNS-запросы отправляет ваш компьютер и какие ответы он получает. Всего мой код занял 250 строк на Rust. В этой статье я расскажу о коде, объясню, для чего он нужен, почему в нём возникла необходимость, а также расскажу о некоторых проблемах, с которыми я столкнулась при его написании. И, конечно, вы сами сможете попробовать код в действии.

Читать далее

Почему в Visual Studio стек вызовов асинхронного кода иногда перевёрнут?

Время на прочтение5 мин
Охват и читатели6.7K

Вместе с моим коллегой Евгением мы потратили много времени. Приложение обрабатывает тысячи запросов в асинхронном конвейере, полном async/await. Во время нашего исследования мы получили странные вызовы, они выглядели как бы “перевернутыми”. Специально к старту нового потока курса по разработке на C#, рассказываем, почему вызовы могут оказаться перевёрнутыми даже в Visual Studio.

Читать далее

Как решать сложные (технические) проблемы

Время на прочтение4 мин
Охват и читатели15K
image


Мировоззрение


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


Поиск первопричины


  • Постарайтесь воспроизвести проблему
    • Можете ли вы воспроизвести это из командной строки?
      • Другим людям легче воспроизвести проблему
      • Легче проверить исправление
  • Есть ли логи? Что за сообщение об ошибке?
    • Прочтите описание ошибки. Каждое его слово. Дважды.
    • Есть ли где-нибудь опечатка (командная строка / конфигурация / код)?
  • Изолируйте проблему
    • Удалите некоторые части системы и попробуйте воспроизвести ошибку
    • Меняйте одно за раз, сохраняя все остальное постоянным
Читать дальше →

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

Время на прочтение3 мин
Охват и читатели40K

В течение последних 20 лет сотрудники Post Office (почтовая компания из Великобритании) разбирались с программой Horizon, в которой имелась фатальная ошибка: из-за неисправности казалось, что сотрудники воровали десятки тысяч фунтов. Некоторые местные почтмейстеры были осуждены и посажены в тюрьму из-за того, что Post Office упорно настаивал на том, что программному обеспечению можно доверять. После десятилетий баталий приговоры 39 человек, наконец, отменили. Случай стал крупнейшей судебной ошибкой, которую когда-либо видела Великобритания.

Читать далее

Используем DevTools в headless Chrome

Время на прочтение4 мин
Охват и читатели5.1K


Если вы когда-нибудь использовали Puppeteer, то наверняка сталкивались с неудобной отладкой скриптов на удалённых нодах headless Chrome. Часто так не хватает консоли, а лучше полноценной панели инструментов для изучения запросов и логов… хотя постойте. Puppeteer сам по себе построен поверх Chrome DevTools Protocol, значит, наверняка есть куча решений для проброса данных в локальные DevTools? А вот и нет. Есть только два более-менее рабочих инструмента: отладчик для browserless.io и pptrconsole. Второй по функционалу и стабильности уже далеко впереди, поэтому поговорим про него.
Читать дальше →

«Хотите как в (средневековой) Европе?» — легализуем гей-браки в Crusader Kings III с помощью Ghidra

Время на прочтение9 мин
Охват и читатели8.8K
image

Crusader Kings III — отличная игра. Замечательна она не только своим официальным контентом, но и мощными инструментами моддинга. Ещё до её выпуска меня привлекли обещания разработчиков о расширении возможностей моддинга.

Хотя игра позволяет игроку реформировать средневековые культуры, привив им терпимость к однополым парам, в CK3 версии 1.3.1 пока нет возможности заключения однополых браков. Однако они должны быть приемлемы; ведь для этого и нужны моды!
Читать дальше →

Используй console.log () как про

Время на прочтение2 мин
Охват и читатели26K

Использование console.log() для отладки JavaScript - самая распространенная практика среди разработчиков. Но есть еще кое-что ...

Объект console обеспечивает доступ к отладочной консоли браузера. Особенности того, как она работает, варьируются от браузера к браузеру, но де-факто существует набор функций, которые обычно предоставляются.

Читать далее

Ближайшие события

Chipmunk: обновления

Время на прочтение2 мин
Охват и читатели2.2K

Короткий обзор очередных обновлений смотрелки логов chipmunk. Много исправлений, много корректировок и немного фишек, в том числе запрашиваемых сообществом.

Читать далее

Как я нашел баг в Google Meet

Время на прочтение7 мин
Охват и читатели6.5K

Это отладочное приключение Брюса Доусона, разработчика Chrome и блогера, позволило снизить загрузку процессора при работе с веб-камерой примерно на 3%  - настоящая помощь для тех, кто полагается на видеозвонки.

Читать далее

$mol_strict: Как же меня [object Object] этот ваш undefined NaN

Время на прочтение5 мин
Охват и читатели7.3K

Здравствуйте, меня зовут Дмитрий Карловский и я… не прощаю ошибок. Как только вижу оную — тут же бросаю что-нибудь исключительно тяжёлое. И как же тяжела работа программиста на JS...


class Foo extends Object {
    get name(){ return 'Jin' }
}
const foo = new Foo

`Здравствуйте, ${ foo }!`
// "Здравствуйте [object Object]!"

`В этом месяце вы заработали ${ foo / 1000 } тысяч рублей.`
// "В этом месяце вы заработали NaN тысяч рублей."

`Ваша цель "${ 'foo'[4] }" наконец-то достигнута.`
// "Ваша цель "undefined" наконец-то достигнута."

`Осталось ещё ${ foo.length - 1 } целей и вы достигнете успеха.`
// "Осталось ещё NaN целей и вы достигнете успеха."

foo.__proto__= { name: 'придурок' };
`До скорых встреч, ${ foo.name }.`
// "До скорых встреч, придурок."

Облегчить его страдания можно разными путями..


  1. Прикрыться тайпскриптом. Но в рантайме ноги всё равно остаются босыми, и на них кто-нибудь вечно наступает.
  2. Обложиться проверками. Но чуть замешкаешься и рантайм грабли тут же бьют по голове.
  3. Исправить JS. Даже не надейтесь.
  4. Исправить JS рантайм. Ну, давайте подумаем..
Читать дальше →

История одной ошибки

Время на прочтение3 мин
Охват и читатели6.2K


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

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

В продолжение серии статей про различные полезности для STM32 (1, 2 и 3), хочу рассказать, как в некоторых случаях, такое упрощение работы может стать источником совершенно не очевидных ошибок.
Читать дальше →

Производительность главнее всего

Время на прочтение3 мин
Охват и читатели17K
image

Как создать быстрое программное обеспечение?

Неверный способ


Если вы программист, вы, вероятно, знакомы с этой цитатой Кнута:

Преждевременная оптимизация — корень всех зол.


Многие программисты считают, что это нормальный способ разработки продуктов:

image

Некоторые также думают, что производительность — это просто еще одна функция, которую можно добавить позже:

image

Я считаю эту логику ошибочной. Если ваша программа все еще является прототипом и выполняет, например, 1% (20%, 50%, 90%) того, что она должна делать, и она уже работает медленно, то она будет еще более медленной после того, как вы ее закончите, разве нет? Если вы заставите ее делать больше, почему она должна стать быстрее?

Если кто-то говорит:

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


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

И у меня с этим проблемы. Это более или менее равносильно тому, что финальная производительность остается на волю случая. ЕСЛИ вам удастся найти какое-то огромное узкое место в производительности и если его изменение не повлияет на архитектуру, вы МОЖЕТЕ получить некоторое ускорение, да. Но никто не может вам этого гарантировать. Это ставка. Вы либо получите некое ускорение, либо нет. По сути, вы принимаете любую производительность с небольшим шансом на небольшое улучшение. И вы назовете это хорошей инженерией?
Читать дальше →

Balloon Fight: перенос с VS system на NES

Время на прочтение10 мин
Охват и читатели4.7K

Итак, для начала хочется отметить, что хотя я и пишу в песочницу, это уже не первый мой текст на Хабре. Когда-то я писал how to для блога зарубежных ретроигроделов, а поскольку они зарубежные, статьи приходилось переводить на английский. И я был немного удивлен, обнаружив здесь переведённую обратно на русский язык статью об отладке игр для NES.

Вообще меня очень увлекает история аркадных автоматов, консолей, игр, и немножко программирование. О том, как программируют для NES в наши дни, я писал в другой «making of» статье, которую также публиковали на Хабре.

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

Читать далее

Полезные скрипты для WinDBG: команда !exccandidates

Время на прочтение4 мин
Охват и читатели2K

Некоторое время назад мы опубликовали в OpenSource небольшую библиотечку скриптов для популярного отладчика Windbg. Они предназначены для автоматизации ряда рутинных задач, возникающих при анализе причин падения программ как при отладке вживую, так и при работе с дампами памяти. Мы запланировали несколько постов, объясняющих, как эти скрипты использовать. Вот первый пост из данного цикла. Он демонстрирует использование команды !exccandidates на синтетическом примере.

Читать далее