2016-02-02 3 views
12

Обновлениястертые компоненты в Delphi программ

2016-02-18: Добавлена ​​информация


процесс У меня есть программа Delphi, скомпилированных с использованием xe4. Он используется несколькими сотнями клиентов. Несколько недель назад один из этих клиентов сообщил, что некоторые области исполняемого файла стирались (изображения ниже) случайным образом в течение дня. Этот клиент имеет 35 сайтов, использующих этот exe, и проблема возникает не более чем на 10 из этих сайтов.

Исследование

1 - Мое первое подозрение было бесконечный цикл. Exe продолжает реагировать, пока компоненты стираются, ничто не изменилось в коде так радикально с момента, когда эта проблема не произошла, и журналы не показывают никакого цикла (этот exe имеет журналы везде).

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

3 - Некоторые другие программы (антивирус?) Влияет на мой exe. Не удалось расследовать этот hipotesis должным образом, но до сих пор не удалось найти какую-либо установленную программу, которая привлекла мое внимание.

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

Изображение

1 - В изображении внизу красно-гладить области должно быть TToolBar

erased TToolBar

2 - В этом втором изображении есть три области, из сверху вниз первый должен быть TToolBar, вторым должен быть заголовок дочерней формы, а третий должен быть TwwDBGrid

Menu, title and TwwDBGrid erased

3 - Третий пример показывает, на верхней стертый области, где должна быть TEdit, просто ржали это есть то, что должно быть строка на TwwDBGrid и на стороне мы видим уничтоженного скроллбар от TwwDBGrid

Tedit, line and scroolbar erased

4 - Этот последний пример показывает, 5 стертых областей: название приложения, основной TToolBar, название формы, а TButton и два TwwDBGrid

enter image description here

5 - Это интересный пример обусловлен за стертые компоненты есть 4 TSpeedButtons, которые не стирался, но они без изображений они имеют первоначально (первый красный погладил области). Другой 3 красные погладил области, в порядке, 2 TEdits, TwwDBGrd и TButton

enter image description here

процесс Информация

Я получил скриншот в momment проблема возникает. scgolr - мое программное обеспечение.

enter image description here

+0

Проблемы с видеокартами и драйверами я бы предпочел. Панели инструментов, как известно, чувствительны к таким вещам. –

+0

@DavidHeffernan, спасибо за вашу волю, чтобы помочь, как всегда. Как вы можете видеть, на рисунке 3 есть случаи, когда панель инструментов не стирается, а TEdit и части TwwDBEdit. Считаете ли вы, что даже если этот случай может быть графикой/драйверами? –

+0

Это менее вероятно, я думаю. Возможно, дефект в вашей программе. –

ответ

1

проблема связана с сайтом банка безопасности (Варшава - газ Tecnologia), который ваш клиент обращается к нему, обновляет его и будет решен, проблема в Бразилии

+0

Я знаю, что любое программное обеспечение Gas Tecnologia проблематично, но уверены ли вы, что это вызывает эту проблему со стираемыми компонентами? –

+0

эта проблема возникла здесь с нашими клиентами. http://www.reclameaqui.com.br/14363141/gas-tecnologia-a-diebold-company/gas-tecnologia-interferindo-em-sistemas-desenvolvidos-em-del/ – Passella

+1

Это была действительно проблема. Для других, чтобы узнать, какие проблемы может вызвать программное обеспечение Gas Technologia, посмотрите http://www.linhadefensiva.com/2013/04/brazilian-users-unable-to-boot-windows-after-botched-update / –

1

Как @SebastianZ и @AlekseyK указал, вы можете экспериментировать exaustin некоторых GDI ресурсов (ручки?). Если к системе можно получить доступ, некоторые инструменты, такие как Process explerer или process hacker, могут дать вам несколько советов. Эта утилита может также помочь GDIView

Я не знаю, может ли это примениться к вашему делу, но иногда повреждение данных базы данных может привести к странному эффекту в запущенных программах (я помню «Data Bombs», вызывающие исключения из памяти. .

Так что, если что-то вызывает цикл выделения GDI, график вашего приложения cauld быть затронут в «странных» способах

2

Существует действительно не достаточно подробной информации, чтобы дать вам однозначный ответ. Тем не менее, я могу ответить с некоторыми направлениями на ваш вопрос:

Как я могу исследовать дальше?

Из-за того, что вы заявили:

  • Программа используется на несколько сотен клиентов
  • Один (только) клиент испытывает проблему
  • Первое вхождение этой проблемы был какой-то недель назад

первое, что нужно сделать, связаться с клиентом и получить информацию, которую вы говорите, что вы спросили f или не получили. Вопросы, которые необходимо ответить, являются:

  • Что изменилось в среде клиентов в то время проблема началась относительно оборудования, сети, сервер, ОС, другое программное обеспечение работает в ПК?
  • Что-то изменилось в том, как ваш клиент использует ваше программное обеспечение?
  • Что должен сделать клиент, чтобы избавиться от проблемы, как только это произойдет? Закройте программу? Перезагрузите компьютер? Или, может быть, просто свести к минимуму - восстановить ошибочное окно?

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

Некоторые конкретные вещи, чтобы проверить в вашем программном обеспечении и на месте, когда возникает проблема, и если эта проблема уходит с минимизируют - восстановление приложения (что предполагает картину прерванную задачу:

  • ли вы, звоните Application.ProcessMessages в любое время?
  • Существует ли в фоне доступа нити того же данные, что и GUI? Если да, то защита данных должным образом на месте (блокировки, синхронизация).
  • ли получить доступ к фоновому потоку любой GUI компонента без Synchronize?

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


Редактировать после получения полученной информации о процессе.

Нет ничего тревожного в отношении объектов GDI или User. Но тревожно, когда вы говорите в комментариях, которые вы называете Application.ProcessMessages во многих местах, очевидно, чтобы «исправить» невосприимчивый пользовательский интерфейс. Например, что произойдет, если пользователь дважды щелкнет кнопку, но делает это достаточно медленно, чтобы Windows обнаружила его как отдельный клик? Первый клик может начать длительную процедуру, в течение которой вы вызываете A.P.. Второй щелчок считывается из очереди сообщений, которая начинается с той же процедуры. Теперь второй вызов процедуры выполняется (со своими вызовами A.P.) и в итоге заканчивается, и выполнение возвращается к первому вызову. В зависимости от того, что вы делаете в этой процедуре, вы вполне можете испортить дескрипторы и контексты устройств и т. Д.Сильная рекомендация говорила с дружеским намерением: избавиться от этих звонков: A.P.

+0

Наконец-то я получил доступ к информации о процессе с информацией GDI ... добавил к вопросу. –

+0

Я вызываю Application.ProcessMessages во многих местах, где у меня длинный код. –

+0

@ Рикардо Это не хорошо! Вам нужно удалить эти вызовы A.P. –

Смежные вопросы