【问题标题】:PL/SQL developer: debugging hangs on certain codePL/SQL 开发人员:调试挂在某些代码上
【发布时间】:2014-04-15 00:26:37
【问题描述】:

我注意到,当使用 PL/SQL Developer 调试代码时,调试器会在单步执行某些代码时挂起。第一个猜测是归咎于那行代码,但进一步调查发现其中没有任何可疑之处。只是存储过程中的简单操作或对系统函数的调用。显然没有理由挂起。

查询系统视图让我发现调试器会话的当前 SQL_CODE 是:

declare ret binary_integer; begin ret := PBSDE.DEBUG_LOOP; end;

一段时间后 PL/SQL Developer 抛出错误:

ORA-06502: PL/SQL: numeric or value error: character to number conversion error

我在 Oracle 支持网站上找到了具有完全相同症状的相关说明(文档 ID 1074885.1)。但是解决方案建议要么有趣,要么可悲。我知道 Oracle Support 上的信息是不允许分享的,但是这样的事情应该打破规则。我将冒昧地完整引用解决方案部分:

不要在调试模式下针对 Oracle 数据库运行 PL/SQL Developer。

是的,就是这样。那么我有什么选择呢?

【问题讨论】:

  • 如果应用程序不受支持并且正在执行不受支持的操作,谁应该修复它?第三方开发者还是平台?

标签: oracle debugging plsql oracle11g plsqldeveloper


【解决方案1】:

似乎您很幸运地遇到了 Oracle 数据库内部错误(技术上不是错误,如果您愿意,可以称之为“功能”)和您使用的 SQL 开发工具的组合。 Allround Automations 论坛上有几个关于此问题的主题(即this one,您可以通过关键字PBSDE.DEBUG_LOOP 搜索其他主题),但没有提出明确的解决方案。通常情况下,Oracle 将责任归咎于工具,Allround Automations 将责任归咎于数据库。

简而言之,PL/SQL Developer 使用系统包DBMS_DEBUG,它是用于调试目的的例程。包本身有点过时(在 8i 版本中引入),但许多 IDE 仍在使用它。挂起的原因在于这个包的某个地方,PL/SQL Developer 与它无关(除了根本不使用这个包)。理想情况下,Oracle 应该修复它,但这不太可能发生,因为有更现代的替代包称为DBMS_DEBUG_JDWP,它具有相同的目的。似乎支持使用此软件包进行调试的唯一工具是 Oracle 自己的 SQL Developer 和 JDeveloper(这就是为什么从 Oracle 方面修复过时代码中的错误的工作很少)。

因此,替代方法是使用 SQL Developer 或 JDeveloper 进行调试,直到 PL/SQL Developer 开始使用 DBMS_DEBUG_JDWP 或 Oracle 修复 DBMS_DEBUGOracle documentation 中有关于该主题的详细分步指南。

【讨论】:

  • 我不会称 DBMS_DEBUG 已过时。 DBMS_DEBUG_JDWP 在某些方面更好,但它需要 Java。这对于 PL/SQL 调试器来说是相当愚蠢的,所以谁能责怪工具没有使用它。而且我在使用该软件包时也遇到了问题。遗憾的是,无论您做什么,PL/SQL 中的调试都很糟糕。我怀疑它永远不会被修复。
  • @jonearles 是的,我同意,“过时”可能不是正确的词。我的意思是,只要 Oracle 不在自己的工具中使用它,就没有动力或没有动力来保持它最新并及时修复错误。他们总是可以说这件事是第三方工具。实际上,当我遇到这个问题时,我尝试使用 Toad 和 SQL Navigator 进行调试,但问题仍然存在。所以包本身肯定有问题。我猜想现代版本中数据库内部的变化并没有完全反映在 DBMS_DEBUG 代码中。
  • @jonearles 关于 Java,请记住,Oracle 数据库对 Java 代码具有原生支持,我们可以混合使用两种语言编写的存储过程。因此,我认为能够使用单个工具进行调试是一种优势。 DBMS_DEBUG_JDWP 的另一个不错的特性是远程调试。遗憾的是,工具开发人员没有推动这一点。
【解决方案2】:

有时,SQL Navigator 会丢失引用并且不调试某些过程。要更正此问题,您应该编译要调试的过程。这并不意味着程序本身无效。

【讨论】:

    猜你喜欢
    • 2015-02-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-30
    • 2019-04-13
    相关资源
    最近更新 更多