Контекст:
Для отладки и тестирования приложения, которое использует чтение и запись файлов на диске, необходима структура, которая может перехватывать и вызывать задержку системных вызовов для открытия, чтения и записи файла.
Алгоритм:
МАК:
Используемая технология:
С помощью 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, обходные пути.
Удачного тестирования :)