Обновить
32K+

Отладка *

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

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

Искусство отладки FPGA: как сократить срок тестирования за счет грамотной разработки

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

Давайте попробуем оптимизировать самый времязатратный этап разработки устройств на базе ПЛИС — отладку прошивки. В этой статье мы расскажем о принципе 20/80 при планировании времени, рассмотрим инструменты для отладки FPGA, вспомним Гордона Мура и Уинстона Черчилля (да-да), затроним отладку сложных распределенных систем и внешних интерфейсов, а в конце — разберемся с типичными ошибками и поделимся полезными практическими советами.

Для начала рассмотрим типовой цикл разработки и моделирования FPGA-прошивки:

Читать далее

Рекурсивное сообщение о непредвиденной рекурсии

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

Очередной «смешной случай из жизни» заставил немного понервничать.

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

Однако при эксплуатации получилось не очень удобно. Дело в том, что если при крахе приложение снять, то, естественно, графическое окно исчезает, и пользователю, по крайней мере, сразу видно, что вся система рухнула. Правда и информация о крахе системы так же исчезает с одновременным закрытием и консольного окна. А вот если управление перехватывает отладчик в консольном (свернутом по умолчанию) окне, то графическое изображение на экране «замораживается» и при беглом взгляде может показаться, что все еще продолжает работать. Бывали случаи введения пользователя такой картиной в заблуждение. В конце концов, был найден компромисс: при исключении программа все-таки снимается, но вся информация, выдаваемая в консольном окне, дублируется еще и в файл протокола.

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

Читать далее

Assembler. Установка интерпретатора и запуск первой программы через DOSBox

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

В данном курсе планируется разобрать основные особенности программирования на самой простой реализации assembler – TASM. Этих знаний лично мне вполне хватило, чтобы на отлично сдать ЭВМ в институте и закончить все лабораторные работы. Во многих уроках будет домашние задание по их мотивам.

Для начала давайте установим наш старенький компилятор.
Ссылка

Читать далее

Отладка Java-приложений из командной строки

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

Некоторые ошибки трудно воспроизвести на вашем персональном компьютере, но их легко воспроизвести на производственных или тестовых машинах. Это обычная ситуация, с которой часто сталкиваются профессиональные Java-разработчики. Для отладки таких проблем OpenJDK предоставляет два инструмента: remote debugging и jdb. Эта статья посвящена jdb.

Для приложений Java типичными производственными и тестовыми машинами являются серверы Linux без графического интерфейса, поэтому доступны только инструменты командной строки. И мы не можем использовать профессиональные IDE, такие как IntelliJ IDEA, Eclipse или Apache NetBeans IDE.

В таких сценариях мы можем использовать jdbjdb - это отладчик командной строки, входящий в состав OpenJDK.

Это перевод руководства для начинающих. Очевидно эксперты все это знают и им не стоит тратит время на его чтение...

Читать далее

Обмен данными между двумя Teensy 4.0 и ПК: танцы с бубном

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


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

«Чудес не бывает». Детективом по следам клиента

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

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

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

Читать далее

Алгоритм ранжирования ошибок

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

Возможно Вам доводилось слышать про протокол журнала событий syslog, в котором можно насчитать аж 8 уровней важности: emergency, alert, critical, error, warning, notice, info, debug. Наверняка Вы, как и я какое-то время назад, думаете, “зачем столько”? А что если я скажу, что количество уровней там просто идеально? И использовать можно все - даже debug - для продакшн. Во всяком случае, каждому из них можно придать формальный критерий. Это особенно иронично для меня самого, так как всего пару месяцев назад я написал статью в духе “зачем так сложно!”. Так что если Вам интересно посмотреть на пример технического “переобувания” или оценить строгий алгоритм ранжирования уровней важности событий в системе - прошу.

Читать далее

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

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

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

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

Читать далее

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

Время на прочтение15 мин
Охват и читатели15K
Отладка приложения занимает бо́льшую часть нашего времени. Кто-то пользуется 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 мин
Охват и читатели25K

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

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

Читать далее