Firebird 中是不是有详细的调试功能?
Posted
技术标签:
【中文标题】Firebird 中是不是有详细的调试功能?【英文标题】:Is there a detailed debug feature in Firebird?Firebird 中是否有详细的调试功能? 【发布时间】:2019-04-11 13:50:48 【问题描述】:我想调试一个过程的执行。在这个过程后面有几个触发器和事务。在此过程中更新了一个数据集,其行为与所有其他数据集不同。所以想详细调试一下。
我已经尝试使用普通的过程调试器进行调试,但这只是表面上的调试,所以它只调试这个过程,并没有跳转到这个执行中包含的所有表/过程/触发器。
我也尝试使用跟踪和审计功能,但这太混乱了,它显示了太多我不需要的信息。
基本上我需要知道是否有可能像在其他 IDE(例如 Eclipse)中那样进行详细调试。
【问题讨论】:
Firebird 服务器中根本没有 PSQL 调试。甚至你所说的“正常程序调试器”,其实也是IBExpert的仿制品。没有执行任何程序,而是 IBExpert 一个接一个地发出命令,假装它运行该程序(它没有) @Arioch'我认为它实际上是在存储过程中逐步执行。感谢您提供这些信息。 @EdMendez 我记得我在一些极端案例中看到了关于模拟与“原生”Firebird 执行有些不同的讨论,这是意料之中的。模拟从来都不是 100% 完美的,而且还可能有自己的错误/ @Arioch'The 那么是否可以在执行时通过该特定程序进行模拟而不跳入其他程序/触发器等?哇,这很烦人。感谢您的回答! 【参考方案1】:这可能不是您正在寻找的答案,但过去对我有用。
我为捕获运行时统计信息和流程而代替调试所做的工作如下。
在 Firebird 2.5 中,您拥有 autonomous transactions。我有一个存储过程,它接受上下文描述和消息。在 SP 中,我将上下文和消息以及时间戳插入到被视为记录的 Firebird 表中。我将该插入语句包装在“IN AUTONOMOUS TRANSACTION”中。该事务将立即提交该事务,并允许我在过程执行时查看该表中的行。
您可以捕获经过的时间或其他统计信息。这样做的缺点是您需要更新您想要从中获取信息的存储过程和触发器,因此在生产系统中可能不允许这样做。
【讨论】:
是的,这可能是一个选项。即使成本很高,这也可能奏效。【参考方案2】:Firebird 没有针对存储过程的调试功能(除了 trace 提供的功能)。正如 Arioch 的 cmets 所指出的那样,IBExpert 的调试功能模拟了存储过程的执行,它实际上并没有在服务器上单步执行它。
【讨论】:
以上是关于Firebird 中是不是有详细的调试功能?的主要内容,如果未能解决你的问题,请参考以下文章
Firebird 2.1 在某些数据库表中存储大量行是不是有效?