首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >随时从EurekaLog获取调用堆栈

随时从EurekaLog获取调用堆栈
EN

Stack Overflow用户
提问于 2015-07-09 07:35:54
回答 2查看 1.2K关注 0票数 1

关于获取异常处理的调用堆栈有很多帖子,我们有EurekaLog来处理它,但我真的希望能够在运行时的任何时候获得堆栈,就像你在集成开发环境中放置断点一样。

遗留代码中的某个事件导致函数执行一些它不应该做的事情。虽然我们可以从调试输出中看到函数的名称,但如果没有堆栈跟踪,我们就无法知道实际调用它的是什么。这不是一个异常,我们不想在该函数中引发异常,这样EurekaLog就可以触发。

有没有办法在没有任何异常的情况下获得调用栈?

EN

回答 2

Stack Overflow用户

发布于 2015-07-09 07:45:43

您不需要引发异常来获取堆栈跟踪。调用EurekaLog的GetTracer()函数来获取TEurekaBaseStackList对象,然后调用其Build()方法来获取堆栈跟踪。以下是EurekaLog文档中提供的示例:

代码语言:javascript
复制
var
  CallStack: TEurekaBaseStackList;
begin
  CallStack := GetTracer(TracerWindows);
  try
    // Build current call stack including current execution point
    CallStack.Build(CallStack.GetCurrentInstruction);
    // ... use CallStack somehow
  finally
    FreeAndNil(CallStack);
  end;
end;
票数 7
EN

Stack Overflow用户

发布于 2019-06-11 19:21:20

help:从ECallStack单元使用GetCurrentCallStack函数:

代码语言:javascript
复制
uses
  ECallStack; // for TEurekaBaseStackList and GetCurrentCallStack

procedure TForm1.Button1Click(Sender: TObject);
var
  CallStack: TEurekaBaseStackList;
begin
  CallStack := GetCurrentCallStack;
  // You can also use other functions from ECallStack unit
  try
    Memo1.Lines.Assign(CallStack);
    // You can also use: 
    // CallStack.ToString - to convert call stack to String
    // CallStackToString(s) routines to customize textual formatting
  finally
    FreeAndNil(CallStack);
  end;
end;

附注:您可能还想考虑使用EurekaLog's logging routines

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31305666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档