【问题标题】:Combining Log4Delphi and jcl debug结合 Log4Delphi 和 jcl 调试
【发布时间】:2013-10-18 12:50:33
【问题描述】:

目前,我正在测试用于 Delphi XE 3 的各种日志框架。由于使用 Log4Delphi 在现有程序中的实现问题最少,我目前正在尝试为我的日志消息获取更多信息。现在我想要的是附加信息,如方法名称和代码行。我已经发现绝地代码库的调试功能可能会提供此类数据。可悲的是,我无法弄清楚如何让它按照我想要的方式工作。

因为我目前正在使用这个功能:

function CurrentFunctionName: string;
begin
  Result := jcldebug.getlocationInfoStr(Caller(1));
end;

但是,虽然我发现的代码示例提供了这样的数据:

[004223A7] jcldebugtest.SomeProcedure (Line 10, "jcldebugtest.dpr")

当我尝试在我的程序中使用它时获得的所有数据如下所示:

(00E8EF63) [0128FF63] 

我不完全理解这种行为的原因,所以如果有人能向我解释如何正确地做到这一点以及我的错误/误解在哪里,那就太好了。

【问题讨论】:

  • GetLocationInfoStr 的帮助页面:wiki.delphi-jedi.org/wiki/JCL_Help:GetLocationInfoStr 状态:If location info was found, the function returns the formatted info string, otherwise it returns a string formatted as [Address]. 这意味着它没有找到任何位置信息。
  • 看起来您要么没有在项目中启用调试信息,要么将其存储在 jcldebug 找不到的位置。

标签: delphi logging delphi-xe3


【解决方案1】:

您需要进入Project->Options->Linker,并打开Detailed 映射文件,然后构建(而不是编译!)您的项目。地图文件信息是从原始地址转换为代码中特定位置所必需的。

您可以使用位于JCL\Examples\Windows\Debug\SourceLoc 文件夹中的示例对此进行测试。如果您构建并运行 SourceLocExample.dpr,单击“Caller()”、“地址查找”或“堆栈转储”按钮将仅返回内存地址。然后按照上面的说明启用详细映射文件,从 IDE 的菜单中执行 Project->Build,然后再次运行示例,单击相同的按钮并比较输出。

然后,您可以(可选地)使用Project->JCL Debug expert 将调试信息嵌入到您的可执行文件中,而不是将其作为需要分发的单独文件提供。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-22
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多