Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Отладка Сбоев в Delphi: Проблемы с UnicodeString/AnsiString и Использование FastMM в FullDebugMode

Delphi , Рабочий стол , Рабочий стол

Вопрос, поднятый в данной статье, касается проблемы, с которой столкнулись разработчики, использующие компоненты Delphi для работы с терминальными серверами. Проблема заключается в том, что при вызове функции WTSOpenServer в бесконечном цикле происходит сбой программы на компьютерах с Windows 7, причем только в версиях Delphi 2009 и 2010. Сбой трудно отлаживаем, так как происходит неожиданно и не поддается анализу с помощью стандартных средств отладки.

Проверка и тестирование кода

Разработчики провели ряд тестов, чтобы выяснить причину сбоев:

  • Проверка, что параметр pServername не изменяется функцией WTSOpenServer.
  • Тестирование кода с передачей nil в качестве параметра, что позволяет работать с локальной машиной.
  • Проверка работы с удаленным сервером, localhost или с использованием пустой строки в качестве pServerName.
  • Тестирование на различных версиях Delphi (2009 и 2010).
  • Сравнение поведения кода в Delphi и Visual Studio (C++), где сбой не наблюдается.

Дополнительно было предпринято:

  • Изучение ассемблерного кода вызова WTSOpenServer.
  • Удаление вызова WTSCloseServer.
  • Тестирование на 64-битной и 32-битной версиях Windows 7.
  • Использование внешнего отладчика для отладки программы.
  • Добавление обработчика векторных исключений AddVectoredExceptionHandler, что позволило обнаружить EXCEPTION_ACCESS_VIOLATION, но стеки были повреждены и определить источник сбоя не удалось.

Альтернативные гипотезы

Разработчики также рассматривали альтернативные причины:

  • Возможные проблемы с UnicodeString/AnsiString.
  • Проблемы, связанные с переходом на Delphi 2009, где могут возникать ошибки, связанные с предположением, что Char имеет размер 1 байт.

Подтвержденный ответ

Предложено использовать FastMM в режиме FullDebugMode для отладки. Это может указывать на ошибку в коде, связанную с перезаписью памяти или переполнением буфера. В частности, предположение о том, что выделение памяти может быть слишком маленьким для операций с UnicodeString или String, и что это может привести к сбою или нарушению доступа.

Использование FastMM в FullDebugMode позволяет отслеживать перезаписи памяти, что облегчает поиск ошибки. Если приложение перезаписывает память, то при попытке освободить выделенную память FastMM выдаст исключение, указывая на место выделения, что упрощает отладку.

Пример кода

uses JwaWtsApi32;
procedure TForm7.FormCreate(Sender: TObject);
var
  hServer: DWORD;
begin
  while true do
  begin
      hServer := WTSOpenServer(PChar('server'));
      WTSCloseServer(hServer);
      hServer := 0;
  end;
end;

Заключение

Разработчикам было рекомендовано провести дополнительные тесты с использованием FastMM в FullDebugMode, чтобы выявить возможную ошибку в коде. В случае с одним из пользователей, проблема оказалась связана с антивирусным ПО, которое внедряло свои библиотеки в работу системы, что и привело к сбоям. Отключение этих библик не только помогло устранить проблему, но и подтвердило предположение об ошибке в сторонних библиотеках.

Таким образом, разработчики, сталкивающиеся с неожиданными сбоями при работе с функциями терминальных серверов в Delphi, могут обратить внимание на возможные проблемы с управлением памятью и использовать такие инструменты, как FastMM в режиме FullDebugMode для их отладки.

Создано по материалам из источника по ссылке.

Вопрос затрагивает проблему отладки сбоев в программе на Delphi при работе с функциями терминальных серверов, особенно в версии Delphi 2009 и 2010 на операционной системе Windows 7, и рассматривает использование FastMM в режиме FullDebugMode для локализа


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


:: Главная :: Рабочий стол ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 19:54:07/0.003899097442627/0