Oracle包调试不会在断点处停止。

4
我有以下结构:
一个名为P_Integra的过程中的包PCK_LANCAMENTOSERVICO。
该过程调用另一个包PCK_LANCAMENTO中的一个过程P_BeforeLancamento。
过程P_BeforeLancamento在PCK_UTIL中调用另一个过程P_ProximoLanc。
我正在调试P_Integra(PCK_LANCAMENTOSERVICO)过程。如果我在P_Integra过程中设置断点,这个工作正常。如果我在P_ProximoLanc过程中设置断点,这个也可以正常工作。但是,如果我在P_BeforeLancamento中设置断点,调试器不会停在断点上。
我在所有包中添加了调试信息。PCK_LANCAMENTOSERVICO包有500行。PCK_LANCAMENTO包有4000行,PCK_UTIL包有300行。
调试器在SQL Developer和PL/SQL Developer中都无法工作。
这是否有已知问题?包的大小?或其他的事情?
非常感谢
安德烈
1个回答

4
您可能有执行该过程的权限,但没有调试它的权限。请查看此查询的结果:
select *
from all_tab_privs
where privilege in ('EXECUTE', 'DEBUG')
    and table_name in ('PCK_LANCAMENTOSERVICO', 'PCK_LANCAMENTO', 'PCK_UTIL');

如果缺少 DEBUG,则执行 grant debug on PCK_LANCAMENTO to <your_user>;

这是你问题的答案吗?我也遇到了同样的问题,但我肯定已经授予了调试等权限。我可以在 PL/SQL 调用的一个堆栈帧中停止断点,但不能在较低的堆栈帧中停止。我已经为调试编译了两个过程(头文件和主体)。有点令人沮丧。 - wmorrison365
如果您对所有对象都有特权并且所有对象都已编译为调试模式,则应该可以正常工作。它是无法“步入”还是无法触发断点?有时可能会在不可中断的行上设置断点;您尝试过在多个行上设置断点吗? - Jon Heller
嗨Jon,感谢您的反馈。所有相关的包(头文件和主体)都已编译为调试模式。我可以在更高的堆栈帧中断点,但无法进入较低的帧(不同的包),并且该较低帧中的断点被绕过。在较低堆栈框架的区域添加dbms_output.put_line('You are here '|| $$plsql_line);指示我在该行。奇怪的是,它会跳过感兴趣的过程,但会步进头文件内容。我的SQLDeveloper可能已经过时了,所以打算升级(之前只使用良好的调试日志记录)。 - wmorrison365
@wmorrison365 您可能希望将您的问题作为一个单独的问题发布。 - Jon Heller

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接