目前,我正在测试在Delphi XE 3中使用的各种日志记录框架。由于使用Log4Delphi使得在实现现有程序方面的问题最少,因此,我目前正在尝试获取有关Logmessage的其他信息。现在,我想要的是其他信息,例如方法名称和代码行。我已经发现Jedi代码库的调试功能可能会提供此类数据。可悲的是,我无法弄清楚要使它按我想要的方式工作。
因为它是我目前正在使用此功能:
function CurrentFunctionName: string;
begin
Result := jcldebug.getlocationInfoStr(Caller(1));
end;
但是,尽管我发现的代码示例提供了以下数据:
[004223A7] jcldebugtest.SomeProcedure (Line 10, "jcldebugtest.dpr")
当我尝试在程序中使用它时,我获得的所有数据如下所示:
(00E8EF63) [0128FF63]
我不完全了解这种行为的原因,因此,如果有人可以向我解释如何正确执行此操作以及我的错误/误解所在的位置,那将非常好。
最佳答案
您需要进入Project->Options->Linker
,打开Detailed
映射文件,然后构建(而不是编译!)您的项目。映射文件信息是将原始地址转换为代码中特定位置所必需的。
您可以使用JCL\Examples\Windows\Debug\SourceLoc
文件夹中的示例对此进行测试。如果生成并运行SourceLocExample.dpr,则单击“ Caller()”,“地址查找”或“堆栈转储”按钮将仅返回内存地址。然后按照上述说明启用详细的映射文件,从IDE的菜单中执行Project->Build
,然后再次运行示例,单击相同的按钮并比较输出。
然后,您可以(可选)使用Project->JCL Debug expert
将调试信息嵌入到可执行文件中,而不必将其作为需要分发的单独文件提供。
关于delphi - 结合Log4Delphi和jcl调试,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19450140/