结合Log4Delphi和jcl调试

时间:2013-10-18 12:50:33

标签: delphi logging delphi-xe3

目前我正在测试各种日志框架,以便在Delphi XE 3中使用。由于使用Log4Delphi在现有程序中实现的问题最少,我现在正在尝试为我的logmessages获取更多信息。现在我想要的是方法名称和代码行等附加信息。我已经发现Jedi Code Librarys的调试功能可能会提供这样的数据。可悲的是,我无法找到热点,让我按照我想要的方式工作。

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

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

但是我发现的代码示例提供的数据如下:

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

当我尝试在我的程序中使用它时,我得到的所有数据都是这样的:

(00E8EF63) [0128FF63] 

我不完全理解这种行为的原因,所以如果有人能够向我解释如何正确地做到这一点并且我的错误/误解位于何处,那将是非常好的。

1 个答案:

答案 0 :(得分:3)

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

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

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