3

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

4

5 回答 5

4

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

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

于 2009-06-02T04:22:06.090 回答
2

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

于 2009-06-01T19:20:52.283 回答
0

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

马克

于 2009-06-03T07:03:06.530 回答
0

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

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

因此,要测试 FASTMM478 是否可以在您的程序中故意出错,例如:

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

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

马克

于 2009-06-04T10:22:43.493 回答
0
  1. 按照 FastMM 自述文件中的说明进行操作
  2. 在 FastMM4Options.inc 文件中启用 {.$define NoMessageBoxes}
  3. 在 FastMM4Options.inc 文件中禁用 {$define RequireDebuggerPresenceForLeakReporting}
  4. 安装/启动服务,停止服务后,您将在输出文件夹中获得 MyApp_MemoryManager_EventLog 文件。
于 2022-01-18T15:56:03.303 回答