насчет удобства я бы поспорил. я, перепробовав почти все, вернулся к выводу, что gdb практически идеален для C/C++. никакой другой отладчик не позволяет с такой скоростью и гибкостью отлаживать программы любой сложности.
и да, кстате, нам когда-то в университете преподавали программирование, все было под линукс, первый курс — nasm, второй C/C++. отладка в обоих случаях в gdb, редактировать учили в vim'е. ничего, студенты без проблем и стрессов осваивали это все. сложность для начинающих весьма преувеличена
Wolong, на комментарий которого вы отвечаете, писал про Vim. Vim, в отличие от vi (а также pico и nano) умеет подсветку синтаксиса, автодополнение и навигацию по коду. Порог вхождения высокий, но как редактор для программиста он очень хорош (опять же в отличие от pico и nano).
Хотите сказать в gdb не надо разбираться? В IDE я нажал Debug и сразу увидел все на одном экране — переменные, память, ассемблерный код с кодом С++ для удобства отладки
Ну это вы знаете, это чисто Ваше мнение. Для меня наоборот, так как я программировал в нетбинсе под джаву было все очень понятно. У каждого свой опыт за плечами и свои вкусы. Я просто решил что так как статья для новичков в С, то не помешает упомянуть альтернативный способ. Пусть люди выбирают, я ничего не навязываю же
в чем смысл статьи? упомянуть названия инструментов? насчет coredump — в той же убунту для его создания необходимо поставить пакет linux-crashdump. Когда «рисуются вопросики», ломается стек, куча, и происходит прочее волшебство, связанное и повреждением памяти, куда лучше поможет valgrind, разберет с указанием строк кода, что не так, как и почему.
и blktrace, и etrace, и latrace, и xtrace, и mutextrace, и kmtrace, и mutrace и еще много страшных слов я знаю, опишите хоть как и зачем вы предлагаете использовать этот инструмент.
Ну, раз это непонятно: strace и ltrace удобно использовать для того, чтобы быстро выяснить до какой точки дошло выполнение и что при этом происходило (ошибки, водвращаемые значения и пр.).
Нет, друзья, нет нет и еще раз нет системе контроля версий для начинающего программиста!
Надо писать много, много и дико, и желательно с одного раза, с одной попытки на упражнение\задание\пример! А контроль версий тут только задержит!
У меня была проблема когда начал изучать Си/Си++/Windows/MSVC6 — неосторожное изменение кода влекло за собой падающий проект. Я начинал комментировать код, пытаясь понять что именно падает и как сделать так чтобы не падало. Позже я научился делать частые бэкапы в другую папку с указанием даты. Если бы мне тогда показали на контроль версий — да я бы был счастлив.
Мне очень отладчик ddd нравится. Это GUI над gbd, внизу можно в консоль писать команды gdb, но так же есть гуи. Выглядит правда жутко (интерфейс какой-то очень нативный и древний), но дело свое успешно выполняет.
Многие команды gdb можно сокращать до одного символа:
Запустить программу: run или r
Шаг вперёд: next или n
Войти в функцию: step или s
Поставить новый breakpoint: break или b
«Отпустить» выполнение до следующего breakpoint-а: continue или c
Иногда до двух-трёх символов:
Отключить breakpoint 3: disable 3 или dis 3
Включить breakpoint 3 обратно: enable 3 или en 3
Выполнять код до строчки 123: advance 123 или adv 123
Выполнять код до конца функции: finish или fin
Также можно запускать переключаться между обычной командной строкой и TUI c с помощью «Ctrl-X A» или «Ctrl-X Ctrl-A», т.е. не важно, когда вы отжали Ctrl после Ctrl-X.
А я привык отлаживаться с помощью printf. Кидаю в лог кучу всего (метки прохождения участков кода, значения переменных). Запускаю и смотрю вывод, анализирую. Привычка выработалась в результате отсутствия пошаговых отладчиков под некоторые платформы. В случае реалтайма возникают сложности. В худшем случае приходится выводить сигналы на выводы микроконтроллера и смотреть осциллографом. (например, в начале исполнения участка кода устанавливем вывод в единичку, в конце исполнения выставляем в нолик. запускаем и смотрим осциллографом. Думаем.)
Если же отладчик под текущую платформу присутствует, всё равно не использую. Привычка.
О боже, как это похоже на разработку под PHP. Даже если есть куча нормальных средств, от привычки использовать var_dump отказаться очень сложно :( Да и редко бывает нужно, вообще говоря
Как я вас понимаю. Я тоже от дома в продуктовый магазин хожу пешком. Каждую неделю трачу десять минут, чтобы туда дойти, а ведь давно бы уже пора туда самолётом летать.
Когда 10 минут (отладочный вывод) это одно. А когда серьезный дебаггинг, напихивать 100500 принтфов, чтобы потом их удалить или закомментить (ибо слишком много мусора в логах после отладки) это двойная работа: сначала сделать из 3-х строчной функции 10 строчную (образно), а потом или отключать это ифа-ми или комментировать/удалять.
Отладчики как раз для решения это проблемы и придуманы, как и, допустим, исключения — чтобы не засорять чистый код неосновными вещами.
Все-таки более традиционным уже считается «многопоточность», а не «многонитевость».
К примеру, для программистов WinAPI существуют потоки (threads) и нити (fibers) и это устоявшийся и официальный перевод.
То для программистов WinAPI. А для программистов С++ существуют потоки (streams) и нити (threads). Трудности перевода в общем. Я в таких случаях вообще стараюсь английскую кальку использовать, хоть это и коряво звучит, чтобы не было неоднозначностей.
Приведите, пожалуйста, контекст (а лучше фразу/предложение) в котором можно спутать «поток» в значении «поток ввода/вывода == stream» и «поток» в значении «поток исполнения == thread».
А «fiber» обычно переводят как «волокно» или «пользовательский поток»
В контексте то как раз в большинстве случаев понятно о чем речь. Просто чтобы одним словом не называть две кардинально разные сущности некоторые называют стримы потоками, а треды нитями. А файберы волокнами, да.
Ну когда один поток пишет в поток, а другой поток из этого потока читает — то всё ж понятно из контекста? Но звучит не очень.
Вообще спор из серии «Называть долину силиконовой или кремниевой». Вроде всем понятно, что кремниевой, но устоявшееся название и всё такое… В итоге используются оба.
«На конвйере по производсту пива, в процессоре ошибся предсказатель переходов и проихошел сброс конвйера» — вас это смущает? Давайте тоже переименовывать.
Не важно кому пришло это в голову. Это термин. Он в книгах, переводах. Хороших и рекомендованных. Терминология существует не для того, чтобы ухо радовать (хотя это, бесспорно, ее приятное свойство), а для того, чтобы можно было обмениваться информацией, не переобозначая каждый раз, определения используемых слов
Отладка программ на C для начинающих