Общий шаблон для обнаружения ошибки следует за этим сценарием:
- Соблюдайте странности, например, отсутствие вывода или зависание программы.
- Найдите соответствующее сообщение в журнале или выходе программы, например, «Не удалось найти Foo». (Следующее применимо только в том случае, если этот путь используется для обнаружения ошибки. Если трассировка стека или другая отладочная информация легко доступны, это уже другая история.)
- Найдите код, где печатается сообщение.
- Отладка кода между первым местом, где Foo вводит (или должен вводить) картинку, и местом, где печатается сообщение.
На третьем этапе процесс отладки часто останавливается, потому что в коде есть много мест, где выводится «Не удалось найти Foo» (или шаблонную строку Could not find {name}
). Фактически, несколько раз орфографическая ошибка помогала мне находить фактическое местоположение намного быстрее, чем я в противном случае - это делало сообщение уникальным во всей системе и часто во всем мире, что немедленно приводило к попаданию в поисковую систему.
Очевидный вывод из этого состоит в том, что мы должны использовать глобально уникальные идентификаторы сообщений в коде, жестко кодировать его как часть строки сообщения и, возможно, проверять наличие только одного вхождения каждого идентификатора в базе кода. Что касается удобства обслуживания, что, по мнению этого сообщества, являются наиболее важными плюсами и минусами этого подхода, и как бы вы реализовали этот или иным образом гарантировали, что его реализация никогда не станет необходимой (при условии, что в программном обеспечении всегда будут ошибки)?