首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Delphi能告诉我抛出异常的例程的名称吗?

Delphi能告诉我抛出异常的例程的名称吗?
EN

Stack Overflow用户
提问于 2010-11-11 00:33:44
回答 7查看 3.4K关注 0票数 3

我知道如何在delphi中捕获异常(尝试..例外/最终和e.message),但我想知道是否存在可以引发异常的异常处理机制,以及引发异常的例程的名称。举例说明

代码语言:javascript
复制
procedure/function bla();//this can be in a unit/class
begin
 code....
 an error  is raised here -> inside or not of an try-except/finally block 
end;

我会收到一条消息/对象/任何东西,表明错误'x‘是在'bla’中引发的。

我知道madexcept,还有另一种方法来捕获异常吗?

我使用的是Delphi 7。解决方案可能也适用于其他Delphi版本。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-11-11 01:59:41

您可以使用JclDebug.pas单元中的ProcByLevel函数,该单元是JCL库的一部分。

在使用之前,您必须从Ide菜单的tools->jcl Options激活选项'Insert JDBG data into the binary'

然后你可以这样使用它

代码语言:javascript
复制
Uses
 JclDebug;

procedure TForm18.Button1Click(Sender: TObject);
begin
    try

       raise  Exception.Create('Hello from '+ProcByLevel(0));
    except
         on e : Exception do
         ShowMessage(e.Message);
    end;
end;

结果是这样的

票数 8
EN

Stack Overflow用户

发布于 2010-11-11 02:36:45

与MadExcept不相上下,EurekaLog也是一个优秀的工具。

票数 7
EN

Stack Overflow用户

发布于 2010-11-11 01:18:30

像MadExcept这样的库将元数据添加到应用程序中,以便它可以将地址映射到单元和函数名称。

Delphi不会自动执行此操作,也不会提供直接执行此操作的方法,它只提供引发异常的地址。

执行您想要的操作的一些替代方法如下:

  • FastMM
  • Jedi
  • MadExcept

有了这些,您就可以在发生异常时获得调用堆栈的快照。

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

https://stackoverflow.com/questions/4146681

复制
相关文章

相似问题

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