gpt4 book ai didi

delphi - 需要一种方法来定期记录调用的每个方法/过程/函数的调用堆栈/堆栈跟踪

转载 作者:行者123 更新时间:2023-12-03 14:36:10 25 4
gpt4 key购买 nike

我正在开发一个非常大的应用程序,我想定期记录整个调用堆栈,直到当前执行点(不是异常)。这里的想法是,我想要一张准确的代码路径图,引导我到达现在的位置。我一直在使用 madExcept,使用 jclDebug 进行工具处理,虽然我可以获得一些调用堆栈,但我似乎无法将应用程序中进行的每个方法/过程/函数调用显示在日志中。

我已经在项目上启用了堆栈帧、调试信息等。我什至尝试打开未包含在调用堆栈中的各个方法上的堆栈帧,但无济于事。

我想做的事情可能吗?我真的试图避免在数百万行代码中添加日志代码来记录代码路径。

最佳答案

我使用 JCL 中的 JCLDebug就是为了做到这一点。

以下代码将获取当前位置的调用堆栈并将其作为字符串返回。

function GetCurrentStack: string;
var
stackList: TJclStackInfoList; //JclDebug.pas
sl: TStringList;
begin
stackList := JclCreateStackList(False, 0, Caller(0, False));
sl := TStringList.Create;
stackList.AddToStrings(sl, True, True, True, True);
Result := sl.Text;
sl.Free;
stacklist.Free;
end;

要使其按预期工作,您必须启用 JCL 调试信息受支持的方法之一,例如:

  • Turbo 调试器信息
  • JDBG 文件(从 MAP 文件生成)
  • JBDG 文件插入到 EXE 中。

我最近在插入 EXE 的 JDBG 文件之间切换为仅传送外部 JDBG 文件,因为这样更容易维护。

还有一些对于跟踪很有用的例程,例如:

函数 ProcByLevel(Level : Integer) : String;

这允许您在调用堆栈“N”个级别中回溯来确定当前方法/过程名称。

关于delphi - 需要一种方法来定期记录调用的每个方法/过程/函数的调用堆栈/堆栈跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2326980/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com