в то время как при использовании отладчика достаточно 1 раз попасть в нужную точку останова
Или не попасть или расставлять слишком много брейкпоинтов, чтобы попасть, особенно с асинхронным/многопоточным кодом. Что по затратам примерно равноценно выводу сразу нескольких гипотез в лог за одну компиляцию.
У меня противоположный опыт. Но я покрайней мере не топлю за то, чтобы все использовали логирование. Я за то, чтобы не дискриминировали тех, кто предпочитает логи. Потому что пока вижу только субъективные аргументы.
Возможно и то и другое. Но опять же, если мы пишем отладочную инфу в stdout только из одного потока, вероятность воспроизводимости разная. На практике меня логирование выручало. Статистику не вёл, но в 100% случаев. Как у вас?
Согласен, нарушают на нано/микросекунды, но ручной останов на минуты. На практике, лично мне эти минуты мешали воспроизвести баг. Тут получается вероятность разная. С логами — воспроизводимость ближе к естественному ходу. Но согласен с тем, что да в некоторых пограничных случаях и задерхка связанная с логом может нарушить ход.
Я о том и говорю, что он стабилен при естественной работе приложения, но становится недерменирован из-за нарушения естественного хода потоков (логи этот ход не нарушают, а точка останова в отделном потоке может нарушить, хотя может и не нарушить, тут как повезет). Даже раньше, регулярно пользуясь отладчиком, я переходил на логирование в такие моменты.
То есть когда дебаггер вам именно что понадобится (а он вам понадобится как только вы по какой-то причине не можете изменить код в нужном месте — например если это библиотечный код) — вам он окажется незнаком.
Возможно мне когда-то и понадобится для такого случая отладчик. Но не факт. Я уже лет 7 как отказался от дебаггера и ни разу не возникало такой потребности, хотя пару раз за это время и были проблемы с внешними компонентами, было достаточно знать, что ошибка внешняя.
С логами та же ерунда выходит...
Нет, я о детерминированном баге, который стабильно проявляется и замечательно отслеживается при логировании, но может не возникнуть именно из-за остановки на брейкпойнте (когда этот поток стоит).
Первое. Я не писал, что лучше вообще. Я писал, что мне с ними удобнее и эффективнее работать. Я вопрошал, чем они хуже объективно, при чем настолько хуже, что за это автор ветки минусы на собеседовании готов ставить и не увидел ни одного объективного аргумента за.
Почему мне лучше:
— Автоматизация напрямую в коде. Я фильтрую в коде всё лишнее для проверки гипотезы. Мне не нужно изучать отдельный инструмент (тонкости автоматизации под конкретный дебаггер)
— В многопоточном приложении во время отладки можно не получить те же результаты, что при реальной работе приложения из-за точек останова.
Наверное можно, но согласен, что лучше не стОит. Практичнее использовать логирование.
Но я специально не затрагивал тему продакшена, потому что в этой ветке обсуждается отладка именно в девелопмент окружении. А также некая мистическая культура с этим связанная.
Зачем, если у меня всё прекрасно без него? Зачем мне вообще заморачиваться с лишним инструментом? Принципиально какие преимущества это даёт? Вы так и не раскрыли тему
вашей «культуры».
PHP, Go? Какая разница если мы говорим об отладке? Я например 15 лет назад на С++ писал и использовал отладчик. Сейчас только ассерты и трейсы использую, в JS, Go, Python, whatever. Так мне быстрее и удобнее, особенно в мультипоточной или асинхронной среде, не зависимо от АЯП. И я буду держаться подальше от компании, в которой вышестоящие люди будут навязывать свой субъективный опыт в том, какими инструментами мне лучше и быстрее решать проблему, если мне не приведут какие-то объективные преимущества, а пока я их не вижу.
Для себя вопрос давно закрыл — логирование удобнее, потому что А — автоматизация: глазам не надо страдать отслеживая баг вручную прыгая по окошкам отладчика — просто один грамотно оформленный вывод в лог на одну гипотезу.
Ваш пример с циклом не очень удачный. Даже когда использовал отладчик, мне приходилось добавлять условие средствами отладчика, чтобы он остановился только на брейкпойнте только при определенном условии, чтобы не скакать в цикле по брейкпойнтам и не дергать лишний раз глаза. Так зачем спрашивается так мучиться, если проще автоматизировать через лог?
Но это довод так себе. Мне вот быстрее и удобнее дебаг логи поставить. Т.е. это очень субъективно и явно не повод ставить минус на интрервью и вообще спрашивать про это, как считате?
г) дебагер — как делаете отладку локально. Почему это важно? Потому что очень много людей выводят дампы в консоль через println или spew.Dump. Скажем так это не совсем то что нужно, если мы за культуру разработки :)
Очень субъективно. Пожалуйста обоснуйте. Что это за культура такая, что дебагер — хорошо, а отладка по логам — плохо?
Здесь тоже можно почитать и послушать liteka.ru. Но проект еще даже не MVP.
Первоначально идея была как у автора поста. Но пришло понимание, что большинство слов многозначны. А высокочастотные слова особенно многозначны.
Поэтому больше смысла в том, чтобы помечать не слова, а пару слово-перевод (т.е. смысловое значение). И тем более не подсвечивать в тексте. Это раздражает при чтении книги.
Или не попасть или расставлять слишком много брейкпоинтов, чтобы попасть, особенно с асинхронным/многопоточным кодом. Что по затратам примерно равноценно выводу сразу нескольких гипотез в лог за одну компиляцию.
У меня противоположный опыт. Но я покрайней мере не топлю за то, чтобы все использовали логирование. Я за то, чтобы не дискриминировали тех, кто предпочитает логи. Потому что пока вижу только субъективные аргументы.
Возможно мне когда-то и понадобится для такого случая отладчик. Но не факт. Я уже лет 7 как отказался от дебаггера и ни разу не возникало такой потребности, хотя пару раз за это время и были проблемы с внешними компонентами, было достаточно знать, что ошибка внешняя.
Нет, я о детерминированном баге, который стабильно проявляется и замечательно отслеживается при логировании, но может не возникнуть именно из-за остановки на брейкпойнте (когда этот поток стоит).
Почему мне лучше:
— Автоматизация напрямую в коде. Я фильтрую в коде всё лишнее для проверки гипотезы. Мне не нужно изучать отдельный инструмент (тонкости автоматизации под конкретный дебаггер)
— В многопоточном приложении во время отладки можно не получить те же результаты, что при реальной работе приложения из-за точек останова.
Но я специально не затрагивал тему продакшена, потому что в этой ветке обсуждается отладка именно в девелопмент окружении. А также некая мистическая культура с этим связанная.
вашей «культуры».
Для себя вопрос давно закрыл — логирование удобнее, потому что А — автоматизация: глазам не надо страдать отслеживая баг вручную прыгая по окошкам отладчика — просто один грамотно оформленный вывод в лог на одну гипотезу.
Ваш пример с циклом не очень удачный. Даже когда использовал отладчик, мне приходилось добавлять условие средствами отладчика, чтобы он остановился только на брейкпойнте только при определенном условии, чтобы не скакать в цикле по брейкпойнтам и не дергать лишний раз глаза. Так зачем спрашивается так мучиться, если проще автоматизировать через лог?
Очень субъективно. Пожалуйста обоснуйте. Что это за культура такая, что дебагер — хорошо, а отладка по логам — плохо?
Первоначально идея была как у автора поста. Но пришло понимание, что большинство слов многозначны. А высокочастотные слова особенно многозначны.
Поэтому больше смысла в том, чтобы помечать не слова, а пару слово-перевод (т.е. смысловое значение). И тем более не подсвечивать в тексте. Это раздражает при чтении книги.