LINUX.ORG.RU

Vim Сложные конструкции выглядят неприятно

vvvvvvvv
()

Не слушай vim-emacs'еров. Этих укеракуков надо бы тереть с -7 наравне с перловскими однострочниками.

QtCreator можешь пощупать — довольно приятная вещь.

Deleted
()
Ответ на: комментарий от Deleted

Кукаретик здесь ты, а vim с youcompleteme + rtags хорош для C++ разработки. Дебагер нужен только чтобы посмотреть backtrace. Код надо учиться писать сразу правильно, но во время разработки допустимо использовать отладочную печать.

kawaii_neko ★★★★
()

QtCreator. На vimохлам даже не смотри. Можешь попробовать хипстерский clion. Он фичастый, но платный и жрёт ресурсы как полоумный. Но от джабки другого можно было и не ждать.

ox55ff ★★★★★
()
Ответ на: комментарий от kawaii_neko

Дебагер нужен только чтобы посмотреть backtrace.

Ага, именно.

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

Ну конечно...

Deleted
()

Qt creator или же любая IDE/текстовый редактор, который поддерживает Language Server Protocol с Clangd

hyperkahler
()
Ответ на: комментарий от kawaii_neko

Кукаретик здесь ты

Дебагер нужен только чтобы посмотреть backtrace

Код надо учиться писать сразу правильно

во время разработки допустимо использовать отладочную печать

Столько прекрасного в одном посте. Браво!

yoghurt ★★★★★
()
Ответ на: комментарий от Deleted

у гдб вполне себе нормальный собственный (cl|m)i, так что какие-то нужность каких-то вимо-емаксо-плагинов весьма сомнительна.

yoghurt ★★★★★
()
Ответ на: комментарий от yoghurt

вполне себе нормальный собственный (cl|m)i

Это совсем не тот уровень комфорта, который предоставляет IDE.

Deleted
()
Ответ на: комментарий от yoghurt

Не шлангуй.
Как минимум в IDE ты просто пошагово бежишь по коду и сразу видишь значения всех интересных тебе переменных... Да, блин, АБСОЛЮТНО всё удобней, проще, быстрее и самое главное наглядней.

Deleted
()
Ответ на: комментарий от Deleted

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

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

yoghurt ★★★★★
()
Ответ на: комментарий от yoghurt

Отладка в терминах языка С++. И еще можно внести изменение в текст и продолжить отладку с той же точки.

Miha
() автор топика
Ответ на: комментарий от Miguel

XXI век. Как-то даже неудобно объяснять всё убожество отладки через printf.

Поправил.

ox55ff ★★★★★
()
Ответ на: комментарий от yoghurt

Ага, только сначала тебе нужно сообщить дебаггеру эти переменные. Их имена. В IDEeшке для этого не нужно ничего делать, ну или пару раз кликнуть мышкой. И шаблонная фигня в нормальной IDE будет выглядеть человекочитаемо.
Эх-х-х...
Слушай, я не пытаюсь тебя переубедить. Хоть чёртом лысым дебажь, только отстань от молодёжи со своими вимами-швимами.

Deleted
()
Ответ на: комментарий от yoghurt

В IDE я могу сразу же ставить бряки и одной кнопкой запускать отладку. Пару мгновений и выполнение программы остановлено в нужном месте, есть стек вызовов и значения всех локальных переменных. Очень легко можно перемещаться по стеку вызовов и значения переменных так же будут подгружаться. Не надо вбивать в консоль имена функций или номера строк. Редактировать .gdbinit тоже не требуется.

Ещё чисто стилистические преимущества. У меня IDE настроена, как мне удобно: шрифты, размеры, подсветка синтаксиса, горячие клавиши.

ox55ff ★★★★★
()
Ответ на: комментарий от Deleted

Хоть чёртом лысым дебажь, только отстань от молодёжи со своими вимами-швимами.

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

yoghurt ★★★★★
()

qtcreator неплох, но порой форматирование сходит с ума. Еще не очень радует интеграция с gdb.

IceRain
()
Ответ на: комментарий от Miha

У тебя в редакторе текст программы на С++ и вся отладка идет по этому тексту.

Круто! А шаблоны оно тоже отладит? И можно посмотреть, почему SFINAЕ зарубил перегрузку, например, или компилятор ушёл в рекурсию, компилируя?

Пока этого нет, никакой «отладки в терминах языка С++» тоже нет.

yoghurt ★★★★★
()

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

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

Ну и termdebug в vim’e - таки торт. Интересно, будет ли ответочка от neovim?

pon4ik ★★★★★
()
Ответ на: комментарий от IceRain

разворачивалку макросов таки можно подсмотреть через опцию gcc `-E`, но кому захочется отлаживать получившееся месиво.. страшно представить :)

yoghurt ★★★★★
()

Так, стоп, а в каком уровне ты себя оцениваешь в сфере разработки ПО(начинающий, опытный, повелитель клито суньёр)? Если неофит, то да - vim/test/trace/test, таки наверное эребор. И лучше смотреть qtc/vscode и разбирать что же ты понаписал сначала в отладчике, пока плохо понимаешь и архитектуру и реализацию.

pon4ik ★★★★★
()
Ответ на: комментарий от Deleted

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

pon4ik ★★★★★
()
Ответ на: комментарий от yoghurt

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

IceRain
()
Ответ на: комментарий от ox55ff

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

Вот чем лучше нормальные логи - я могу сказать. Например без всякого rr (кстати в какой ide есть уже интеграция кроме этих emacs/vim?) можно понять что предшествовало неверному поведению и каковы его корни.

pon4ik ★★★★★
()

CLion норм. Отладка с шаблонами выглядит страшно. Если у тебя не сложная многопроцессная модель, то можно попробовать lldb вместо gdb.

xpahos ★★★★★
()
Ответ на: комментарий от pon4ik

Начинающий. Был небольшой опыт изучения С++ под Вижуал Студией, но потом я увлекся скалой.

Miha
() автор топика
Ответ на: комментарий от Miha

Тут вопрос не про C++ а в принципе про разработку ПО. Особенно серверочки мозги прочищают, когда gui нет у разрабатываемого приложения, начинаешь ценить более другие способы расследования сбоев логики, а потом становится понятно, что графическое представление переоценено.

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

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

Можешь посмотреть историю - я пару лет назад сам топил за qtcreator и ругал тех кто правит в vim’e что-то кроме конфигов, но, сначала обстоятельства вынудили, а потом я проникся таким подходом: тесты и логи. Багов в прод в таком варианте практически не попадает, и в 90% случаев это баги либо дизайна либо совместимости с окружением, даже скучно немного, ничего не падает, работает, все баги находишь либо в процессе разработки ты либо тестировщик на интеграционных тестах.

Не обязательно сразу прыгать в vim и подобные решения, просто постарайся держаться подальше от gui отладчика в тех частях, где у тебя есть знание того как устроенна реализация. А если и отлаживаешь - отлаживай тест а не всё приложение.

Ну и на сладкое - если ты имеешь хоть какой то опыт промышленной разработки, ты 100% уже писал и тесты и логи. Просто не оформлял как следует и не сохранял их. А сохранение обоих двух даёт недюжий прирост скорости при регрессионном тестировании и отладки сбоев на проде.

pon4ik ★★★★★
()
Ответ на: комментарий от pon4ik

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

CatsCantFly
()
Ответ на: комментарий от CatsCantFly

писать спец тест (интересно, если баг на стыке нескольких модулей монолитного приложения

Запросто, как впрочем и все регрессионные тесты

yoghurt ★★★★★
()
Ответ на: комментарий от CatsCantFly

А что там с ней с границей модулей? Кто-то логи не умеет писать или тесты? Категории и мокапы наше всё.

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

Я твой посыл - понимаю, и сам такое говорил возможно даже на этом форуме, всяким презренным любителям printf’ов. Ну, пока не переметнулся в их лагерь.

Нафиг все эти одноразовые котстыли и подпорки, steps to reproduce и скриншоты в треккере. Спека, тест, лог. Сетевой дамп или корка - раз в полгода когда ну совсем что-то из ряда вон и загадка загадок.

pon4ik ★★★★★
()
Ответ на: комментарий от CatsCantFly

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

pon4ik ★★★★★
()
Ответ на: комментарий от pon4ik

Ну вот к примеру (условный, но типичный кейс): есть баг «после захода в инструмент А, так что бы в процессе его работы кончилась память, если зайти в него второй раз и нажать Х, приложение падает», выясняется, что если в инструменте А кинулось исключение bad_alloc при определенной последовательности действий, статическая переменная Magic не обнуляет свое значение и при следующем заходе и нажатии на Х индекс в массиве выходит за границы. Как такое воспроизвести в написанном под это тесте (и на что его писать, без отладчика ты не знаешь где оно вообще падает) и как это отладить printf без применения отладчика?

CatsCantFly
()
Последнее исправление: CatsCantFly (всего исправлений: 1)
Ответ на: комментарий от CatsCantFly

Сейчас ты разозлишься, ибо ответ тебе покажется дебильным. В нормально инструментированной кодовой базе вероятности ошибок подобной этой - стремится к нулю. Да человеческий фактор никто не отменял, но, подобное A - словится нагрузочным тестом(коли уж исчерпание памяти это кейс, а оно станет кейсом при первом прецеденте), Б - как раз входит в категорию «раз в пол года» и попадёт в интеграционный регрессионый набор, возможно сразу для всех сущностей со сходным интерфейсом «инструмент А» :)

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

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

Кстати конкретно выход за границы потенциальный - и tidy найти может легко.

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

Итого для отладчика при определённым образом построенном процессе разработки остаётся не так уж и много сценариев:

  • сбой там от чего у тебя нет сорцов
  • баг в реализации компилятора, эмулятора или анализатора
  • очень мощный и неумелый оверинжиниринг под допингом который прошёл ревью 31 декабря в 11-59 вечера и был залит несмотря на красный билд
pon4ik ★★★★★
()
Ответ на: комментарий от yoghurt

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

vertexua ★★★★★
()
Последнее исправление: vertexua (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.