Hacker News Digest

Тег: #debugging

Постов: 15

Vibe Code Warning – A personal casestudy (github.com) 🔥 Горячее 💬 Длинная дискуссия

В предоставленном тексте отсутствует основное содержимое репозитория GitHub "jackdoe/pico2-swd-riscv", представлено только навигационное меню сайта. Судя по названию проекта, вероятно, это реализация интерфейса отладки SWD (Serial Wire Debug) для платформы на базе RISC-V, возможно, связанная с Raspberry Pi Pico 2. Однако без доступа к файлам проекта, README или описанию невозможно дать точное резюме.

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

by jackdoe • 10 ноября 2025 г. в 11:45 • 308 points

ОригиналHN

#risc-v#swd#debugging#llm#programming#github

Комментарии (231)

  • Разработчики признают, что LLM-генерированный код лишает их ощущения «собственного» кода и ментальной модели, но считают это неизбежной ценой прогресса.
  • Сообщество HN в очередной раз поднимает тему «вайб-кодинга» как симптома упадка ремесла и утраты смысла.
  • В то же время, авторы поста отмечают, что даже при полном отказе от написания кода в пользу LLM, остаётся необходимость владеть базовыми навыками для верификации и рефакторинга.
  • Обсуждение выходит за рамки самого феномена: участники затрагивают вопросы авторского права, лицензий и ответственности за сгенерированный код, а также то, как далеко может зайти эта тенденция.

At the end you use `git bisect` (kevin3010.github.io)

В работе с monorepo, где ежедневно делаются сотни коммитов, тесты внезапно начали проваливаться. Проблема была в изменении конфигурационного файла, который ссылался на неверный аккаунт, но найти виновника среди множества коммитов вручную было невозможно. Тогда коллега применил git bisect - инструмент, использующий бинарный поиск для локализации проблемного коммита. Это позволило точно определить, где именно был внесен сбойный код, после чего откат этого коммита восстановил работоспособность системы.

В статье приведен наглядный пример репозитория с функцией сложения, где намеренно введена ошибка - преобразование аргументов в строки. Запуск git bisect start, указание "плохого" и "хорошего" коммитов, затем git bisect run ./test_script.sh автоматически проверяет промежуточные версии. Инструмент последовательно тестирует коммиты, сокращая количество проверок вдвое на каждом шаге, и точно находит первый сбойный коммит, где функция add начала возвращать строку вместо числа.

by _spaceatom • 02 ноября 2025 г. в 17:24 • 175 points

ОригиналHN

#git#git-bisect#monorepo#debugging#version-control

Комментарии (143)

  • git bisect is a powerful tool for pinpointing the exact commit that introduced a bug, especially in large or poorly tested codebases.
  • Its real value is in narrowing the search space when you lack the tests or architecture to reason about the code, not in replacing proper testing or code review.
  • The discussion exposed a cultural divide: some developers see bisect as a last-ditch rescue tool for when tests or architecture have already failed, while others argue that if you need it, your process has already failed.
  • Several commenters pointed out that if you have to reach for bisect, you probably lack tests, logging, or a clear commit history, and the real fix is to improve those, not to rely on bisection.
  • The thread also surfaced the point that bisection is only useful if you can reliably detect the bug in every commit; if the bug is non-deterministic or only shows up in production, the tool becomes much less useful.

Beginner-friendly, unofficial documentation for Helix text editor (helix-editor.vercel.app)

by Curiositry • 01 ноября 2025 г. в 19:33 • 186 points

ОригиналHN

#helix#vim#neovim#text-editor#plugins#debugging

Комментарии (54)

  • Обсуждение показало, что Helix ещё не готов стать полноценной заменой Vim/Neovim для большинства пользователей из-за нехватки плагинов, отсутствия нормального дебаггера и нежелания мейнтейнеров принимать вклад.
  • Участники обсуждали, что Helix всё ещё не решает «проблем 99%» пользователей, но при этом требует отказа от привычных плагинов и конфигурации.
  • Несколько человек поделились личным опытом: кто-то вернулся к Vim/Neovim из-за нехватки критичных фич, кто-то не смог привыкнуть к новым биндингам, а кто-то просто не смог жить без плагинов.
  • Сторонники Helix отвечают, что проект всё ещё в активной разработке и что они не хотят «распыляться» на поддержку плагинов вместо улучшения ядра.
  • В итоге обсуждение свелось к тому, что Helix пока остаётся нишевым выбором для энтузиастов, которые готовы пожертвовать привычками и экосистемой Vim/Neovim paди возможности в будущем получить более современный редактор.

Claude Code can debug low-level cryptography (words.filippo.io) 🔥 Горячее 💬 Длинная дискуссия

Автор написал новую реализацию ML-DSA — постквантового алгоритма подписи NIST на Go, но столкнулся с проблемой: функция Verify постоянно отвергала действительные подписи. Уставший после четырех дней работы, он решил попробовать Claude Code для отладки. ИИ мгновенно обнаружил сложную ошибку: при верификации высокие биты w1 брались дважды из-за неправильного повторного использования функции, объединяющей HighBits и w1Encode. Claude Code загрузил код в контекст и сразу нашел проблему без предварительных исследований, затем написал тест для подтверждения гипотезы.

Второй эксперимент с синтетическими ошибками подтвердил эффективность Claude Code: он нашел ошибку в вычислении констант в Монтгомери и проблему с длиной значения в подписи (32 бита вместо 32 байт), потратив меньше времени, чем автор. Хотя Claude Code иногда сдавался после частичного исправления, его способность быстро находить сложные ошибки в низкоуровневой криптографии впечатлила. Автор признал, что до сих пор не понимает, когда лучше использовать ИИ-инструменты, но этот опыт стал отличным кейсом для скептиков.

by Bogdanp • 01 ноября 2025 г. в 18:41 • 434 points

ОригиналHN

#go#cryptography#ml-dsa#nist#montgomery#debugging#llm

Комментарии (198)

  • LLM-агенты эффективно находят баги, но не всегда предлагают корректные фиксы; важно помнить, что их роль — это инструмент для поиска и понимания проблемы, а не окончательное решение.
  • Используйте LLM как «запахивающий» инструмент: он укажет, где копать, но не копает за вас.
  • Стоит ли доверять LLM-агентам доступ к вашей системе и данным — вопрос безопасности и приватности.
  • Стоит ли доверять LLM-агентам, которые могут запускать код или команды, зависит от вашего уровня доверия к провайдеру и от того, насколько вы уверены в их намерениях.
  • Не стоит полагаться на LLM-агентов для критически важных систем безопасности или криптографии.

Deterministic multithreading is hard (2024) (factorio.com)

Разработчики Factorio поделились деталями исправлений и улучшений для версии 2.0. Одна из самых сложных проблем - баг десинхронизации, связанный с многопоточностью и моддинг API. Оказалось, что ошибка проявлялась только при выполнении четырёх условий одновременно: мод должен изменять тайлы при генерации чанка, запрашивать несколько чанков, принудительно генерировать их немедленно, а игра должна запускаться на компьютерах с разным количеством ядер CPU. Эта проблема существовала с июля 2017 года и была исправлена.

Также улучшена система автопаузы в мультиплеере - сервер теперь будет оставаться на паузе до полной загрузки подключающегося игрока, добавлена опция автопаузы при подключении новых игроков. Оптимизирована работа строительных дронов - проблема с сообщениями "600 заданий не хватает материалов/дронов" возникла из-за того, что игра проверяет только несколько задач за тик, чтобы избежать зависаний при большом количестве робопортов.

by adtac • 19 октября 2025 г. в 09:20 • 95 points

ОригиналHN

#multithreading#factorio#gaming#debugging#game-development

Комментарии (9)

  • Пользователи обсуждают, какие блоги и статьи они считают самыми ценными для разработчиков и почему.
  • Особенно отмечается Factorio Friday Facts и статьи Эмери Бергера, которые, несмотря на свою техническую глубину, остаются бесплатными и доступными.
  • Участники также затрагивают тему того, что сложность использования инструментов вроде Coz или Dthreads может быть препятствием для их широкого внедрения, даже если они и решают важные проблемы.
  • Сообщество отмечает, что такие публикации учат мыслить и показывают примеры хорошего вкуса в инженерии, даже если они не всегда приводят к немедленному применению.

Beliefs that are true for regular software but false when applied to AI (boydkane.com) 🔥 Горячее 💬 Длинная дискуссия

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

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

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

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

by beyarkay • 14 октября 2025 г. в 18:26 • 472 points

ОригиналHN

#llm#machine-learning#data#software-development#debugging#apple#google

Комментарии (350)

  • Apple, Google и другие гиганты не смогли превратить LLM в полезные ежедневные функции, а лишь предложили эмодзи-генераторы и сводки уведомлений, что подтверждает: даже у них не получается сделать AI полезным.
  • Основная причина — нет надёжного способа «починить» LLM, потому что они не детерминированы и не поддаются традиционному дебагу; это делает невозможным предсказать или гарантировать поведение.
  • Соответственно, любые заявления о «безопасности» или «контроле» AI в основном маркетинговый фолсификат; никто не может гарантировать, что модель не выдаст опасный вывод при следующем промпте.
  • Парадокс в том, что хотя LLM могут помочь писать код, они всё ещё не могут его самостоятельно тестировать; так что безопасность и надёжность остаётся на совести разработчика, который не может быть уверен, что модель не будет вредоносной.
  • И наконец, никто не знает, как заставить модель вести себя так, как хочет пользователь, и нет способа «починить» её, если она ведёт себя не так, как ожидается.

The first interstellar software update: The hack that saved Voyager 1 [video] (youtube.com)

В предоставленном материале отсутствует сама статья для пересказа. Это лишь нижний колонтитул сайта YouTube с навигационными ссылками на различные разделы платформы, включая информацию для создателей, рекламодателей, разработчиков, а также юридические документы и политику конфиденциальности. Указано, что ресурс принадлежит Google LLC и защищен авторскими правами.

Для выполнения задания по созданию точного и ёмкого пересказа статьи Hacker News в Markdown на русском языке необходимо предоставить саму статью, содержащую ключевую информацию, факты, цитаты или цифры. Без основного контента невозможно создать качественный пересказ в соответствии с указанными требованиями.

by daemonologist • 12 октября 2025 г. в 20:31 • 92 points

ОригиналHN

#voyager-1#space-missions#software-updates#testing#debugging#youtube

Комментарии (17)

  • Случай с миссией "Венера-8" иллюстрирует, как мелкая ошибка может привести к каскаду сбоев, что подчеркивает важность тщательного тестирования и отладки.
  • Проблема с антенной "Галилео" показывает, как отказ оборудования может заставить миссию полагаться на менее эффективную резервную систему, что влияет на объем и качество собранных данных.
  • Случай "Вояджер-1" демонстрирует, как даже при таком расстоянии можно было провести "первое межзвездное обновление программного обеспечения" и спасти миссию.
  • Обсуждение также затрагивает вопрос о том, что значит быть "в межзвездном пространстве", и какие критерии следует использовать для таких заявлений.

The Debugging Book (debuggingbook.org)

"The Debugging Book" — это учебник по автоматическому поиску и устранению дефектов в программном обеспечении. Он охватывает весь цикл: от трассировки и наблюдения за выполнением кода до автоматического ремонта кода. Книга предлагает как теорию, так и практические примеры кода на Python, которые можно запустить прямо в браузере через Jupyter.

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

by signa11 • 06 октября 2025 г. в 09:56 • 131 points

ОригиналHN

#debugging#python#jupyter#software-testing#automated-repair

Комментарии (7)

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

Effect Systems vs. Print Debugging: A Pragmatic Solution (blog.flix.dev)

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

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

by degurechaff • 22 сентября 2025 г. в 17:54 • 76 points

ОригиналHN

#flix#effect-systems#debugging#jvm#java#haskell#optimization#parallelism

Комментарии (35)

  • Обсуждается подход Flix к типизации эффектов, включая системные (например, Debug) и возможность создания пользовательских эффектов.
  • Рассматриваются целевые use-case языка: платформенная независимость, совместимость с JVM/Java, применение в бэкенде и академические цели.
  • Поднимаются вопросы о практичности системы эффектов: необходимость для оптимизаций, потенциальная избыточность и сложность.
  • Обсуждается проблема автоматической параллелизации и оптимизации, включая риски переупорядочивания или удаления операций ввода-вывода.
  • Упоминаются аналогичные реализации в других языках (Haskell, Koka, Roc, Effekt) и их эволюция в моделировании эффектов.

DXGI debugging: Microsoft put me on a list (slugcat.systems) 🔥 Горячее

Разработчик пытался запустить игру Space Station 14 на ARM64 под Windows, но клиент крашился без логов. С помощью WinDbg выяснилось, что падение происходит в USER32!GetDC из-за недопустимой инструкции. Проблема усугублялась путаницей в архитектурах: WinDbg запускал x64-отладчик для x64-лаунчера, хотя целевые процессы были ARM64-нативными. После прямого запуска ARM64-исполняемого файла отладка заработала корректно, включая стектрейсы C#. Оказалось, что WinDbg автоматически переключает режим отладки в зависимости от архитектуры запускаемого процесса, что сбивало с толку при анализе дочерних процессов.

by todsacerdoti • 21 сентября 2025 г. в 14:45 • 270 points

ОригиналHN

#windows#dxgi#windbg#arm64#debugging#directx#compatibility#api#microsoft

Комментарии (76)

  • Microsoft и другие компании используют списки совместимости, основанные на имени исполняемого файла, для применения оптимизаций или исправлений, что может вызывать непредсказуемые проблемы.
  • Данная практика широко распространена не только в Windows (DirectX, драйверы GPU), но и на других платформах (Linux, Proton) для обеспечения обратной совместимости.
  • Подход Microsoft к реализации функций через перехват API-вызовов (Detours) без использования централизованной системы совместимости (AppCompat) критикуется как ненадежный.
  • Обнаружение причины проблемы (совпадение имени файла с списком) потребовало от разработчика значительных усилий и глубоких знаний системного уровня.
  • Многие комментаторы выражают удивление и недовольство подобными непрозрачными механизмами, влияющими на поведение программ без ведома разработчиков.

A vibrator helped me debug a motorcycle brake light system (bikesafe.me)

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

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

by mygnu • 20 сентября 2025 г. в 11:33 • 109 points

ОригиналHN

#debugging#electrical-systems#sensors#data-collection

Комментарии (43)

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

Things you can do with a debugger but not with print debugging (mahesh-hegde.github.io) 💬 Длинная дискуссия

  • Смотреть весь стек вызовов — мгновенно переходить к родительским фреймам и проверять переменные там.
  • Вычислять выражения на лету — вызывать функции и менять состояние без перезапуска.
  • Ловить исключения в точке броска — ставить брейкпоинт на throw и видеть, почему упало.
  • Менять ход выполнения — подменить URL, флаг или объект прямо в памяти, не трогая код.
  • Стандартизировать запуск — закоммитьте .vscode/launch.json, и новичку хватит одного клика, чтобы запустить сервер или CLI с нужными env и аргументами.

by never_inline • 07 сентября 2025 г. в 08:22 • 225 points

ОригиналHN

#debugging#vscode#launch.json#breakpoints#exception-handling#programming#development

Комментарии (199)

  • Отладчики полезны, но часто ограничены: сети, прод-среды, сторонние библиотеки, оптимизация под release.
  • Print-отладка универсальна: работает в любом языке, на удалёнке, в многопоточке и в kernel-space, не требует пересборки.
  • Условные точки останова тормозят или врут; многие ставят «if (x) print("")» и брякают на неё.
  • REPL, time-travel (rr/UndoDB), watch-точки на память и reverse-execution дают сверх-возможности, но доступны не везде.
  • Итог: хороший инженер владеет и отладчиком, и логами, и профилировщиком, и выбирает инструмент под задачу.

Vibe coding as a coding veteran: from 8-bit assembly to English-as-code (levelup.gitconnected.com)

Vibe-кодинг глазами ветерана

Эксперимент
2 недели, 40 часов, 5 k строк Python: AI-агент и я пишем микро-игру с алгоритмами A*, Minimax и пр. Цель — проверить, вытесняет ли LLM «искусство программирования».

Процесс

  • Промптинг: описываю задачи естественным языком, AI генерирует код.
  • Рефакторинг: «сделай класс короче», «добавь тесты» — срабатывает 80 %.
  • Отладка: трассировка стека + «почему падает?» — LLM быстро находит баги.
  • Архитектура: за меня выбирает структуру пакетов, но я корректирую.

Что понравилось

  • Скорость: MVP за 3 вечера.
  • Меньше рутины: никаких «import os.path.join».
  • Новые идеи: AI предложил кэш-стратегию, которой я не планировал.

Что не так

  • «Галлюцинации» API: методы, которых нет в библиотеке.
  • Сложные баги: race condition LLM не видит без контекста.
  • Читаемость: имена вроде helper_utility_v2 приходится переименовывать.

Выводы

  • Junior-девелопер теперь = «человек, который умеет спрашивать».
  • Сеньор нужен, чтобы фильтровать, тестировать и нести ответственность.
  • Синтаксис умирает, зато растёт ценность системного мышления и prompt-инженерии.

Советы ветеранам

  1. Делайте микро-промпты: «добавь docstring» → «добавь пример вызова».
  2. Держи CI/CD: автотесты ловят ошибки, которые AI пропустил.
  3. Используй AI как пару, а не замену: «покажи diff» вместо «перепиши всё».

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

by thunderbong • 28 августа 2025 г. в 15:55 • 169 points

ОригиналHN

#python#llm#machine-learning#a-algorithm#minimax-algorithm#prompt-engineering#debugging#code-refactoring#software-architecture#natural-language-processing

Комментарии (107)

  • Участники сравнивают LLM с консалтинговой фирмой: 50 % шанс получить эксперта, 50 % — стажёра; приходится перечитывать каждую строку.
  • «Vibe-coding» (генерация без чтения) вызывает опасения: сложно дебажить, нельзя защитить авторские права, а тонкие баги пролезают.
  • Опыт показывает: AI полезен в известных языках и задачах (Python, CRUD), но почти бесполезен в нишевых (C/C++ gamedev, Prolog, Haskell).
  • Старшие разработчики всё равно нужны: только они могут проверять, направлять и «владеть» кодом, созданным ИИ.
  • Возникает вопрос: если не брать джунов, откуда возьмутся будущие сеньоры?
  • Предлагают термины вместо «vibe-coding»: «pro-coding», «prompt-coding», «reviewing code».

Why LLMs can't really build software (zed.dev) 🔥 Горячее 💬 Длинная дискуссия

Почему LLM не могут строить ПО

Эффективный инженер постоянно прокручивает цикл:

  1. формирует ментальную модель требований,
  2. пишет код,
  3. проверяет, что он реально делает,
  4. сверяет модели и правит код или требования.

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

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

LLM полезны: быстро генерируют код и документацию, справляются с простыми задачами. В сложных случаях человек всё равно должен контролировать требования и проверять результат. В Zed верят в совместную работу человека и агента, но руль остаётся за инженером, а LLM — лишь инструмент.

by srid • 14 августа 2025 г. в 13:26 • 737 points

ОригиналHN

#llm#software-engineering#tdd#testing#debugging#context-management#programming

Комментарии (426)

  • LLM хороши как инструменты-ассистенты: быстро пишут boilerplate, находят мелкие ошибки, экономят время на рутине.
  • Главный недостаток — неспособность удерживать и «поддерживать» целостную ментальную модель задачи; контекст «размывается» или меняется непредсказуемо.
  • Поэтому при росте кодовой базы отладка превращается в «чтение спагетти», и инженер всё равно вынужден начинать заново.
  • Решение — не «больше контекста», а системы-обёртки: TDD-циклы, пошаговое планирование, документация-модель, строгие промпты.
  • Вывод: сейчас LLM заменяют джунов и Google-поиск, но полноценное ПО без человека, который держит «теорию» проекта в голове, построить не могут.

Zig Error Patterns (glfmn.io)

Введение

Я часто использую отладчик, но привык и к выводной отладке, особенно в юнит-тестах. Хотелось улучшить её и чаще подключать отладчик.

Улучшение выводной отладки

Главная проблема — «шум»: в цикле интересна одна итерация, а печатается всё. Или удобнее читать форматированную структуру, но приходится раскидывать print’ы по коду. В Zig тесты используют error’ы, значит можно печатать только при падении теста через errdefer:

test { errdefer std.debug.print("{f}", .{ast}); // ... }

Так контекст появляется только при ошибке, без засорения лога.

Запуск тестов в отладчике

Просто запустить seergdb или gdb -tui неудобно: тестовые бинарники лежат в zig-cache. Трюк из ziggит: build.zig может запускать команды и передавать путь артефакта:

// seergdb — GUI фронтенд для gdb const debugger = b.addSystemCommand(&.{ "seergdb", "--run", "--" }); debugger.addArtifactArg(exe_unit_tests);

const debug_step = b.step("debug", "Run unit tests under debugger"); debug_step.dependOn(&debugger.step);

Это запускает правильный бинарник. Но отладчик сработает лишь на брейкпоинте или панике, тогда как раннер тестов «проглатывает» ошибки.

Комбинация трюков

Добавим @breakpoint через errdefer:

test { errdefer @breakpoint(); }

Так мы попадаем в точку ошибки, видим контекст и вывод std.testing.expect*. Минус: при zig build test отчёт показывает падение всего шага тестов, а не отдельных кейсов. Нужна возможность включать брейкпоинты выборочно.

Условная компиляция

Через build options пробрасываем флаг, решающий, вызывать ли @breakpoint в тестах.

Минимальный скрипт сборки, запускающий тесты, дополняем опциями:

const std = @import("std");

pub fn build(b: *std.Build) void { const target = b.standardTargetOptions(.{}); const optimize = b.standardOptimizeOption(.{});

const lib = b.addModule("zig-test-patterns", .{
    .root_source_file = b.path("src/root.zig"),
    .target = target,
    .optimize = optimize,
});

const options = b.addOptions();
options.addOption(bool, "debugger", false);
lib.addImport("config", options.createModule());

const mod_tests = b.addTest(.{ .root_module = lib });
const run_mod_tests = b.addRunArtifact(mod_tests);

const test_step = b.step("test", "Run tests");
test_step.dependOn(&run_mod_tests.step);

}

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

const std = @import("std"); const config = @import("config");

test "errdefer @breakpoint()" { errdefer if (config.debugger) @breakpoint(); return error.FixMe; }

test "no breakpoint" { return error.FixMe; }

zig build test — без брейкпоинтов. Но менять значение флага так — значит пересобирать build.zig. Добавим опцию прямо в систему сборки:

var options = b.addOptions(); const use_debugger = b.option( bool, "debugger", "Enables code intended to only run under a debugger", ) orelse false; options.addOption(bool, "debugger", use_debugger);

Теперь можно переключать поведением командой:

zig build -Ddebugger test

И, при желании, привязать шаг запуска отладчика к этому флагу.

by Bogdanp • 06 августа 2025 г. в 15:03 • 148 points

ОригиналHN

#zig#debugging#unit-testing#error-handling#comptime#errdefer#build.zig#gdb#seergdb

Комментарии (46)

  • Участники хвалят согласованность базовых конструкций Zig: минимализм синтаксиса и мощь comptime позволяют элегантные решения без излишней сложности.
  • Особый интерес вызвал errdefer: многие отмечают, что это упрощает тесты и отладку; звучит мнение, что такую возможность «стоит иметь каждому языку».
  • Обсуждают практики отладки: полезны советы по интеграции дебаггера в build.zig, что избавляет от ручного поиска исполняемого файла в кэше.
  • Поднимается вопрос об ошибках без полезной нагрузки в Zig: при парсинге (например, JSON) типовые ошибки вроде UnexpectedToken недостаточно информативны; интересуются паттернами передачи дополнительного контекста.
  • Есть замечание о смешении стилей именования (camelCase в stdlib vs snake_case у автора), что может сбивать с толку.
  • Отмечают эстетику сайта и блога: шрифты (Berkeley Mono), цветовую схему и ретро-оформление — «как в старых DOS-играх».
  • Проводится параллель с D: аналогичная идея реализована через scope(failure), что подчеркивает общность концепции.