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

Отслеживание запуска приложения Delphi в отладчике и системе тестирования для улучшения отчетов об ошибках

Delphi , Программа и Интерфейс , Исследование программ

Обнаружение отладчика и систем тестирования в приложениях Delphi

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

Проблема

При разработке приложения на Delphi 2007, которое часто запускается в режиме "Release", но также может выполняться под отладчиком и в системе автоматизированного тестирования, например, SilkTest, возникает желание обнаружить, запущено ли приложение в таком режиме. Это позволит приложению знать, каким инструментом оно управляется, и в случае сбоев предоставлять эту информацию в отчетах об ошибках.

Решение

Для обнаружения отладчика можно использовать функцию IsDebuggerPresent. Она возвращает TRUE, если процесс отлаживается, и FALSE в противном случае.

function IsDebuggerPresent: Boolean; stdcall;

Также существует функция CheckRemoteDebuggerPresent, которая может идентифицировать удаленные отладчики.

function CheckRemoteDebuggerPresent(hProcess: THandle; var hDebugger: THandle): Boolean; stdcall;

Для обнаружения систем тестирования, таких как SilkTest, можно использовать другой подход. Например, можно попытаться прикрепиться к DLL, которая используется исключительно этой системой. Например, если агент Open SilkTest прикреплен к процессу, DLL Win32HookDll_x86.dll или Win32HookDll_amd64.dll будет присутствовать в процессе.

Для более точного обнаружения можно использовать функции CreateToolhelp32Snapshot, Process32First, Process32Next для получения родительского PID процесса, в котором запущено ваше приложение, и затем сравнить имя файла родительского процесса с именами известных систем тестирования.

type
  TProcessEntry32 = record
    dwSize: DWORD;
    cntUsage: DWORD;
    th32ProcessID: DWORD;
    dwFlags: DWORD;
    szExeFile: array[0..MAX_PATH-1] of Char;
    // другие поля
  end;

function CreateToolhelp32Snapshot(dwFlags: DWORD; th32ProcessID: DWORD): THandle; stdcall;
function Process32First(hSnapshot: THandle; var lpEntry: TProcessEntry32): BOOL; stdcall;
function Process32Next(hSnapshot: THandle; var lpEntry: TProcessEntry32): BOOL; stdcall;

Кроме того, можно проверить поле PEB.BeingDebugged процессного блока окружающей среды (PEB), доступ к которому осуществляется через блок окружения потока (TEB).

Пример кода

Для получения пути к исполняемому файлу родительского процесса можно использовать следующий пример кода:

procedure GetParentExePath(PID: DWORD; var sPath: string);
var
  hSnapshot: THandle;
  lpe: TProcessEntry32;
begin
  hSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, PID);
  lpe := GetProcessEntry32Size(SizeOf(TProcessEntry32));
  GetProcessEntry32(hSnapshot, 0, @lpe, SizeOf(TProcessEntry32));
  if lpe.dwFlags and PROCESS_QUERY_INFO then
    sPath := lpe.szExeFile;
  CloseHandle(hSnapshot);
end;

Этот код должен быть дополнен проверкой наличия необходимых DLL и сравнением с известными путями к файлам систем тестирования.

Заключение

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

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

Обнаружение в приложениях на Delphi того, выполняется ли оно в режиме отладчика или в системе автоматизированного тестирования, для более точного диагностирования и устранения ошибок.


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

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




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


:: Главная :: Исследование программ ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-02-10 18:03:02/0.0036771297454834/0