Как я могу использовать отчеты об утечке памяти FastMM4 в Сервисе? - PullRequest
3 голосов
/ 01 июня 2009

Использует ли тот же метод, который FastMM4 для Delphi, отчет об утечках памяти для подробного файла, если приложение работает как служба? Конечно, лучшая практика заключается в том, чтобы сначала написать модульные тесты и простое автономное приложение и найти утечки там, вне среды обслуживания.

Редактировать: и есть http://blog.delphi -jedi.net / 2008/05/07 / debugging-services-an-easy-way /

Ответы [ 4 ]

4 голосов
/ 02 июня 2009

Как отмечает Ларс Труйенс, для записи в файл журнала требуются привилегии файловой системы. Учетная запись локальной системы по умолчанию (т.е. когда вы не устанавливаете учетную запись явно или не входите в свой код) имеет полный доступ к локальной файловой системе, но не имеет доступа к сети по умолчанию.

FWIW - я обычно разрабатываю свои сервисы как обычные приложения Windows, пока основная часть логики не заработает и не станет стабильной. Использование библиотеки, такой как SvCom, позволяет вам запускать ваши сервисы как обычное настольное приложение или как сервис без каких-либо изменений кода.

2 голосов
/ 01 июня 2009

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

0 голосов
/ 04 июня 2009

Хорошо. Я обнаружил еще одну причину, по которой иногда вы не видите никаких выходных данных, файла журнала или окна сообщения ......

Если вы не сделаете никакой ошибки, она не создаст никакого вывода.

Итак, чтобы проверить, работает ли FASTMM478 преднамеренно, сделайте ошибку в вашей программе, например:

// Создать и НЕ уничтожить testToMakeError: = TStringList.Create; для I: = от 0 до 100 делаю testToMakeError.Add ( 'Foobar');

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

Марк

0 голосов
/ 03 июня 2009

У меня сейчас такой же вызов. Я пробовал это, но это не работает, по крайней мере, пока для меня. Для этой учетной записи достаточно прав, так как служба может написать собственный проприетарный лог-файл. Я включил FullDebugMode и добавил DLL, я включил LogMemoryLeakDetailToFile, оба с помощью параметров IDE. В коде я вижу, что компилятор видит правильные области, например, когда я провоцирую ошибку, компилятор сообщает об этом. Также я не могу отладить код FastMM. Если я ставлю точку останова, она игнорируется. Я обыскал все свои локальные жесткие диски, на которых этот отчет мог быть пропущен, его не найти. Я запускаю и останавливаю службу из «Администрирование-Сервисы», все идет хорошо, запускается, но отчета нет. Если я делаю то же самое с обычным исполняемым файлом, все идет хорошо. Я использую FastMM478 и Delphi2007.

Марк

...