и поэтому перенесена на следующие
TID Ret Addr C/R Ret Value Function & Params
0x000000F? [Ox004011AC] (R) 0x00000000 InitializeCriticalSection
0x00403110
0x000000F7 [0x00401106] (R) 0x00000290 CreateEventA 0x00000000, 1, 0,
0x004030F0 [The event name]
0x000000F? [Ox004011E9] (R) 0x00000294 CreateThread 0x00000000,
0x00000000, 0x00401000,
0x00000000, 0x00000000,
0x0012FF68
0x000000F7 [0x0040120C] (R) 0x00000298 CreateThread 0x00000000,
0x00000000, 0x004010BC,
0x00000000, 0x00000000,
0x0012FF68
0x000000FV [0x00401223] (C) EnterCriticalSection 0x00403110
0x000000F7 [0x00401223] (R) 0x00000000 EnterCriticalSection 0x00403110 0x000000F? [0x00401238] (C) WaitForSingleObject 0x00000290,
INFINITE
0x000000FF [Oxl020B973] (C) EnterCriticalSection 0xl025CE90
0x000000FF [Oxl020B973] (R) 0x00000000 EnterCriticalSection 0xl025CE90
0x00000l0C [Ox004010F3] (R) 0x000002A4 OpenEventA 0x001F0003, 0,
0x004030BC
[The event name]
Заметьте, что информация о функции и параметрах (в столбце Function & Params) в листинге 12-1 не поместилась в одной строке и поэтому перенесена на следующие строки (в этом же столбце). Информация выводится на экран в следующем порядке:
1. Идентификатор (ID) выполняющегося потока.
2. Адрес возврата, указывающий, какая из ваших функций вызвала функцию синхронизации. Используя утилиту CrashFinder, рассмотренную в главе 8, можно просмотреть адреса возвратов и узнать, как вы входили в ситуации блокировки.
3. Индикатор вызова/возврата (Call/Return — C/R), помогающий идентифицировать действия, которые происходят до и после конкретной функции.
4. Возвращаемое значение функции, если программа возвращает функции отчетов.
5. Имя функции синхронизации.
6. Список параметров функции синхронизации. В квадратных скобках указаны данные, поясняющие некоторые значения. Я ограничился здесь показом строчных значений, но можно также добавлять такие данные, как индивидуальные флажки.
Если запускаемое приложение блокируется, то для того чтобы увидеть последний вызванный элемент синхронизации, аннулируйте процесс и просмотрите файл вывода.TEXTFILEDDEXT.DLL сохраняет последнее файловое обновление, сбрасывая буферы файлов каждый раз, когда вызываются функции WaitFor*, EnterCriticalSection И TryEnterCriticalSection.
Предостережение
Если включить полную регистрацию (всех функций), то можно довольно долго генерировать чрезвычайно большой файл. Используя Visual С++-приложение MTGDI, я генерировал текстовый файл объемом в 11 Мбайт за одну или две минуты, если создавал пару потоков.
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий