Проблема с нежелательными диалогами исключений в Delphi

У меня проблема с диалоговыми окнами исключений: я использую RemObjects SDK для клиент-серверного приложения. Когда возникает проблема с подключением, клиент запускает «простые» диалоги исключений, просто текст и кнопку. Когда я запускаю приложение на своей машине разработки, диалоговые окна исключений не отображаются (как и ожидалось). Текст в диалоговом окне прост: «Тайм-аут», «В соединении отказано» и т. Д. Такие исключения возникают И обрабатываются внутри кода RemObjects внутри рабочего потока. Я также активировал EurekaLog, но это совсем не помогает.

Есть идеи, почему он работает на машине разработки, но не на «ванильной» клиентской машине? Как я могу избавиться от всех всплывающих окон с исключениями?

Я следую

  • Delphi 2007
  • RemObjects SDK "Зима 2009"
  • EurekaLog 6.0.22

person Harriv    schedule 01.03.2010    source источник
comment
Наблюдается ли у вас такое же поведение на своей машине разработки, когда вы запускаете ее в отладчике и когда запускаете ее в автономном режиме?   -  person Scott W    schedule 01.03.2010
comment
@Scott W: Такое же поведение при работе внутри Delphi и из командной строки.   -  person Harriv    schedule 01.03.2010


Ответы (4)


Я бы сделал следующее:

  • скомпилируйте свое приложение с информацией об отладке (файл .map) и скопируйте их клиенту
  • запустите свое приложение на "обычном" клиентском компьютере
  • подождите, пока не появится всплывающее окно
  • запустите мой профилировщик выборки: http://asmprofiler.googlecode.com/files/AsmProfiler_Sampling%20v1.0.6.12.zip
  • используйте кнопку "Стековое представление процесса" и выберите свое приложение в списке процессов.
  • дважды щелкните или нажмите кнопку "Live view" http://code.google.com/p/asmprofiler/wiki/ProcessStackViewer
  • теперь вы можете просмотреть стек основного потока, поэтому вы должны увидеть, откуда появляется всплывающее окно ...

Удачи!

person André    schedule 01.03.2010

Вам нужно будет выполнить некоторую отладку. Если он обрабатывается внутри рабочего потока, он не будет вызывать этот диалог. Что-то происходит, что заставляет объекты исключения перемещаться на более высокий уровень стека вызовов.

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

person Mason Wheeler    schedule 01.03.2010
comment
Я работаю с клиентскими машинами, поэтому у меня есть все, что нужно для решения этой проблемы, просто не знаю, как это сделать :) - person Harriv; 01.03.2010

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

person Remko    schedule 02.03.2010

Вы можете настроить IDE на игнорирование этих исключений. Вы можете проверить это, просмотрев параметры отладчика. См. Раздел «Инструменты / Параметры меню», а затем - «Параметры отладчика / Исключения языка».

Если это так, вы можете снять флажок, чтобы вернуть исключения на машину разработки, а затем использовать try / except для программной обработки исключений.

person dcraggs    schedule 03.03.2010