Бросить (или, соответственно) аргумент функции NULL вместо того, чтобы все взорвалось? - PullRequest
6 голосов
/ 03 августа 2010

В предыдущих крупномасштабных приложениях, требующих высокой надежности и продолжительного времени работы, я всегда был для проверки аргумента функции указателя, когда он был задокументирован как "никогда не должно быть NULL".Затем я бы выдал исключение std::invalid_argument или подобное, если бы аргумент на самом деле был равен NULL в C ++ и возвратил бы код ошибки в C.

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

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

Есть какие-нибудь мысли или лучшие практики по этому поводу?

Редактировать 1: Я забыл упомянуть, что большая часть нашего кода - это библиотеки для сторонних разработчиков, которыеможет знать или не знать о нашей внутренней политике обработки ошибок.Но функции по-прежнему задокументированы правильно!

Ответы [ 11 ]

1 голос
/ 03 августа 2010

Если ваше приложение ведет журнал, вы можете просто написать в файл журнала что-то вроде: functionX(): got NULL pointer с отметками времени или любым другим соответствующим контекстом.Что касается решения: позволить ему взорваться или выполнить проверку и выдать ошибку ... Ну, это действительно зависит от того, что делает ваше приложение, каковы ваши приоритеты и так далее.Я сам порекомендовал бы комбинацию проверки / исключения броска и журналов.Анализ аварийных дампов здесь кажется пустой тратой времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...