Что мне делать с гремлином принтера?

#delphi #error-handling #indexoutofboundsexception

#delphi #обработка ошибок #исключение IndexOutOfBoundsException

Вопрос:

Пользователь сообщил об ошибке при запуске моей программы. Трассировка стека была:

 Loc 1:  Classes.Get (3368, 2)
Loc 2:  Behold (58, 18)
  

Я никогда раньше не наблюдал эту проблему, и ни один другой пользователь никогда не сообщал мне об этом, и мой пользователь сказал, что пока это единственный раз, когда у него это было.

Строка 18 в моей программе — это просто мое Application.Run утверждение в .dpr для моей программы.

Строка 3368 в Classes — это заявление об ошибке в:

 function TList.Get(Index: Integer): Pointer;
begin
  if (Index < 0) or (Index >= FCount) then
    Error(@SListIndexError, Index);
  Result := FList^[Index];
end; 
  

что указывает на то, что некоторый индекс списка вышел за пределы. Но я не могу сказать из этого, что могло вызвать это.

Мой пользователь, который является другим программистом, говорит, что он думает, что это нечто, называемое «гремлином принтера».

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

Комментарии:

1. Я предполагаю, что под «гремлином принтера» он подразумевает случайное событие, которое портит печатную страницу, обычно из-за капризов процесса печати (слишком много чернил, смазанный шрифт и т. Д.). В программировании, если не считать сбоя памяти или тому подобного, этого на самом деле не произойдет. Звучит как оправдание ошибки, которую очень трудно исправить. Такого рода загадочные ошибки, которые редко случаются, часто возникают из-за многопоточности.

2. Интересные сквозные @Kirk. Однако моя программа выполняет обработку основного цикла только во время инициализации, прежде чем передать управление пользователю.

3. Звучит как ссылка на ошибку Гейзенбаха

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

Ответ №1:

Термин «Гремлин» может быть датирован Второй мировой войной, когда гремлинов обвиняли в проблемах в основном в технических областях — особенно когда самолеты терпели крушение без какой-либо причины или двигатели внезапно перестали работать («Они посадили гремлинов!»).).

Для меня название звучит как сокращение от «немецкий гоблин», но это только моя личная интерпретация.

В конце концов, вам не о чем беспокоиться. Фактическая причина ошибки, вероятно, в чем-то другом.

Ответ №2:

Поскольку другой пользователь — программист, мы можем пренебречь чем-то базовым, связанным с принтерами, например, в Windows не определен принтер?

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

У меня такие ошибки IOB только из-за поврежденной установки драйвера принтера.