我使用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 文件,因为它更易于维护。
还有一些对跟踪有用的例程,例如:
function ProcByLevel(Level : Integer) : String;
这使您可以确定在调用堆栈“N”个级别中回顾的当前方法/过程名称。