Отладка приложений


         

Сделаю несколько коротких замечаний относительно


LPCSTR IpName );

HANDLE DD_CreateEventW ( LPSECURITY_ATTRIBUTES IpEventAttributes,

BOOL bManualReset ,

 BOOL blnitialState , 

LPCWSTR IpName ); 

HANDLE DD_OpenEventA ( DWORD dwDesiredAccess,

BOOL blnheritHandle , 

LPCSTR IpName );

HANDLE DDjOpenEventW ( DWORD dwDesiredAccess,

BOOL blnheritHandle , LPCWSTR IpName ); 

BOOL DD_PulseEvent ( HANDLE hEvent); 

BOOL DD_ResetEvent ( HANDLE hEvent); 

BOOL DD_SetEvent ( HANDLE hEvent); 

#endif // _DD_FUNCS_H

Сделаю несколько коротких замечаний относительно утилиты DeadlockDetection. Во-первых, DeadlpckDetection всегда активна в приложении, даже если вы откладываете ее регистрацию. Вместо динамических подключений и отключений, я оставляю функции подключенными, а для того чтобы определить, как подключение должно себя вести, просматриваю некоторые внутренние флажки. Сохранение всех функций подключенными облегчает переключение регистрации различных функций во время выполнения, но это добавляет и некоторые издержки. Было интуитивно ясно, что организация подключений и отключений "на лету" привела бы к увеличению количества ошибок в коде DeadlockDetection.

Во-вторых, DeadlockDetection подключает функции вне DLL, когда подключается к программе через функцию LoadLibrary. Однако она может получить управление только после того, как выполнилась функция DllMain этой DLL, поэтому если какие-нибудь объекты синхронизации создаются или используются во время выполнения DllMain, то DeadlockDetection может пропустить их.

В-третьих, DeadlockDetection подключает также функции GetProcAddress и ExitProcess. Подключение GetProcAddress происходит в том случае, если ваша программа вызывает GetProcAddress, чтобы найти (во время выполнения) метод синхронизации.

Я подключаю ExitProcess, потому что, когда приложение заканчивается, необходимо отключить и завершить DeadlockDetection так, чтобы она не завершилась аварийно или не подвесила вашу программу. Поскольку не существует никакого способа управлять порядком разгрузки DLL во время завершения программы, можно легко попасть в ситуации, в которых DLL, связанная с DeadlockDetection (например, DeadDetExt), была бы разгружена раньше самой DeadlockDetection.К счастью, очень немногие разработчики организуют основное многопоточное управление после того, как приложение вызывает функцию ExitProcess.

Наконец, на сопровождающем компакт-диске вместе с DeadlockDetection находятся некоторые тестовые программы. Все они включены в главное рабочее пространство утилиты DeadlockDetection и скомпонованы с библиотекой DEADLOCKDETECTION.DLL так, что их можно использовать для посмотра работы DeadlockDetection.



Содержание  Назад  Вперед