Контекст:

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

Алгоритм:

МАК:

Используемая технология:

С помощью dtrace мы можем перехватывать различные системные вызовы в несколько строк. Пример сценария, который мы написали:

#!/usr/sbin/dtrace -s -w

встроенная строка NAME = «имя процесса»;

syscall::read:entry, syscall::write:entry, syscall::writev:entry, syscall::readv:entry, syscall::open:entry

/(NAME == strstr(NAME, execname)) || (execname == strstr(execname, ИМЯ))/

{ printf("хахаха г,рв,в,вв"); трассировка (имя_исполнителя); холод (50000000);}

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

Окна:

Используемая технология:

  • "Объезд"

Подобно dtrace, Detour также предоставляет интерфейс для перехвата вызовов в Windows. Нас интересует перехват:

  • OpenFile(lpFileName, lpReOpenBuff, uStyle)
  • ReadFileEx(hFile, lpBuffer, nNumberOfBytesToRead, lpOverlapped, lpCompletionRoutine)
  • ReadFile(hFile, lpBuffer, nNumberOfBytesToRead, lpNumberOfBytesRead, lpOverlapped
  • WriteFileEx(hFile, lpBuffer, nNumberOfBytesToWrite, lpOverlapped, lpCompletionRoutine)
  • WriteFile(hFile, lpBuffer, nNumberOfBytesToWrite, lpNumberOfBytesWritten, lpOverlapped

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

Удачного тестирования :)