相关疑难解决方法(0)

如何找出Delphi函数可能抛出的异常?

有没有一种好方法可以找出程序/函数可以在Delphi中引发哪些异常(包括它称为过程/函数)?

在Java中,您始终必须声明可以抛出哪些异常,但在Delphi中并非如此,这可能导致未处理的异常.

是否有任何代码分析工具可以检测未处理的异常?

delphi exception-handling

12
推荐指数
4
解决办法
8849
查看次数

如何从处理/捕获的异常中获取堆栈跟踪并将其转储到跟踪日志中

我们使用Bob Swart的白皮书作为指南,创建了Datasnap服务(使用Delphi XE).它工作正常,我们已将其部署到我们的测试服务器.

现在出现问题,当我们执行大量请求(通过JMeter)时,会发生某种内存损坏.有些请求成功,有些请求因访问冲突而失败.最后,它变得如此腐败,以至于对我们的OWN(而不是DSAdmin)方法的每个请求都会响应访问冲突.

但是,我无法获取堆栈跟踪以获取更多信息,因为在处理请求时已经捕获到异常.

如果我使用此应用程序的VCL版本进行大量测试,它仍然可以正常工作.

有没有人知道这可能是什么,或遇到同样的问题,或者你能帮助我从一个被捕获的异常中获取堆栈跟踪(在别人的代码中,我无法编辑)?

提前致谢.

delphi datasnap delphi-xe

4
推荐指数
1
解决办法
6423
查看次数

Delphi可以告诉我抛出异常的例程的名称吗?

我知道如何在delphi中捕获异常(try..except/finally和e.message)但我想知道是否存在异常处理机制,它可以引发异常以及引发异常的例程的名称.通过例子

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;
Run Code Online (Sandbox Code Playgroud)

我将收到一条消息/对象/任何指示我'bla'中出现错误'x'的内容.

我知道关于madexcept,有另一种方法来捕捉异常吗?

我正在使用Delphi 7.解决方案也可能适用于其他Delphi版本.

delphi exception-handling exception delphi-7

3
推荐指数
4
解决办法
2873
查看次数

获取上一个/调用方法的名称

我目前正在尝试缩短我的日志记录命令,因为在其当前形式中,可能很难创建一种方法,允许在现有项目中轻松有效地实现.我当前的标准日志命令如下所示:

logger.Fatal(CurrentFunctionName+' Grid beschriften:');
Run Code Online (Sandbox Code Playgroud)

这是一个示例,其输出如下:

2013 10 18 15.33.17.383 [FATAL] # [01290458] UTestMain.TFormMainTest.TitelGridRows (Line 229, "UPTestMain.pas") # Actual Log Message
Run Code Online (Sandbox Code Playgroud)

所以我考虑将基于jcl的CurrentFunctionName方法(jcldebug.GetLocationInfoStr(Caller(1)))直接放入记录器的单元中.它起作用但由于它的预期功能,它只提供了有关记录仪单元内方法的信息.这就是我认为可能的方式,但我还没有发现正确的方法:

    procedure TLogger.Fatal(const AMsg : String);
begin
   log(TLevelUnit.FATAL,  PreviousFunctionName + AMsg);
end;
Run Code Online (Sandbox Code Playgroud)

因此,我不想获取当前方法的名称,而是获取此logging-command调用所在的前一个方法的名称.我认为有足够的调试信息这应该是可能的,但目前我无法看到如何使这工作.

delphi debugging logging delphi-xe3

3
推荐指数
1
解决办法
1550
查看次数