Какое правильное имя для выполнения отладки путем добавления операторов печати

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

т.е.

 def foo(x):
     print 'Hey wow, we got to foo!', x

     ...

     print 'foo is returning:', bar
     return bar

Есть ли собственное название для этого стиля отладки?

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

Georg Fritzsche 18.07.2010 04:18

Это древний метод, далеко предшествующий большинству языков, упомянутых ниже, или их местных названий для него. IIRC, это первоначально называлось «Трассировка» или «Отладка трассировки», по крайней мере, в конце 60-х - начале 70-х годов.

RBarryYoung 21.02.2012 19:08

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

madewulf 27.08.2012 03:11
Библиотека для работы с мороженым
Библиотека для работы с мороженым
Лично я попрощался с операторами print() в python. Без шуток.
38
3
17 621
19
Перейти к ответу Данный вопрос помечен как решенный

Ответы 19

Ответ принят как подходящий

Да, он известен как printf() отладка, названный в честь вездесущей функции C:

Used to describe debugging work done by inserting commands that output more or less carefully chosen status information at key points in the program flow, observing that information and deducing what's wrong based on that information.

- printf () отладка @ все2

Естественные пользователи других языков, без сомнения, обращаются к нему с помощью команды print / log / или trace по умолчанию, доступной для выбранной ими платформы кодирования, но я слышал имя printf (), используемое для ссылки на эту технику на многих других языках. чем C. Возможно, это связано с его историей: в то время как BASIC и FORTRAN имели базовые, но работоспособные команды PRINT, C обычно требовал немного больше работы для форматирования различных типов данных: printf() был (и часто остается) безусловно наиболее удобным средством для этого. end, предоставляя множество встроенных параметров форматирования. Его двоюродный брат, fprintf(), принимает другой параметр, поток для записи: это позволяло осторожному «отладчику» направлять диагностическую информацию на stderr (возможно, сам перенаправленный в файл журнала), оставляя вывод программы неповрежденным.

Несмотря на то, что пользователи современного программного обеспечения для отладки часто смотрят на него свысока, отладка printf () по-прежнему оказывается незаменимой: чрезвычайно популярный инструмент FireBug для веб-браузера Firefox (и аналогичные инструменты, теперь доступные для других браузеров) построены вокруг окна консоли, в которое Сценарии веб-страниц могут регистрировать ошибки или диагностические сообщения, содержащие отформатированные данные.

Я помню, как делал это с сокетами C. О, боль. Особенно, когда запись в стандартный вывод начала откладываться, и мне потребовалось вручную вызвать fsync, прежде чем все обретет смысл.

badp 18.06.2011 00:40

Я обнаружил, что отладка printf особенно полезна при отладке проблемы, возникающей в середине цикла. Полистать журнал намного быстрее, чем наблюдать за тем, что происходит в окне просмотра.

Calmarius 29.11.2013 17:15

@Calmarius: Полностью согласен. Отладка printf часто является лучшим способом отладки программного обеспечения, которое работает в цикле, а это в основном нетривиальное программное обеспечение :).

Brent Bradburn 21.10.2015 01:35

я и мои товарищи по команде назвали это «отладкой старой школы».

Я называю это отслеживанием.

Помню, когда я программировал на Flash ActionScript, для этого использовалась функция trace ().

Dean Rather 10.10.2008 04:05

AFAIK, это (или, возможно, «Отладка трассировки») - оригинальный и правильный термин для этого. Этот термин для него восходит к внаименее середины 60-х (задолго до ActionScript).

RBarryYoung 21.02.2012 19:10

Ручные утверждения? Фобия отладчика?

Мне нравится, как "Debuggerphobia" скатывается с языка. +1

Jerub 10.10.2008 10:03

Я также слышал термин «Отладка MessageBox» из толпы VB для обозначения этого «стиля» «отладки».

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

Я обычно называю это отслеживанием.

Обратите внимание, что в Visual Studio вы можете установить точки останова, которые просто добавляют трассировку. Щелкните правой кнопкой мыши точку останова, выберите «при ударе ...» и установите флажок «Печатать сообщение».

Я слышал, это называется Отладка пещерного человека

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

Jasper 24.03.2011 05:06

Кроме того, в .Net вы можете добавлять операторы отладки (я думаю, что на самом деле это Debug.WriteLine) для вывода на консоль. Эти состояния включаются только в отладочные сборки - компилятор автоматически оставит их, когда вы выполните сборку выпуска.

Я встраивал системы - часто это единственный метод инструментирования кода. К сожалению, печать требует времени и влияет на работу системы в реальном времени. Таким образом, мы также используем инструменты «трассировки», когда информация о состоянии системы (вход в функцию, выход и т. д.) Записывается во внутренний буфер для последующего сброса и анализа. Настоящие встроенные программисты могут отлаживать, мигая светодиодом;)

Ага, мигающий код Морзе, чтобы вы могли получить больше информации, чем вы можете с помощью лампочки «Стул капитана Пайка». Готово.

Wayne Conrad 02.12.2010 18:51

Классическая отладка

Я называю это программированием «Привет, мама».

подробная отладка!

Место отладки штанов :)

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

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

Я всегда знал это под термином «быстрая и грязная отладка» или просто «грязная отладка» вкратце.

Я подумал, что следующая цитата будет кстати:

"The most effective debugging tool is still careful thought, coupled with judiciously placed print statements."

— Brian Kernighan, "Unix for Beginners" (1979)

Я слышал, что "Отладка Гутенберга" используется в честь парень, который изобрел печатный станок.

Я бы назвал это просто «Ведение журнала».

Другие вопросы по теме