Подтвердить что ты не робот

Методы и инструменты для отладки проблем на удаленных машинах?

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

Я начал использовать EurekaLog (фантастический!) и SmartInspect. Оба этих инструмента значительно помогли, но мне все еще трудно поймать некоторые проблемы.

Я только что купил "Отладка" Дэвида Агана (и ждет его прибытия).

Существуют ли какие-либо другие инструменты или методы, специфичные для Delphi, которые помогут с улавливанием этих трудностей для поиска удаленных проблем? Виды проблем, которые мне трудно найти, - это те, которые не вызывают исключений или имеют ясную причину. EurekaLog ловит исключения, а SmartInspect довольно хорош, как только у меня есть теория для проверки. Но в некоторых случаях это случайная авария, и есть несколько тысяч строк кода, которые могут быть ошибочными. Как сузить до основной причины?

4b9b3361

Ответ 1

MadExcept - это то, что я использую, и это потрясающе. Я также использовал EurekaLog и нашел функциональность почти точно идентичной, за исключением того, что у меня больше опыта и времени с использованием MadExcept. он бесплатный для некоммерческого использования и по разумной цене для коммерческого использования. Обновление: MadExcept 4 теперь отключен и даже поддерживает 64-разрядные приложения Delphi XE2, а также проверяет утечку памяти.

Когда ничто не взрывается, я полагаюсь на интенсивное использование журнала трассировки. У меня есть функция TraceMessage (целочисленная, строковая), которую я вызываю во всех моих приложениях, а когда у кого-то проблемы, я получаю их, чтобы щелкнуть элемент меню, который отображает уровень отладочной трассировки до самого подробного уровня; это дает мне полную историю всего моего приложения, и это помогло мне даже больше, чем madExcept, чтобы решить проблемы на сайтах клиентов. Клиенты получают сбой, и этот отчет о сбоях, отправленный makexcept, содержит файл журнала (созданный моим приложением), который подключается автоматически. Я считаю, что вы можете сделать это в равной степени с madExcept и EurekaLog. Если вам нужна система регистрации, вы можете загрузить Log4D, или вы можете написать свой собственный, это довольно просто.

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

Для получения справки о проблемах с кучей, узнайте больше о вариантах отладки fastMM (полная версия).

И вы не должны забывать, что сам Delphi поддерживает удаленную отладку, если вы можете воспроизвести сбой на машинах вашего офиса, которые не имеют установленного delphi, использовать удаленную отладку через офисную сеть вместо установки полной установки RAD Studio на этой другой машине в вашей работе. Вы также можете использовать удаленную отладку для подключения к компьютеру клиентского ПК через Интернет, но я еще не пробовал удаленную отладку через Интернет, поэтому я не могу сказать, отлично ли работает он в Интернете или нет. Я знаю, что, поскольку удаленная отладка не поддерживает автоматическое развертывание EXE файла, который вы создали (вам нужно сделать эту часть самостоятельно), удаленная отладка через Интернет, на клиентский ПК больше работает.

Вы также можете найти множество проблем, исправив все свои подсказки и предупреждения, а затем перейдя через CodeHealer или Pascal Analyzer (PAL) из Peganza. Эти инструменты статического анализа могут помочь вам найти реальные проблемы с кодом.

Если производительность и использование памяти - ваши проблемы, получите полную версию AQTime и используйте ее для профилирования и просмотра вашей системы. Это поможет вам исправить утечку памяти и понять поведение приложения и время использования приложения, а не просто утечки, но узкие места для использования памяти и процессора. Некоторые из этих узких мест также могут быть источником некоторых нечетных проблем. Я даже использовал AQTime, чтобы помочь мне найти взаимоблокировки, поскольку он может генерировать следы выполнения, которые могут помочь мне разобраться, какой код работает, и найти тупики. Обновление: AQTime не устанавливается на машинах, отличных от вашей основной машины, не нарушая недавно измененные условия лицензии для AQTime. Эти условия никогда не были такими ограничительными в старые добрые времена.

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

Ответ 2

Один из лучших способов - использовать Remote Debugger, который поставляется с Delphi, поэтому вы можете отлаживать непосредственно приложение, запущенное на удаленной машине. Удаленный отладчик несколько неисправен в некоторых версиях Delphi и требует внимательно следовать инструкциям, чтобы заставить его работать, но при необходимости это инструмент для рассмотрения. Также проверьте, есть ли обновления для вашей версии, они могут появиться в отдельном установщике для развертывания в системах "remote". В противном случае сначала установите удаленный отладчик, чем проверьте, установлены ли файлы с более новыми версиями в локальной установке и копия на удаленной машине.

Ответ 3

CodeSite очень помог мне в этих ситуациях. Поскольку XE он связан с Delphi.

Ответ 4

Запись - это ключ, в этом вопросе.

Взгляните на наш класс TSynLog, доступный в нашей Open Source SynCommons library.

У него есть функции JCL Debug/MadExcept, с некоторыми дополнительными (например, профилирование на стороне клиента и ведение журнала):

  • запись с набором уровней;
  • быстрые, невыполненные накладные расходы;
  • может загружать символы файла .map, которые будут использоваться при регистрации;
  • сжатие .map в двоичный .mab(900 КБ → 70 КБ);
  • включение .map/.mab в .exe;
  • чтение внешней .map для добавления имен объектов и номеров строк в файл журнала без доступной информации .map при выполнении;
  • регистрация исключений (Delphi или исключения на низком уровне) с именами и номерами строк;
  • необязательная трассировка стека с единицами и номерами строк;
  • методы или процедура рекурсивная трассировка, с помощью Enter и автоматическое выключение с использованием интерфейсов;
  • метки времени высокого разрешения, для профилирования на стороне клиента выполнения приложения;
  • set/enumerates/TList/TPersistent/TObjectList/TContainer/dynamic array Сериализация JSON;
  • для потоковой или глобальной регистрации;
  • несколько файлов журнала в том же процессе;
  • встроенная архивная архивация (в формате zip или любом другом формате);
  • Открытый исходный код работает от Delphi 5 до XE.