Clarion Application Monitor
Introduction Installation Usage Configuration Example Output Known Issues Version History Download
Monitor это 32-разрядная программа трассировки, предназначенная для использования с вашими 32-разрядными приложениями. Она использует Win32 debug API для запуска вашего приложения используя CreateProcess (с флагом Debug_Process) и затем управляет приложением используя функции WaitForDebugEvent и ContinueDebugEvent таким же способом как и 32-разрядный отладчик Clarion.
Она записывает все исключения (exceptions), которые генерирует ваша программа, и (опционально) может записывать все загрузки и выгрузки DLL, создания/завершения потоков (treads) и отлаживать строковый вывод.
Так как Monitor всегда записывает все исключения, каждый его протокол трассировки всегда включает как минимум одно исключение контрольного останова (breakpoint). Это происходит из за того что запуск приложения с флагом Debug_Process всегда генерирует breakpoint когда достигается первая строка исполняемого кода. Отладчики могут ничего не делать с этим (это опция "Stop at first line of source" в 32-разрядном отладчике Clarion), но Monitor всегда показывает breakpoint.
В противоположность отладчику Clarion, который может отлаживать при возникновении ошибки, Monitor (пока) не умеет трассировать программу, которая уже запущена.
Разархивируйте файл MONITOR.ZIP в каталог где будет трассироваться приложение.
Monitor будет работать только под 32-разрядной операционной системой (Win9x, WinNT, Win2000). Если он не может определить тип OS, или при запуске под Win32s, то он выводит сообщение об ошибке и не запускается. Monitor протестирован под Windows NT4 SP5, и Windows 98
Вы должны запустить Monitor набрав "monitor" в командной строке. Monitor, его конфигурационный файл и трассируемая программа должны находиться в одном каталоге.
Можно передать имя трассируемой программы в командной строке ("MONITOR myapp.exe"). Если имя программы в командной строке не задано, Monitor выведет приглашение для ввода имени программы.
Monitor трассирует только 32-разрядные приложения Windows. При попытки трассировки приложений другого типа (32-разрядных приложений OS/2, или 16-разрядных Windows) он выведет сообщение об ошибке и не запустит программу.
Monitor конфигурируется при помощи файла MONITOR.INI
Поддерживаются следующие настройки для вывода (в секции "[Output]"). Если обе настроки OutputToFile и OutputDebugString установлены в "N", Monitor остановится с сообщением об ошибке и не запустит программу .
| OutputToFile=Y | Выводить отладочную информацию в файл MONITOR.DBG, который будет в том же каталоге что и Monitor. |
| OutputDebugString=Y | Использовать функцию Win32 API OutputDebugString для вывода отладочной информации. Это быстрее чем использование опции OutputToFile, но означает что для просмотра вывода потребуется другая утилита (такая как DBWin32 ). |
Поддерживаются следующие настройки наблюдения (в разделе "[Watch]"):
| DLL_Load=Y DLL_Unload=Y | Отслеживать
загрузку и выгрузку DLL, используемых приложением.
Использование хендла файла в структуре Load_DLL_Debug_Info
выходит в файле формата PE и выглядит в разделе
".edata", как имя DLL. Если находится имя, то оно добавляется в queue, основанной на адресе загрузки DLL - когда DLL выгружается, используется адрес загрузки для вывода имени DLL в queue, так что вы знаете также какой DLL выгружается. |
| Create_Process=Y Process_Exit=Y | Отслеживать создание и завершение процесса. Обычно в Clarion приложение имеется один процесс: собственно выполнение приложения. |
| Create_Thread=Y Thread_Exit=Y | Отслеживать создание и завершение потоков (threads). Приложение может иметь до 64 потоков запущенных одновременно. |
| OutputDebugString=Y | Отслеживать любые вызовы функции Win32 API OutputDebugString в вашем приложении. Эта функция часто используется для вывода отладочной информации во время разработки приложения. |
отладочная информация всегда выводится в одном и том же формате не зависимо от того идет ли вывод в файл или в функцию Win32 API OutputDebugString.
Каждое новое событие выводит время возникновения события (используя Clarion @T4 picture), и raw time во внутреннем формате Clarion. Первая строка также показывает дату (используя Clarion @D4 picture).
Для каждого события также выводится вся информация, хранящаяся в структуре Debug_Event. С этими строками не делается никаких преобразований, так что вы знаете что поля выводятся точно так как они возникают. Дополнительная информация, которую я добавляю - это только имя DLL в событии "Load DLL". По умолчанию Win32 API не предоставляет никакого способа получения имени DLL кроме прохождения через файла в формате PE, указанного хендлом файла.
11:13:45 [4042590]
September 3, 1999
11:13:46 [4042605]
Create process
Handle to image file = 100 [0x64]
Handle to process = 80 [0x50]
Handle to thread = 116 [0x74]
Base of image = 4194304 [0x400000]
Offset to debug info = 0 [0x0]
Size of debug info = 0 [0x0]
Thread local base ptr = 2147344384 [0x7FFDE000]
Start address = 4261848 [0x4107D8]
Image name ptr = 0 [0x0]
Unicode flag = 1
11:13:46 [4042634]
Load DLL
Handle to DLL = 176 [0xB0]
Base address ptr = 2012610560 [0x77F60000]
Offset to debug info = 0 [0x0]
Size of debug info = 6997 [0x1B55]
Image name ptr = 2147344404 [0x7FFDE014]
Image name *ptr = 0 [0x0]
Unicode flag = 1
DLL name = ntdll.dll
11:13:49 [4042989]
Exception - A breakpoint was encountered.
First time encountered? Yes
Continuable exception? Yes
Associated record ptr = 0 [0x0]
Exception address = 2012701340 [0x77F7629C]
Number of parameters = 3 [0x3]
Parameter 1 = 0 [0x0]
Parameter 2 = 9 [0x9]
Parameter 3 = 0 [0x0]
11:13:55 [4043559]
Exit process
Exit code = 0
Если DLL ничего не экспортирует, то ее имя не будет показано в событии "Load DLL". DLL-и которые ничего не экспортируют не содержат раздела ".edata", а эта секция содержит имя DLL.
Включение трассировки загрузки DLL замедляет загрузку и выполнение вашего приложения. Если вы не знаете что приложение выполняется под Monitor-ом, то вы можете подумать что оно не работает из-за того что оно (может) слишком долго загружать все DLL-и и выводить всю отладочную информацию. Если вам не нужно определять какие DLL-и загружает ваше приложение, то я предполагаю что нужно запретить опцию DLL_Load из-за соображений быстродействия.
| 9Sep99 | 1.01 | Fixed bug which caused Monitor to GPF under Win9x. Some fields are reported as negative numbers (even though I've checked all the type definitions twice), and it was GPFing when trying to convert those fields into hex. |
| 8Sep99 | 1.00 | Initial upload |
Back to my home page, or send me mail at paula@attglobal.net
Last update 9Sep99