Как стать автором
Обновить
3.43

Отладка *

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

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

PHPStorm + XDebug + Docker

Время на прочтение3 мин
Количество просмотров26K

Ещё одна статья на избитую тему? Да! Потому что за два часа поиска не нашёл ни одной, по которой можно было пройтись от и до и получить работающее окружение.

Шагов, на самом деле, немного, все очень простые, нужно лишь...

Читать далее
Всего голосов 22: ↑22 и ↓0+22
Комментарии10

Почему для открытия меню «Пуск» иногда требуется несколько секунд

Время на прочтение7 мин
Количество просмотров22K

Обычно я запускаю большинство программ на своём ноутбуке с Windows 10, нажимая клавишу <Win>, после чего ввожу несколько букв имени программы, а затем жму Enter. На моём мощном ноутбуке (SSD и 32 ГБ ОЗУ) этот процесс обычно занимает лишь время, необходимое мне для ввода символов, то есть считанные доли секунды.

Обычно.

Однако иногда он занимает больше, намного больше. Порядка десятков секунд. Торможения непредсказуемы, но недавно мне удалось записать трассировку Event Tracing for Windows (ETW) одной из таких задержек. При помощи людей в Twitter я смог проанализировать трассировку и понять, почему на запуск «Блокнота» требуется примерно минута.

Прежде чем приступать к описанию анализа, мне нужно сделать два заявления: 1) у меня есть достаточное понимание проблемы, но нет решения, и 2) если вы наблюдаете аналогичные симптомы, это не значит, что их причина та же, но я дам советы о том, как понять, в ней ли дело.
Читать дальше →
Всего голосов 62: ↑62 и ↓0+62
Комментарии27

Подводные камни компараторов в С++

Время на прочтение9 мин
Количество просмотров8.6K
При использовании компаратора в алгоритмах boost::sort и std::sort важно учитывать некоторые особенности работы этих алгоритмов, игнорирование которых может привести к неожиданным последствиям, в том числе к segmentation fault.

image

Чаще всего при сортировке объектов пользовательских типов написание кода сравнения элементов коллекции не вызывает вопросов. Компаратор должен возвращать true, если первый аргумент меньше второго, то есть в отсортированном массиве первый аргумент должен идти перед вторым. Алгоритмы сначала вызывают компаратор для пары элементов x и y. Если компаратор вернул true, значит, элемент x меньше y и он должен идти в коллекции перед элементом y, если false, то компаратор вызывается повторно для пары y и x. Если компаратор опять вернул false, значит, элементы равны, иначе порядок определен.

Меня зовут Олег Игнатов, я — Development Team Lead в команде KICS (Kaspersky Industrial CyberSecurity) «Лаборатории Касперского». Мы защищаем промышленные инфраструктуры и сети от специализированных киберугроз. В этой статье расскажу о некоторых особенностях использования компараторов в С++, знание которых позволит не наступить на различные грабли и сэкономить время при разборе багов.
Читать дальше →
Всего голосов 30: ↑29 и ↓1+28
Комментарии14

Обновляем платформу 1С на сервере под управлением Linux

Время на прочтение6 мин
Количество просмотров36K

Данная статья является, по сути, моей методичкой о том как перевести сервер 1С и прилегающие сервисы, работающие под Linux на новую версию платформы.

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

Читать далее
Всего голосов 17: ↑17 и ↓0+17
Комментарии19

Истории

Делал отладчик, сделал БП :-) Часть первая

Время на прочтение3 мин
Количество просмотров11K

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

Так было решено собрать мост удовлетворяющий моим требованиям? Но вылилось это в нечто большее.

Читать далее
Всего голосов 43: ↑42 и ↓1+41
Комментарии12

Как мы сделали и оптимизировали механизм правил для персонализации UI

Время на прочтение13 мин
Количество просмотров2.2K

Всем привет! Меня зовут Александр, я занимаюсь backend-разработкой в KTS. 

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

Читать далее
Всего голосов 15: ↑15 и ↓0+15
Комментарии7

Как заработать на Bug Bounty

Время на прочтение6 мин
Количество просмотров6.6K

Меня зовут Алексей Гришин, я руководитель направления Bug Bounty VK. За 9 лет участия в программе по поиску уязвимостей на различных платформах мы накопили огромный опыт получения, проверки и оплаты самых разношерстных отчетов, поэтому в этой статье я хочу поделиться советами о том, как правильно написать отчет, чтобы его оплатили, и рассказать, что делать, если ваши ожидания по выплатам не совпали с реальностью. Добро пожаловать под кат.

Читать далее
Всего голосов 25: ↑24 и ↓1+23
Комментарии5

Поиск бага регистра, приводящего к вылету Chrome

Время на прочтение7 мин
Количество просмотров6.3K

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

Вот краткое описание проблемы, с которой я столкнулся. ABI (Application Binary Interface) платформы требует от функций, чтобы они сохраняли значения определённых регистров и восстанавливали их в случае использования, однако набор восстанавливаемых регистров зависит от платформы, и правила в Linux отличаются от правил в Windows. Возможно, поэтому я столкнулся с повреждением регистров Chrome в Windows. Но давайте начнём с самого начала.
Читать дальше →
Всего голосов 53: ↑53 и ↓0+53
Комментарии14

Кастомный аллокатор для закрытого 3rd

Время на прочтение2 мин
Количество просмотров1.7K

Существует ряд ситуаций, когда это имеет смысл. От полного контроля памяти, до вынужденной необходимости. К примеру, одна из возможных ситуаций:
1. Мы используем alignment аллокаторы.
2. Мы перегружаем какой-то класс и данные от нашей 3rd зависимости.
3. 3rd зависимость не использует alignment аллокаторы.

Читать далее
Всего голосов 4: ↑3 и ↓1+2
Комментарии3

Инструменты мониторинга производительности приложений: зачем они нужны и как используются

Время на прочтение6 мин
Количество просмотров3.4K

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

Решение критических проблем клиентов может создавать отличные возможности для бизнеса, однако в таких случаях высоки и требования клиента.

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

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

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

За более чем десять лет работы разработчиком ПО я много времени тратил на поиск лучших инструментов для повышения моей продуктивности.
Читать дальше →
Всего голосов 33: ↑31 и ↓2+29
Комментарии2

Рассматриваем под лупой отладчик Delve для Go-разработчиков

Время на прочтение6 мин
Количество просмотров8.6K

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

Сегодня есть множество IDE, поддерживающих работу с Go и позволяющих отлаживать приложения. На текущий момент для Go представлены два отладчика: GDB (но он не поддерживает многие фичи языка, например Go-рутины) и Delve. Многие IDE используют последний как дефолтный отладчик. И в этой статье я расскажу о возможностях Delve: о том, что умеет сам отладчик, а не что нам предоставляет IDE.

Читать далее
Всего голосов 34: ↑33 и ↓1+32
Комментарии0

Кря-кря на день программиста: вспоминаем универсальный метод решения проблемных задач

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

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

Любите кря-кря? Давайте под кат.

Читать далее
Всего голосов 21: ↑17 и ↓4+13
Комментарии5

Тестирование Rust

Время на прочтение8 мин
Количество просмотров5.8K


Я всё ещё продолжаю изучать Rust. Кроме синтаксиса, для знания языка нужно понимать его идиомы и экосистему. Сейчас я нахожусь на этапе изучения тестирования в Rust.

Исходная проблема


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

class Car(private val engine: Engine) {

    fun start() {
        engine.start()
    }
}

interface Engine {
    fun start()
}

class CarEngine(): Engine {
    override fun start() = ...
}

class TestEngine(): Engine {
    override fun start() = ...
}

В обычном коде:

val car = Car(CarEngine())

В тестовом коде:

val dummy = Car(TestEngine())

Внедрение зависимостей нужно для исполнения разных фрагментов кода в соответствии с их контекстом.
Читать дальше →
Всего голосов 43: ↑39 и ↓4+35
Комментарии8

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

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн

Пошаговая GDB отладка ARM процессора из консоли в Win10

Время на прочтение7 мин
Количество просмотров8K

Иногда бывает ситуация когда надо срочно что-то пошагово отладить. При этом нет времени и желания ставить какие-то тяжелые IDE. В таких случаях может помочь пошаговая GDB отладка ARM Cortex M33 из командной строки Windows. В этом тексте я расписал пошаговое руководство того как это сделать.

Читать далее
Всего голосов 14: ↑12 и ↓2+10
Комментарии25

Почему современное ПО такое медленное — разбираемся на примере диктофона Windows

Время на прочтение3 мин
Количество просмотров44K
Я прошу прощения за такой заголовок, потому что современное ПО может быть медленным по множеству разных причин. Слепое использование одного объяснения без малейшего расследования — это программный аналог карго-культа. В этом посте рассматривается один пример того, почему современное ПО может быть мучительно медленным.


Я всего лишь хотел записать сорокасекундную озвучку простенького видео, поэтому запустил стандартное приложение Запись голоса (Voice Recorder) операционной системы Windows и нажал на кнопку записи. Казалось, что ничего не произошло.

Позже я проверил и оказалось, что программа выполняет запись. Я немного поэкспериментировал и выяснил, что в первый раз, когда я начинал запись после запуска Записи голоса, её реакции иногда предшествовала долгая задержка. Двадцатисекундная задержка при записи сорокасекундного клипа — довольно низкий КПД. Это расстроило меня настолько, что я захотел разобраться, почему так получается, и запустил трассировку ETW.
Читать дальше →
Всего голосов 127: ↑125 и ↓2+123
Комментарии341

История одного бага

Время на прочтение3 мин
Количество просмотров4.6K

Всё началось с баг репорта от одного из пользователей нашего фрэймворка JDI Light - NullPointerException при WebPage.open(), а точнее WindowsManager.getWindows()

Максимально странное падение до 30% тестов разом с одной ошибкой. Причём либо падает сразу много, либо - не падает вообще.

Мы в JDI очень трепетно относимся к баг репортам пользователей, особенно такого фантастического качества - с подробным описанием и вот этим всем.

Приступить к расследованию
Всего голосов 10: ↑9 и ↓1+8
Комментарии2

Simics: Забиваем гвозди сваебоем

Время на прочтение9 мин
Количество просмотров3K

Любите ли вы отзывчивые программы так, как люблю их я? Любовь эта привела меня к Колибри ОС - невероятно шустрой операционной системе, которая запускает программу до того, как вы осознаете, что кликнули по ней. И недавно у неё нашли уязвимость: ping of death.

Так получилось, что моя первая работа была связана с симуляцией компьютерных систем – от серверов до мобильных устройств. И там мы использовали симулятор Simics. Этой системой пользуются крупные производители железа для опережающей разработки драйверов.

Если бы только можно было использовать Simics для отладки любительской ОС...

Читать далее
Всего голосов 25: ↑25 и ↓0+25
Комментарии2

Приглашаем на онлайновый митап про нативный фаззинг в 1.18 Go и его особенности

Время на прочтение1 мин
Количество просмотров1.4K
В четверг, 22 сентября, в 16 часов (МСК) мы проведем онлайновый митап под названием «Фаззинг и обработка ошибок в 1.18 Go».

UPD: В свете известных событий митап переносится на 20 октября.

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



Читать дальше →
Всего голосов 10: ↑7 и ↓3+4
Комментарии1

Стенд для тестирования плат после монтажа

Время на прочтение6 мин
Количество просмотров5.5K

Доброго времени суток, Хабр!      

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

Поехали!
Всего голосов 20: ↑20 и ↓0+20
Комментарии12

Настоящий детектив: загадочные таймауты на проде

Время на прочтение7 мин
Количество просмотров10K

Привет! Меня зовут Алексей, я работаю в команде Антиспама Почты Mail.ru, и сегодня хочу поделиться интересным опытом нашей команды по поиску проблем на бою. 

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

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

Читать далее
Всего голосов 71: ↑71 и ↓0+71
Комментарии25
Изменить настройки темы

Вклад авторов