Теоретически, конечный пользователь никогда не должен видеть внутренних ошибок. Но на практике теория и практика расходятся. Так что вопрос в том, что показать конечному пользователю. Теперь, для полностью нетехнического пользователя, вы хотите показать как можно меньше (" нажмите здесь, чтобы отправить сообщение об ошибке " вещи), но для более опытных пользователей, они захотят знать если есть обходной путь, если это было известно некоторое время и т. д. Итак, вы хотите включить некоторую информацию о том, что не так.
Классическим способом сделать это является утверждение с именем файла: номер строки или трассировка стека с тем же. Теперь это хорошо для разработчика, потому что это указывает ему прямо на проблему; однако он имеет некоторые существенные недостатки для пользователя, в частности, то, что он очень загадочный (например, недружественный) и изменения кода изменяют сообщение об ошибке (поиск в Google для ошибки работает только для этой версии).
У меня есть программа, которую я планирую написать, где я хочу решить эти проблемы. То, что я хочу, - это способ прикрепить уникальную идентичность к каждому утверждению таким образом, чтобы редактирование кода вокруг утверждения не изменило его. (Например, если я вырезал / вставил его в другой файл, я хочу, чтобы отображалась та же информация) Есть идеи?
Один из способов, о котором я думаю, - это перечислить ошибки, но как убедиться, что они никогда не используются более чем в одном месте?
(Примечание. Для этого вопроса Я смотрю только на ошибки, которые вызваны ошибками кодирования. Не те вещи, которые могут на законных основаниях происходить, например, некорректный ввод. ОТО, эти ошибки могут представлять некоторый интерес для сообщество в целом.)
(Примечание 2: рассматриваемая программа будет приложением командной строки, работающим в системе пользователя. Но, опять же, это только моя ситуация.)
(Примечание 3: целевой язык D и Я очень хочу погрузиться в метапрограммирование . Ответы на другие языки приветствуются !)
(примечание 4: Я явно хочу НЕ использовать фактические местоположения кода, а скорее какие-то символические имена для ошибок. Это потому, что если код изменяется практически любым способом, местоположения кода изменяются.)