如何在服务中使用FastMM4内存泄漏报告?

时间:2009-06-01 17:54:06

标签: delphi memory-leaks service fastmm

如果应用程序作为服务运行,那么Delphi的FastMM4提供的相同技术是否会将内存泄漏报告给详细文件?当然,最好的做法是首先编写单元测试和一个简单的独立应用程序,然后在服务环境之外找到泄漏。

编辑:并且有http://blog.delphi-jedi.net/2008/05/07/debugging-services-an-easy-way/

4 个答案:

答案 0 :(得分:4)

正如Lars Truijens所说,写入日志文件需要文件系统权限。默认的本地系统帐户(即,未明确设置帐户或登录代码时)具有对本地文件系统的完全访问权限,但没有默认的网络访问权限。

FWIW - 我通常将我的服务作为常规Windows应用程序开发,直到逻辑的主要部分启动并运行且稳定。使用像SvCom这样的库,您可以将服务作为常规桌面应用程序或服务运行,而无需更改任何代码。

答案 1 :(得分:2)

是的,前提是用于运行服务的帐户具有足够的权限来写入日志文件。

答案 2 :(得分:0)

我目前正面临同样的挑战。我试过这个,但它不起作用,至少到目前为止对我来说。该帐户有足够的权限,因为该服务可以编写自己的专有日志文件。我已经打开了FullDebugMode并添加了dll,我已经通过IDE选项打开了LogMemoryLeakDetailToFile。在代码中,我看到编译器可以看到正确的区域,例如,当我引发错误时,编译器会报告它。我也无法调试FastMM代码。如果我放一个断点,它会被忽略。我已经搜索了所有本地硬盘,这些报告可能会被删除,但是找不到它。我从“管理 - 服务”开始和停止服务,一切顺利,它启动,但没有报告。如果我使用普通的可执行文件执行相同操作,一切顺利。我使用的是FastMM478和Delphi2007。

马克

答案 3 :(得分:0)

好的,我发现了为什么有时候你看不到任何输出,日志文件或消息框的另一个原因......

如果您没有出现任何错误,则不会创建任何输出。

因此,要测试FASTMM478是否故意在您的程序中发生错误,如:

//创建并且不销毁   testToMakeError:= TStringList.Create;   对于我:= 0到100做     testToMakeError.Add( 'foobar的');

我只是假设我会在某个地方犯一些错误并花一天时间试图找出该程序没有给我任何反馈的原因。

马克