Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam

Топ прошлой недели

  • CharlotteLink CharlotteLink 1 пост
  • Syslikagronom Syslikagronom 7 постов
  • BydniKydrashki BydniKydrashki 7 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Новости Пикабу Помощь Кодекс Пикабу Реклама О компании
Команда Пикабу Награды Контакты О проекте Зал славы
Промокоды Скидки Работа Курсы Блоги
Купоны Biggeek Купоны AliExpress Купоны М.Видео Купоны YandexTravel Купоны Lamoda
Мобильное приложение

Debug

17 постов сначала свежее
Robertogracias
Robertogracias
6 месяцев назад

Visual Studio Code и XDebug(PHP)⁠⁠

Пытаюсь настроить Visual Studio Code (под Виндой) для отладки PHP XDebug.

Завел виртуальную машину c Ubuntu24.04 на своем компе с адресом 192.168.0.121.

На нее установил apache2 и nginx. Но nginx пока отключен, чтоб цепочка проверки логов была поменьше.

Установил также php8.3, активировал в apache2, проверил: все работает.

добавил пакет php8.3-xdebug.

в его конфиг /etc/php/8.3/mods-available/xdebug.ini добавил

zend_extension=xdebug.so

xdebug.mode=debug

xdebug.client_host=localhost

xdebug.client_port=9003

В файл /etc/php/8.3/php.ini добавил

[Xdebug]

zend_extension=xdebug.so

xdebug.mode=debug

xdebug.start_with_request=yes

xdebug.client_host=192.168.0.121

xdebug.client_port=9003

xdebug.log=/var/log/xdebug.log

добавил разрешение в фаерволл на открытый порт 9003 и проверил его дееспособность через netcat: все передает.

остановил сервис nginx, php8.3-fpm.

остановил сервис apache2 и запустил его заново.

Создал на "сайте" в DOCUMENT_ROOT файл testphp.php с <?php phpinfo(); ?>

На виндовой машине добавил себе в remote explorer конфигурацию на доспут по ssh к этой виртуальной машине.

Установил плагин "PHP Debug". Открыл его файл launch.json и добавил конфигурацию:

,

{

"name": "Xdebug-srvu24",

"type": "php",

"request": "launch",

"hostname": "192.168.0.121",

"port": 9003

}

Открыл файл testphp.php в VSC и поставил галочку брэйкпоинта.

Запустил дебагинг в VSC.

В браузере винды обратился к файлу: всю инфу показал, но VSC никак не реагирует.

Смотрю в файле /var/log/xdebug.log :

[2018] Log opened at 2024-11-19 09:41:57.425446

[2018] [Config] INFO: Control socket set up succesfully: '@xdebug-ctrl.2018'

[2018] [Config] INFO: Systemd Private Temp Directory is enabled (/tmp/systemd-private-e2eca4e10616490b84db3fd61bbef9a9-apache2.service-BPAifR)

[2018] [Step Debug] WARN: Debugger is not working optimally, as Xdebug is loaded before Zend OPcache

[2018] [Step Debug] INFO: Connecting to configured address/port: localhost:9003.

[2018] [Step Debug] WARN: Creating socket for 'localhost:9003', poll success, but error: Operation now in progress (29).

[2018] [Step Debug] ERR: Could not connect to debugging client. Tried: localhost:9003 (through xdebug.client_host/xdebug.client_port).

[2018] Log closed at 2024-11-19 09:41:57.426839

Пробовал в /etc/php/8.3/php.ini менять xdebug.client_host на localhost, 127.0.0.1 после смены перезапускал apache2 - ошибка в логе та же самая.

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

Показать полностью
Devel PHP PHP Visual studio Code Debug Текст
3
Santolege2024
Santolege2024
7 месяцев назад
Уголок ретрогеймера
Серия Эмуляция, консоли

[SEGA Saturn] Дебаг меню для Riglordsaga 2, Shiroki Majo: Mouhitotsu no Eiyuu Densetsu и Magic Knight Rayearth⁠⁠

[SEGA Saturn] Дебаг меню для Riglordsaga 2, Shiroki Majo: Mouhitotsu no Eiyuu Densetsu и Magic Knight Rayearth Sega, Sega Saturn, Debug, Гифка, Длиннопост

В этой статье описываются хаки отладочного (дебаг) меню для трёх RPG на SEGA Saturn:

Riglordsaga 2
Shiroki Majo: Mouhitotsu no Eiyuu Densetsu
Magic Knight Rayearth

Меню позволяют изменять параметры игры и телепортироваться в произвольные области, так что вы можете попасть в разные части игры для интереса.

Если вы заинтересованы в переводе Riglordsaga 2 или Shiroki Majo, эти меню, несомненно, будут полезными помощниками. Начнём!

Riglordsaga 2

[SEGA Saturn] Дебаг меню для Riglordsaga 2, Shiroki Majo: Mouhitotsu no Eiyuu Densetsu и Magic Knight Rayearth Sega, Sega Saturn, Debug, Гифка, Длиннопост

Режим отладки. Флаг, который управляет им, находится по адресу памяти 06091484. Установите его в 01, и вы получите дополнительные пункты меню, координаты на экране и возможность выходить за пределы карты.

[SEGA Saturn] Дебаг меню для Riglordsaga 2, Shiroki Majo: Mouhitotsu no Eiyuu Densetsu и Magic Knight Rayearth Sega, Sega Saturn, Debug, Гифка, Длиннопост

(Слева: До установки флага отладки. Справа: После его установки.)

[SEGA Saturn] Дебаг меню для Riglordsaga 2, Shiroki Majo: Mouhitotsu no Eiyuu Densetsu и Magic Knight Rayearth Sega, Sega Saturn, Debug, Гифка, Длиннопост

(Слева: До установки флага отладки. Справа: После его установки.)

В этой игре есть несколько тестовых уровней со специальными меню, которые позволяют просматривать игровые сцены:

[SEGA Saturn] Дебаг меню для Riglordsaga 2, Shiroki Majo: Mouhitotsu no Eiyuu Densetsu и Magic Knight Rayearth Sega, Sega Saturn, Debug, Гифка, Длиннопост

(Перемещение на тестовую карту BOOT3.)

В дебаг меню можно переключать флаг отладки с помощью кнопки Start. Код работает как этот псевдо-Python:

if pressed_button & debug_toggle_button != 0:

debug_flag ^= 1

Для финальной версии игры значение debug_toggle_button установлено на 0, поэтому это не работает. Мы можем восстановить его следующим образом:

0600f596 e308 # Read a value of 08

0600f59a 4318 # Shift it to be 0800

Патч образа диска с этими изменениями на SegaXtreme.

Shiroki Majo: Mouhitotsu no Eiyuu Densetsu

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

[SEGA Saturn] Дебаг меню для Riglordsaga 2, Shiroki Majo: Mouhitotsu no Eiyuu Densetsu и Magic Knight Rayearth Sega, Sega Saturn, Debug, Гифка, Длиннопост

После экрана Hudson, во время анимации падающего снега, нажмите A; B; а затем C. Затем на титульном экране удерживайте L и R и нажмите Start. После начала геймплея одновременно удерживайте X, Y и Z, чтобы вызвать отладочное меню.

Функция по адресу проверяет оба шага. Вот моя аннотация декомпиляции Ghidra первого шага:

FUN_0603d8f4(0);

do {

FUN_0603d954();

uVar2 = get_input_02();

/* Check the pressed button against the

A, B, C sequence. Increment the counter

if the correct button was pressed, otherwise

reset it to 0. */

pl_pressed_l = get_input_01();

if (((uVar2 & Oxffff)» Oxb & 1) != 0) break;

if ((code_counter_l = 0) && (pl_pressed_l = 0x400)) {

code_counter_l = 1;

} else if ((code_counter_l == 1) && (pl_pressed_l == 0x100)) {

code_counter_l = 2;

} else if ((code_counter_l = 2) && (pl_pressed_l == 0x200)) {

code_counter_l = 3;

} else if (pl_pressed_l != 0) {

code_counter_l = 0;

}

(Маска кнопки A - 0x0400; маска кнопки B - 0x0100; маска кнопки C - 0x0200.)

И второй шаг:

/* If the 3 button sequence was entered above, check the held buttons against the L+R+Start pattern. */

pl_held_l = get_input_02();

if ((code_counter_l = 3) && ((pl_held_l & Oxffff) = 0x888)) {

FUN_06042c70(0, 0);

debug_enabled = 1;

DAT_0607d0a8 = 1;

return 1;

}

(Маска кнопки Start - 0x0800, маска кнопки R - 0x0080, а маска кнопки L - 0x0008. Вместе они дают 0x0888.)

Флаг отладки, который здесь включается, находится по адресу 060793a8.

Перевод пунктов меню верхнего уровня:

[SEGA Saturn] Дебаг меню для Riglordsaga 2, Shiroki Majo: Mouhitotsu no Eiyuu Densetsu и Magic Knight Rayearth Sega, Sega Saturn, Debug, Гифка, Длиннопост

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

[SEGA Saturn] Дебаг меню для Riglordsaga 2, Shiroki Majo: Mouhitotsu no Eiyuu Densetsu и Magic Knight Rayearth Sega, Sega Saturn, Debug, Гифка, Длиннопост

Magic Knight Rayearth

INITMENU в Magic Knight Rayearth позволяет телепортироваться в произвольные точки игры с помощью опции ROUND. В меню также есть опции для тестирования видео (CINEPACK) и звука.

[SEGA Saturn] Дебаг меню для Riglordsaga 2, Shiroki Majo: Mouhitotsu no Eiyuu Densetsu и Magic Knight Rayearth Sega, Sega Saturn, Debug, Гифка, Длиннопост

Активация этого меню требует небольшого взлома. Четыре байта по адресу 060a13cc определяют, в какой режим переключится игра. Тот, который нам нужен, - 00000004, это отладочное меню.

[SEGA Saturn] Дебаг меню для Riglordsaga 2, Shiroki Majo: Mouhitotsu no Eiyuu Densetsu и Magic Knight Rayearth Sega, Sega Saturn, Debug, Гифка, Длиннопост

Первое переключение режима выглядит так:

06004096 eb01 mov #0x1,r11 # Put an immediate 1 into r11

...

060041fc 2e00 mov.b r0,@r14 # Load a value into the r14 address

060041fe 70ff add -0x1,r0 # Subtract one from that value

06004200 600c extu.b r0,r0 # Extend the sign of that value

06004202 4008 shll2 r0 # Multiply that value by 4

06004204 0d36 mov.l r3,@(r0,r13) # etc...

06004206 a0cc bra 0x060043a2 # etc...

06004208 2cb2 _mov.l r11,@r12 # Load a 1 into the game mode address

Нужно изменить значение, которое загружается в последней инструкции. Но нет хорошего места, чтобы сделать это, так как значение r11 используется в других местах. Освободим место, убрав инструкцию extu.b: она расширяет знак значения r0 - хорошая практика, поскольку выполняем с ним математические операции. Но это излишне, поскольку в этой точке выполнения значение всегда оказывается положительным.

Убрав эту инструкцию, у нас будет место для загрузки непосредственного значения 4 и запуска игры прямо в отладочном меню.

060041fc 2e00 mov.b r0,@r14 # As before

060041fe 70ff add -0x1,r0 # As before

06004200 4008 shll2 r0 # Skip the sign extension and multiply

06004202 0d36 mov.l r3,@(r0,r13) # As before, but moved up by one slot

06004204 e004 mov #0x4, r0 # Put an immediate 4 into r0

06004206 a0cc bra 0x060043a2 # As before

06004208 2c02 _mov.l r0,@r12 # Load the 4 into the game mode address

Патч образа диска с этими изменениями на SegaXtreme.

Источник:

https://www.segasaturnshiro.com/2024/10/16/under-the-microscope-riglordsaga-2-shiroki-majo-magic-knight-rayearth/

Показать полностью 9
Sega Sega Saturn Debug Гифка Длиннопост
0
DELETED
1 год назад

Я DevOps-инженер. Жду ваших вопросов⁠⁠

Всех приветствую!

Я работаю в этой сфере уже более 1,5 лет. Освоил множество технологий, хотя всегда есть к чему стремиться.

Я здесь для того, чтобы помочь определиться с будущим направлением/работой, касающейся сферы IT, ответить на вопросы о технологиях, о том, кто такой вообще DevOps и стоит ли пробоваться. Также, если вы тоже являетесь DevOps-инженером или же разработчиком, которому нужна помощь/консультация по возникшим ошибкам (в рамках моего стека технологий, указанных в профиле) — милости прошу. На какие-то вопросы я буду отвечать в комментариях, а на другие — отдельными постами (если нужно будет емкое пояснение)

По собственному опыту скажу так: я пробовал себя и в роли Project Manager, и Frontend-разраба, и Backend-разраба, а в итоге нашел себя в DevOps'е и ничуть не пожалел.

5+ лет я так или иначе нахожусь в IT-бэкграунде

Жду ваших вопросов!

[моё] Карьера Опыт DevOps IT Студенты Программа Программирование Программист Поиск работы Debug Профессия Текст
73
12
kkuznetzov
1 год назад
Лига Радиолюбителей

Поддельные отладчики ST-Link V2⁠⁠

Из-за санкций стало трудно купить родной ST-LINK V2. Первые две фотографии один клон, ещё две фотографии второй клон. Последняя фотография не моя, там родной ST-LINK V2.

Родной ST-LINK V2 Я покупал в ТерраЭлектроннике, которой теперь нет. Первый клон с Aliexpress. Второй клон из Чип-Дип, его Я уже вернул и получил деньги назад.

На родном отладчике есть микросхема согласования уровней 74LVC245A. Благодаря согласованию JTAG/SWD интерфейс может работать с устройствами при их питании напряжением от 1.65 до 3.6 Вольт.

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

Второй клон даже в STM32 Cube Programmer работает через раз. В среде разработки STM32 CubeIDE он вообще не виден.

Правда если использовать другую среду разработки (Eclipse например) и OpenOCD, то как то работают оба клона.

Из-за этого всего Я использую или родной ST-LINK V2 или клон JLink.

Поддельные отладчики ST-Link V2 Электроника, Debug, Stm32, Микроконтроллеры, Длиннопост
Поддельные отладчики ST-Link V2 Электроника, Debug, Stm32, Микроконтроллеры, Длиннопост
Поддельные отладчики ST-Link V2 Электроника, Debug, Stm32, Микроконтроллеры, Длиннопост
Поддельные отладчики ST-Link V2 Электроника, Debug, Stm32, Микроконтроллеры, Длиннопост
Поддельные отладчики ST-Link V2 Электроника, Debug, Stm32, Микроконтроллеры, Длиннопост
Показать полностью 5
[моё] Электроника Debug Stm32 Микроконтроллеры Длиннопост
28
3
gogobugogo
gogobugogo
2 года назад
Site Reliability Engineering
Серия SRE

Как находить и исправлять ошибки⁠⁠

Оригинал: How to debug by Phil Booth

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

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

Пост написан в виде упорядоченного списка, но не каждая проблема требует выполнения всех шагов. Иногда правильное решение приходит в голову само собой на шаге 1 или, что еще лучше, на шаге 0! В других случаях вы можете пропустить несколько шагов или выполнить их в другом порядке. Но в целом, порядок, приведенный здесь, это основа, на которую я постепенно перешел со времени моей первой работы над модулем обработки ресурсов для контроллера базовой станции GSM в компании Lucent Technologies в 1997 году. За прошедшие годы я работал во многих различных средах: системное программирование, базы данных, настольные приложения, веб-приложения, backend и frontend. Эти шаги обобщены и применимы ко всем этим средам, они не являются специфическими для какого-то конкретного языка или парадигмы.

0. Ваше психическое состояние

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

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

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

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

1. Воспроизведите проблему

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

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

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

2. Воспроизведите ее снова

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

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

3. Не воспроизводите ее

Если вы знаете, как воспроизвести проблему, знаете ли вы также, как ее не воспроизводить? Иными словами, знаете ли вы, какие переменные играют важную роль в определении возникновения проблемы?

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

4. Поймите код

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

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

Иногда код поступает из непрозрачных сторонних источников. Если у вас нет доступа к этим источникам, у вас все равно есть пути для расследования. Прочитайте справку по API или другую документацию, поищите в базе данных ошибок, если таковая имеется. Есть ли соответствующие вопросы на Stackoverflow или в других местах?

В начале 2000-х годов я работал над прикладным фреймворком, который был бинарником для Internet Explorer 6. Это означало использование ряда API IE и Windows, которые имели скудную документацию. Всякий раз, когда реальность не совпадала с нашими ожиданиям от этих API, мы прибегали к поиску ответа в Usenet или на других онлайн-форумах. Чаще всего, когда мы в конце концов находили правильный ответ, его размещал таинственный гений с именем “Игорь Тандетник”. Прошло немного времени, прежде чем мы начали по умолчанию добавлять ко всем нашим поисковым запросам “Игорь Тандетник”. В качестве ускорителя отладки это полностью оправдало себя.

5. Наблюдайте за состоянием

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

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

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

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

6. Запишите то, что вы (как вам кажется) знаете

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

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

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

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

7. Исключите некоторые вещи

Иногда полезно удалить куски кода, чтобы доказать, что они не связаны (или нет). Это можно сделать по двум направлениям: по времени и по функциям.

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

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

8. Погуляйте с собакой

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

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

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

9. Перепишите компонент

Хотя переписывание целых систем редко бывает хорошей идеей, переписывание небольших фрагментов функциональности может быть эффективным способом выявить факторы, которые часто могут быть скрыты от глаз. Иногда вы можете смотреть на код целую вечность, и он выглядит прекрасно, но как только вы попытаетесь переделать его на свой лад, вы столкнетесь с костылями, на которые пришлось пойти автору. Эти костыли — отличный источник моментов “ага!” для отладки.

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

10. Напишите неудачный тест

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

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

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

11. Исправь это

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

Показать полностью
Sre Debug Fail Отладка Баг Надежность Багрепорты Неудача Длиннопост Текст
8
nekko
nekko
3 года назад
ДЕВОПСИНА

Рабочие будни⁠⁠

Рабочие будни Nginx, Дебаг, Debug, Конфиг

источник

[моё] Nginx Дебаг Debug Конфиг
25
50
tproger.official
tproger.official
3 года назад
Типичный программист

Это кости для дебаггинга⁠⁠

Число, выпавшее на кубах, это количество багов, которое у вас появится после фикса всего лишь одного бага.

Это кости для дебаггинга IT юмор, IT, Разработка, Debug, Игральные кости
IT юмор IT Разработка Debug Игральные кости
7
3
IliaHohlov
IliaHohlov
4 года назад

Программирование в Delphi. Урок 13.1. Отладка, поиск ошибок Debug⁠⁠

Здравствуйте, уважаемые разработчики Delphi. В этом видео мы будем учиться отлаживать программный код (debugging) и искать ошибки. Отладка. Точки останова.

[моё] Delphi Программирование Debug Отладка Видео
11
Посты не найдены
О Нас
О Пикабу
Контакты
Реклама
Сообщить об ошибке
Сообщить о нарушении законодательства
Отзывы и предложения
Новости Пикабу
RSS
Информация
Помощь
Кодекс Пикабу
Награды
Команда Пикабу
Бан-лист
Конфиденциальность
Правила соцсети
О рекомендациях
Наши проекты
Блоги
Работа
Промокоды
Игры
Скидки
Курсы
Зал славы
Mobile
Мобильное приложение
Партнёры
Промокоды Biggeek
Промокоды Маркет Деливери
Промокоды Яндекс Путешествия
Промокоды М.Видео
Промокоды в Ленте Онлайн
Промокоды Тефаль
Промокоды Сбермаркет
Промокоды Спортмастер
Постила
Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии