Обновить
32K+

Отладка *

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

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

Руководство по ассемблеру Go

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


Прежде чем заняться реализацией runtime и изучением стандартной библиотеки, необходимо освоить абстрактный ассемблер Go. Надеюсь, это руководство поможет вам быстро овладеть нужными знаниями.
Читать дальше →

Антипаттерны тестирования ПО

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

Введение


Есть несколько статей об антипаттернах разработки ПО. Но большинство из них говорят о деталях на уровне кода и фокусируются на конкретной технологии или языке программирования.

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

Терминология


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


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

Читать дальше →

Логирование как способ отлаживать код

Время на прочтение4 мин
Охват и читатели52K
Почему так важно запретить самому себе отладку руками?

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

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

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

Про утечку памяти в одном серверном приложении

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


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

Как у нас сломался Ceph

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


Детектив в 1 части.
Эта история произошла в октябре.

Есть Ceph версии 0.94 (Hammer). 6 стораджей, 8 мониторов, по 6-8 osd на каждом сторадже, SSD диски объемом от 1 ТБ до 4 ТБ. Реплика — 2, минимум 1.

Как-то раз случилось такое: вечером прошел некий шторм по всему кластеру и самопроизвольно перезапустилось множество osd. В логах osd были видны стандартные для ceph ошибки вида no reply from osd.X. Немного slow requests и самопроизвольные рестарты, что для ceph не критическое событие и довольно частое. В общем, такое бывает. Но, к сожалению, не все перезапустившиеся osd смогли подняться. А именно пала героем osd.45 на storage6.
Читать дальше →

Отладка многопоточных программ на базе FreeRTOS

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

image

Отладка многозадачных программ дело не простое, особенно если ты сталкиваешься с этим впервые. После того, как прошла радость от запуска первой задачи или первой демо программы, от бесконечно волнительного наблюдения за светодиодами, каждый из которых моргает в своей собственной задаче, наступает время, когда ты осознаешь, что довольно мало понимаешь (вообще не врубаешься) о том, что на самом деле происходит. Классика жанра: «Я выделил целых 3КБ операционной системе и запустил всего 3 задачи со стеком по 128Б, а на четвертую уже почему-то не хватает памяти» или «А сколько вообще стека я должен выделить задаче? Столько достаточно? А столько?». Многие решают данные задачи путем проб и ошибок, поэтому в этой статье я решила объединить большинство моментов, которые, в настоящее время, значительно упрощают мне жизнь и позволяют более осознанно отлаживать многопоточные программы на базе FreeRTOS.

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

В данной статье я расскажу о следующих моментах:


  1. Настройка OpenOCD для работы с FreeRTOS.
  2. Не забываем включать хуки.
  3. Статическое или динамическое выделение памяти?
  4. Сказ, о параметре configMINIMAL_STACK_SIZE.
  5. Мониторинг использования ресурсов.
Читать дальше →

Почему функция Heap32Next() работает так медленно на Windows 7?

Время на прочтение4 мин
Охват и читатели8K
Если вы занимаетесь системным программированием под Windows, то могли бы заметить, что весьма полезные функции Heap32First/Heap32Next и другие из того же семейства стали работать существенно медленнее начиная с Windows 7. Что же с ними случилось?

Давайте перенесёмся в далёкий 1992 год. Разрабатывается Windows 3.1. Одним из новых компонентов в ней стал ToolHelp. Он позволил немного покопаться во внутренностях ядра ОС. Для нас в нём наиболее интересны функции, позволяющие просматривать данные в куче (heap). Поскольку Windows 3.1 использовала кооперативную многозадачность, вызывая подобные функции можно было быть уверенным в том, что содержимое кучи не изменится между вызовами HeapFirst и HeapNext, ведь у ОС не было права прервать выполнение процесса и переключить контекс на выполнение другого. Вот были времена!
Читать дальше →

Управление изменениями

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

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

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

Что такое Изменение? У нашего продукта есть Платформа: базовое устройство, на которое «навешивается» сверху все требования покупателя и его инфраструктуры. Когда мы приходим к покупателю с ценой – она за Продукт. Продукт = Платформа + Специфика. Продукт – это то, что будет описано в Спецификациях и ТЗ. Но потом начинается работа по детальному проектированию и подготовке к производству. И вот тут начинаются Изменения. Изменения – это Дельта к Продукту. То есть Проданный_Продукт + Дельта = Произведенный_Продукт.
Читать дальше →

О портировании проекта MIPSfpga

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


Перенос программного обеспечения с одной компьютерной архитектуры на другую в принципе, с некоторыми оговорками, дело относительно простое. Здесь на помощь приходят такие общеизвестные инструменты, как autoconf / automake/ libtool / gnulib. Собрать программу из исходников на каком нибудь Raspberry/ARM бывает так же просто, как и на ПК с Ubuntu/x86-64.

А вот как заставить проект ПЛИС разработанный для одной платы работать на другой плате? Там и сама ПЛИС может быть другой и на плате совершенно другие компоненты могут стоять. Простой перекомпиляцией проекта не обойтись.

Расскажу о своем опыте портирования проекта MIPSfpga для платы Марсоход3 с ПЛИС MAX10 Intel. Статьи о проекте MIPSfpga неоднократно появлялись на хабре. Они были так интересны, что мне захотелось и самому попробовать этот проект в имеющейся у меня плате. В своей работе я опирался на хабровские статьи


И многие другие…

Итак, что нужно сделать, чтобы портировать проект ПЛИС на другую плату?

Профилирование: оптимизация

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


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

Читать дальше →

Профилирование: измерение и анализ

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


Привет, я Тони Альбрехт (Tony Albrecht), инженер в Riot. Мне нравится профилировать и оптимизировать. В этой статье я расскажу об основах профилирования, а также проанализирую пример С++-кода в ходе его профилирования на Windows-машине. Мы начнём с самого простого и будем постепенно углубляться в потроха центрального процессора. Когда нам встретятся возможности оптимизировать — мы внедрим изменения, а в следующей статье разберём реальные примеры из кодовой базы игры League of Legends. Поехали!

Читать дальше →

Собственные данные в системном дампе падения Windows

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

По роду своей деятельности (Windows Kernel) мне регулярно приходится разбирать дампы BSOD'ов. Не единичны случаи, когда у конечного пользователя успешно пишутся только Mini-дампы, в которых сохраняется только значение регистров процессора и стек падения. А другого средства отладки клиентской машины просто нет. Но что делать, если в стеке нет нашего драйвера, а заказчик настаивает, что падения начались после установки продукта и закончились после отключения драйвера этого продукта? В моем случае хорошим решением оказалось ведение небольшого журнала последних событий в циклическом буфере. Осталось только сохранить этот циклический буфер в дампе.


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

Читать дальше →

Bitcoin и Ethereum: что происходит на узлах, которые не занимаются добычей, и что с ними будет дальше?

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


Введение


В последнее время довольно часто говорят о перспективах блокчейн систем, о том, что в будущем блокчейн заменит классические платёжные системы, такие как, например, Visa или Mastercard, а затем, возможно, коренным образом изменит и юриспруденцию благодаря возможностям «умных» контрактов. Но, несмотря на все ожидания, полноценной и всеобъемлющей платёжной системы на блокчейне пока не создано. Оплата реальных товаров и услуг криптовалютами, как правило, осуществляется в тех случаях, когда на использование классических способов оплаты наложены какие-то ограничения. При этом значительная часть сделок с использованием криптовалют несёт спекулятивный характер.


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

Читать дальше →

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

Баг компилятора? Линкера? Нет, баг ядра Windows

Время на прочтение8 мин
Охват и читатели38K
imageГейзенбаг — это худшее, что может произойти. В описанном ниже исследовании, которое растянулось на 20 месяцев, мы уже дошли до того, что начали искать аппаратные проблемы, ошибки в компиляторах, линкерах и делать другие вещи, которые стоит делать в самую последнюю очередь. Обычно переводить стрелки подобным образом не нужно (баг скорее всего у вас в коде), но в данном случае нам наоборот — не хватило глобальности виденья проблемы. Да, мы действительно нашли баг в линкере, но кроме него мы ещё нашли и баг в ядре Windows.

В сентябре 2016 года мы стали замечать случайно происходящие ошибки при сборке Хрома — 3 билда из 200 провалились из-за крэша процесса protoc.exe. Это один из бинарников, который при сборке Хрома сначала собирается сам, а затем запускается для генерации заголовочных файлов других компонентов. Но вместо этого он падал с ошибкой «access violation».
Читать дальше →

Зомби, которые съедают вашу память

Время на прочтение8 мин
Охват и читатели79K
Что бы вы там себе не думали, а зомби существуют. И они действительно едят мозги. Не человеческие, правда, а компьютерные. Я говорю сейчас о зомби-процессах и потребляемых ими ресурсах. Это будет душераздирающая история о потерянных и снова найденных 32 ГБ оперативной памяти. Возможно, лишь некоторые из вас столкнутся с точно такой же проблемой, но если вдруг это произойдёт — у вас хотя бы будет шанс понять, что происходит.

Начнём с того, что компьютеры под управлением ОС Windows склонны со временем терять память. Ну, по крайней мере, у меня, при моём способе ими пользоваться. После пары недель без перезагрузок (или, например, всего одного уикэнда за который я 300 раз пересобрал Хром) я стал замечать, что диспетчер задач начинает показывать мне очень маленькое количество свободной оперативной памяти, но в то же время в системе нет никаких процессов, которые эту самую память активно используют. В том примере выше (с 300 сборками Хрома) диспетчер задач сказал мне, что в системе занято 49.8 ГБ плюс ещё 4.4 ГБ памяти сжато — но при этом запущено всего несколько процессов, и все они в сумме даже и близко не используют столько памяти:

image

В моём компьютере 96 ГБ оперативной памяти (да, я счастливчик) и когда у меня нет вообще никаких запущенных процессов — я, знаете ли, хотел бы видеть ну хотя бы половину этой памяти свободной. Я правда рассчитываю на это. Но иногда этого достичь не удаётся и мне приходится перезагружать ОС. Ядро Windows написано качественно и надёжно (без шуток), так что память не должна бы пропадать бесследно. Но всё же она пропадает.
Читать дальше →

pdbe — помощник встроенного Python-дебаггера и процесса отладки

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

Привет, Хабрахабр! В этой статье буду делиться собственным опытом отладки большой незнакомой системы, но со стороны собственно написанного инструмента — pdbe. Он поможет с самого начала проекта разобраться в потоке выполнения кода в проекте. Если вам интересно, что спрятано под капотом и какие фичи вы можете использовать — прошу под кат.
Читать дальше →

Топ-10 ошибок из 1000+ JavaScript-проектов и рекомендации по их устранению

Время на прочтение11 мин
Охват и читатели33K
В компании Rollbar, которая занимается созданием инструментов для работы с ошибками в программах, решили проанализировать базу из более чем 1000 проектов на JavaScript и найти в них ошибки, которые встречаются чаще всего. В результате они сформировали список из 10 наиболее часто встречающихся ошибок, проанализировали причины их появления и рассказали о том, как их исправлять и избегать. Они полагают, что знакомство с этими ошибками поможет JS-разработчикам писать более качественный код.

image

Сегодня мы публикуем перевод их исследования.
Читать дальше →

Системная шина ПК передаёт музыку на средних частотах

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

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

В информационной безопасности есть понятие «физической изоляции» (air gap), когда безопасная компьютерная сеть физически изолирована от небезопасных сетей: интернета и локальных сетей с низким уровнем безопасности. Это военные системы, командные центры, системы управления АЭС, медицинское оборудование и проч.

Но если кто-то инфицировал физически изолированный компьютер, а потом ему позарез нужно снять информацию — что делать? Здесь приходится выдумывать разные хитроумные и нестандартные способы. Например, превратить обычный ПК в генератор радиосигнала — и ловить этот сигнал радиоприёмником. Именно такую задачу выполняет утилита System Bus Radio, которая однажды упоминалась на GT. Хотя если честно, то вряд ли кто-то будет использовать её для шпионажа — это просто любопытная программка для развлечения. Она использует системную шину ПК или ноутбука как радиопередатчик для трансляции любых звуков на установленной радиочастоте.

За время, прошедшее с начала разработки, пользователи собрали обширную статистику, на радиоприёмниках какой модели и на какой частоте ловится сигнал. Кроме того, создан онлайновый модулятор, где вы можете сочинять музыку не выходя из браузера — и генерировать радиосигнал на частоте 1560 Гц нажатием одной кнопки Play Tune.
Как это работает

WSTester – JS библиотека для тестирования веб-сервисов с ВебСокетами

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

Добрый день, Хабрасообщество! Как и большинству айтишников, мне нравится создавать что-то новое, классное, нечто способное как-то повлиять на мир или хотя бы принести небольшую пользу другим людям. Надеюсь, что описываемый далее инструмент для тестирования онлайн систем с ВебСокетами как раз такая вещь.


logo

Читать дальше →

Постигаем Си глубже, используя ассемблер. Часть 3

Время на прочтение5 мин
Охват и читатели13K
В третьей статье мы продолжим разбирать условия. В прошлый раз мы так и не посмотрели оптимизированные версии if-else.
Читать дальше →