ypq: (Default)
[personal profile] ypq
щас одно изделие выдало сообщение об ошибке с таким Error id: 7688137034771023789.

ну, то есть, представляете? - несчастный юзверь получает такое уведомление, бросается звонить в саппорт:
- что случилось?
- ошибка!
- какая?
- семь квинтильонов шестьсот восемьдесят восемь квадрильонов сто тридцать семь триллионов тридцать четыре миллиарда семьсот семдесят один миллион двадцать три тысячи семьсот восемдесят девять.

помню, когда я был маленький, а ЭВМ - большими, типа ЕС ЭВМ, к ним прилагался комплект документации. и один из мануалов содержал "список возможных неисправностей", в котором можно было найти описание ошибки и чего следует предпринять, чтобы ошибку устранить. потому что памяти у ЭВМ было мало, никому в голову бы не пришло занимать память под тексты сообщений об ошибках - выдавался код. по этому коду юзверь искал подробное описание ошибки в мануале... да и ошибок-то было - ну 10, ну 100. а сколько бы понадобилось томов мануалов СЕЙЧАС?

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

или вот так: население Земли 7+ миллиардов. если бы каждый был программистом, то на каждого бы пришлось по миллиарду ошибок! нее, я понимаю: прогресс микроэлектроники, скорость вычислений современных ЭВМ - может они и считают в квинтильоны раз быстрее. но за какой срок один такой рукожопый программист может устранить миллиард ошибок?

(no subject)

Date: 2022-06-02 05:16 (UTC)
realwired: (Default)
From: [personal profile] realwired
Практически уверен что там типа "-7", а показало как "unsigned int"

(no subject)

Date: 2022-06-02 05:31 (UTC)
realwired: (Default)
From: [personal profile] realwired
size_t катит

(no subject)

Date: 2022-06-02 06:00 (UTC)
realwired: (Default)
From: [personal profile] realwired
А что делать, когда доступ к памяти везде с грануляцией 8 байт и ее много? Доступ к байтам ппц какой дорогой.

Кстати, в бытность мою в "Крыжовнике" таки да, было дело - использовали младшие биты в указателях (64/64) под эти самые флаги и коды.

(no subject)

Date: 2022-06-02 05:35 (UTC)
realwired: (Default)
From: [personal profile] realwired
Я всегда так делаю, если ошибки простые и нет нужды в дереве классификаций с битовыми полями или бросании исключений. 0 - ок, -1 "ой, вы попали себе пальцем в жопу!, -2 "не в жопу, а в глаз!", -3 "ппц, прострелили ногу!"

(no subject)

Date: 2022-06-02 06:30 (UTC)
realwired: (Default)
From: [personal profile] realwired
Я ставлю на битовые поля, а не на enum

(no subject)

Date: 2022-06-03 19:51 (UTC)
sab123: (Default)
From: [personal profile] sab123
+1 Эта такак общая традиция: отводить верхние биты под классификацию источника ошибок. Собственно, на Виндовсе это является стандартной части библиотеки выдачи сообщений: в довольно длинное верхнее поле кладется сгенерированный идентификатор библиотеки, в которой возникла ошибка, в нижнее - собственно код ошибки.

(no subject)

Date: 2022-06-05 04:04 (UTC)
sab123: (Default)
From: [personal profile] sab123
Адрес бесполезен. Он как минимум будет меняться с каждым билдом, но на самом деле все еще хуже: чтобы бороться с атаками на переполнение стека, которые передают управление на известное место в программе, нынешние загрузчики каждый раз загружают модули программы на случайные адреса.

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

(no subject)

Date: 2022-06-05 16:09 (UTC)
sab123: (Default)
From: [personal profile] sab123
Так данные есть. Сообщение об ошибке - по сути тот же printf, толлько еще умеет печатать данные в любом порядке, какой нужен для данного языка. Ему можно передавать дополнительные данные. Более того, в логи оно идет в виде структурированной записи, до превращения в текстовый вид, так что его можно классифицировать по коду, делать автоматические реакции и т.д. Тут, однако, была противоположная проблема в том, что без манифеста этот лог прочитать было невозможно, если скопировать на другую машину, где такого пакета нет или он другой версии. Но уже в примерно 2015 году эту проблему решили и стали записывать в лог еще и нужный кусок манифеста.

Так что если нет приличного сообщения - это главным образом проблема конкретного приложения.
Page generated 2025-Jun-16, Monday 16:13
Powered by Dreamwidth Studios