Учебный пример, показывающий, что иногда printf в качестве отладки может скрывать ошибку - PullRequest
7 голосов
/ 24 июня 2010

Я помню, когда я был на каком-то курсе программирования на С, однажды учитель предложил мне использовать printf, чтобы наблюдать за выполнением программы, которую я пытался отлаживать. Эта программа имела ошибку сегментации с причиной, которую я не могу вспомнить в данный момент. Я последовал его совету, и ошибка сегментации исчезла. К счастью, умный ТА сказал мне отлаживать вместо использования printf s. В этом случае это было полезно.

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

Вопрос: Кто-нибудь из вас сталкивался с таким поведением? Как я мог воспроизвести что-то подобное?

Изменить:

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

Ответы [ 11 ]

0 голосов
/ 24 июня 2010

Ну, может быть, вы могли бы научить его, как использовать GDB или другие программы отладки? Скажите ему, что если ошибка исчезла, просто благодаря «printf», то она действительно не исчезла и могла появиться снова позже. Ошибка должна быть исправлена, а не проигнорирована.

...