有没有一种好方法可以找出程序/函数可以在Delphi中引发哪些异常(包括它称为过程/函数)?
在Java中,您始终必须声明可以抛出哪些异常,但在Delphi中并非如此,这可能导致未处理的异常.
是否有任何代码分析工具可以检测未处理的异常?
我们使用Bob Swart的白皮书作为指南,创建了Datasnap服务(使用Delphi XE).它工作正常,我们已将其部署到我们的测试服务器.
现在出现问题,当我们执行大量请求(通过JMeter)时,会发生某种内存损坏.有些请求成功,有些请求因访问冲突而失败.最后,它变得如此腐败,以至于对我们的OWN(而不是DSAdmin)方法的每个请求都会响应访问冲突.
但是,我无法获取堆栈跟踪以获取更多信息,因为在处理请求时已经捕获到异常.
如果我使用此应用程序的VCL版本进行大量测试,它仍然可以正常工作.
有没有人知道这可能是什么,或遇到同样的问题,或者你能帮助我从一个被捕获的异常中获取堆栈跟踪(在别人的代码中,我无法编辑)?
提前致谢.
我知道如何在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版本.
我目前正在尝试缩短我的日志记录命令,因为在其当前形式中,可能很难创建一种方法,允许在现有项目中轻松有效地实现.我当前的标准日志命令如下所示:
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调用所在的前一个方法的名称.我认为有足够的调试信息这应该是可能的,但目前我无法看到如何使这工作.